{
  "openapi": "3.1.0",
  "info": {
    "title": "Forward Networks: Complete API",
    "description": "Model and verify networks",
    "contact": {
      "email": "support@forwardnetworks.com"
    },
    "license": {
      "name": "MIT",
      "url": "https://spdx.org/licenses/MIT"
    },
    "version": "${apiVersion}"
  },
  "servers": [
    {
      "url": "/api"
    }
  ],
  "tags": [
    {
      "name": "Aliases",
      "description": "Define groups of network infrastructure elements or packet header values",
      "x-displayName": "Aliases"
    },
    {
      "name": "Checks",
      "description": "Enable or define automated checks that verify network policy and behavior",
      "x-displayName": "Checks"
    },
    {
      "name": "Classic Devices",
      "description": "Specify the network devices to collect from and model",
      "x-displayName": "Classic Devices"
    },
    {
      "name": "Credentials",
      "description": "Provide network device credentials needed for network collection",
      "x-displayName": "Credentials"
    },
    {
      "name": "Current Version",
      "description": "Get current API version information",
      "x-displayName": "Current Version"
    },
    {
      "name": "Device Tags",
      "description": "List or manage tags associated with network devices and endpoints",
      "x-displayName": "Device Tags"
    },
    {
      "name": "Jump Servers",
      "description": "Configure jump servers to assist in reaching network devices",
      "x-displayName": "Jump Servers"
    },
    {
      "name": "Network Collection",
      "description": "Configure configuration and state collection from network devices",
      "x-displayName": "Network Collection"
    },
    {
      "name": "Network Devices",
      "description": "List the modeled network devices",
      "x-displayName": "Network Devices"
    },
    {
      "name": "Network Endpoints",
      "description": "Configure network endpoint profiles and specify the network endpoints to collect from",
      "x-displayName": "Network Endpoints"
    },
    {
      "name": "Network Locations",
      "description": "Get, create, update, or delete a network's user-defined locations",
      "x-displayName": "Network Locations"
    },
    {
      "name": "Network Snapshots",
      "description": "List or manage the network Snapshots collected from network devices",
      "x-displayName": "Network Snapshots"
    },
    {
      "name": "Network Topology",
      "description": "List the links inferred between network devices and override them if necessary",
      "x-displayName": "Network Topology"
    },
    {
      "name": "Networks",
      "description": "Create, list, rename, or delete model networks",
      "x-displayName": "Networks"
    },
    {
      "name": "NQE",
      "description": "Ask the Network Query Engine for structured, vendor-agnostic network information",
      "x-displayName": "NQE"
    },
    {
      "name": "Path Search",
      "description": "Trace packets through the network model",
      "x-displayName": "Path Search"
    },
    {
      "name": "Synthetic Devices",
      "description": "Model a network’s internet connections, intranets, L2VPNs, L3VPNs, WAN circuits, and encryptors",
      "x-displayName": "Synthetic Devices"
    },
    {
      "name": "System Administration",
      "description": "Administer the system, including database backups",
      "x-displayName": "System Administration"
    },
    {
      "name": "User Accounts",
      "description": "Manage user accounts",
      "x-displayName": "User Accounts"
    },
    {
      "name": "Vulnerability Analysis",
      "description": "Identify network devices potentially impacted by CVEs",
      "x-displayName": "Vulnerability Analysis"
    }
  ],
  "paths": {
    "/snapshots/{snapshotId}/aliases": {
      "get": {
        "tags": [
          "Aliases"
        ],
        "summary": "Get all Aliases",
        "operationId": "getAllAliases",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aliases"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Aliases"
        ],
        "summary": "Delete Aliases",
        "description": "Use the optional `name` parameter to delete only specific Aliases. It can be repeated as in\n`?name=foo&name=bar`. Omit the `name` parameter to delete all Aliases active in the Snapshot.",
        "operationId": "deactivateAliases",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. The response contains the deleted Aliases.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aliases"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}/aliases/{name}": {
      "get": {
        "tags": [
          "Aliases"
        ],
        "summary": "Get an Alias",
        "operationId": "getSingleAlias",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AliasAndValue"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Aliases"
        ],
        "summary": "Create an Alias",
        "operationId": "createAlias",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AliasBuilder"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alias"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Aliases"
        ],
        "summary": "Delete an Alias",
        "operationId": "deactivateAlias",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alias"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/predefinedChecks": {
      "get": {
        "tags": [
          "Checks"
        ],
        "summary": "Get available Predefined checks",
        "operationId": "getAvailablePredefinedChecks",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AvailablePredefinedCheck"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}/checks": {
      "get": {
        "tags": [
          "Checks"
        ],
        "summary": "Get checks (with status)",
        "operationId": "getChecks",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Can be repeated to request multiple types (as in `?type=NQE&type=Predefined`) or omitted to request all\ntypes.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CheckType"
              }
            }
          },
          {
            "name": "priority",
            "in": "query",
            "description": "Can be repeated to request multiple priorities (as in `?priority=HIGH&priority=LOW`) or omitted to request\nall priorities.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CheckPriority"
              }
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Can be repeated to request multiple statuses (as in `?status=FAIL&status=ERROR`) or omitted to request all\nstatuses.\n\n**Note:** The response will never contain results with `status` NONE or PROCESSING. The server will wait to\nrespond, if necessary, until processing finishes or times out.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CheckStatus"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NetworkCheckResult"
                  }
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Checks"
        ],
        "summary": "Add a check",
        "description": "Note that the returned NetworkCheckResult will never have status of type NONE or PROCESSING",
        "operationId": "addCheck",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "persistent",
            "in": "query",
            "description": "Whether to associate check with any later snapshots (including future snapshots) too",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNetworkCheck"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkCheckResult"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Checks"
        ],
        "summary": "Deactivate all checks",
        "operationId": "deactivateChecks",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}/checks/{checkId}": {
      "get": {
        "tags": [
          "Checks"
        ],
        "summary": "Get a check (with status)",
        "description": "Note that the returned NetworkCheckResults will never have status of type NONE or PROCESSING",
        "operationId": "getCheck",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "checkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkCheckResultWithDiagnosis"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Checks"
        ],
        "summary": "Deactivate a check",
        "operationId": "deactivateCheck",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "checkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices": {
      "get": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Get all classic devices",
        "operationId": "getClassicDevices",
        "x-position": 1,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId",
                  "testResult"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassicDevices"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Add a new classic device",
        "operationId": "addClassicDevice",
        "x-position": 3,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewClassicDevice"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassicDevice"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Update specific classic devices",
        "description": "All JSON properties in the `update` object are optional. Include only the properties you wish\nto change.",
        "operationId": "patchClassicDevices",
        "x-position": 8,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClassicDevicesPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices?action=addBatch": {
      "post": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Add new classic devices",
        "operationId": "addClassicDevices",
        "x-position": 4,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewClassicDevice"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices?action=deleteAll": {
      "post": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Delete all of a network’s classic devices",
        "operationId": "deleteAllClassicDevices",
        "x-position": 7,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices?action=deleteBatch": {
      "post": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Delete specific classic devices",
        "operationId": "deleteClassicDevices",
        "x-position": 6,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices?action=getBatch": {
      "post": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Get specific classic devices",
        "operationId": "getSpecificClassicDevices",
        "x-position": 2,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId",
                  "testResult"
                ]
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceNames"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassicDevices"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices?action=putBatch": {
      "post": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Add or update classic devices",
        "operationId": "putClassicDevices",
        "x-position": 5,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewClassicDevice"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/classic-devices/{deviceName}": {
      "get": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Get a classic device",
        "operationId": "getClassicDevice",
        "x-position": 9,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId",
                  "testResult"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassicDevice"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Add or update a classic device",
        "operationId": "putClassicDevice",
        "x-position": 10,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewClassicDevice"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassicDevice"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Update a classic device",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchClassicDevice",
        "x-position": 11,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClassicDevicePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassicDevice"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Classic Devices"
        ],
        "summary": "Delete a classic device",
        "operationId": "deleteClassicDevice",
        "x-position": 12,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/cli-credentials": {
      "get": {
        "tags": [
          "Credentials"
        ],
        "summary": "Get all CLI credentials",
        "description": "Substitutes a system-generated identifier for each sensitive `password`.",
        "operationId": "getCliCredentials",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoredCliCredential"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Credentials"
        ],
        "summary": "Create a CLI credential",
        "operationId": "createCliCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewCliCredential"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CliCredential"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Credentials"
        ],
        "summary": "Create CLI credentials",
        "description": "The response contains the same credentials as the request, in the same order.",
        "operationId": "createCliCredentials",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewCliCredential"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoredCliCredential"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/cli-credentials/{credentialId}": {
      "get": {
        "tags": [
          "Credentials"
        ],
        "summary": "Get a CLI credential",
        "description": "Substitutes a system-generated identifier for the sensitive `password`.",
        "operationId": "getCliCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoredCliCredential"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Credentials"
        ],
        "summary": "Update a CLI credential",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchCliCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CliCredentialUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoredCliCredential"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Credentials"
        ],
        "summary": "Delete a CLI credential",
        "operationId": "deleteCliCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/http-credentials": {
      "get": {
        "tags": [
          "Credentials"
        ],
        "summary": "Get all HTTP credentials",
        "description": "Substitutes a system-generated identifier for each sensitive `password`.",
        "operationId": "getHttpCredentials",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoredHttpCredential"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Credentials"
        ],
        "summary": "Create an HTTP credential",
        "operationId": "createHttpCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHttpCredential"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpCredential"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Credentials"
        ],
        "summary": "Create HTTP credentials",
        "description": "The response contains the same credentials as the request, in the same order.",
        "operationId": "createHttpCredentials",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewHttpCredential"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoredHttpCredential"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/http-credentials/{credentialId}": {
      "get": {
        "tags": [
          "Credentials"
        ],
        "summary": "Get an HTTP credential",
        "description": "Substitutes a system-generated identifier for the sensitive `password`.",
        "operationId": "getHttpCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoredHttpCredential"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Credentials"
        ],
        "summary": "Update an HTTP credential",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchHttpCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HttpCredentialUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Credentials"
        ],
        "summary": "Delete an HTTP credential",
        "operationId": "deleteHttpCredential",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "credentialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/version": {
      "get": {
        "tags": [
          "Current Version"
        ],
        "summary": "Get the API’s version",
        "operationId": "getApiVersion",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiVersion"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags": {
      "get": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Get all device tags",
        "operationId": "getDeviceTags",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceTags"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Create a device tag",
        "operationId": "addDeviceTag",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceTag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceTag"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags?with=devices": {
      "get": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Get all tags with their devices",
        "description": "If **snapshotId** is specified, the response will include device names that were associated with the tag(s)\nas of the identified network Snapshot.",
        "operationId": "getDeviceTagsWithDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceTagsWithDevices"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags?action=addBatch": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Create device tags",
        "description": "This operation is for creating multiple new device tags all at once.",
        "operationId": "addDeviceTagsBatch",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DeviceTag"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags?action=addBatchTo": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Add tags to devices",
        "description": "If **snapshotId** is specified, the change will take effect starting from the identified network Snapshot,\nand `devices` in the request body must be the names of devices and/or endpoints in the Snapshot. Otherwise,\n`devices` must be the names of devices and/or endpoints configured as _collection sources_, and the change\nwill take effect in the network’s next Snapshot.\n\nTo skip validation of `devices`, set the query parameter **validateDevices** to **false** in the URL.",
        "operationId": "addDeviceTagsToDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "validateDevices",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DevicesAndTags"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags?action=removeAllFrom": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Remove all tags from devices",
        "description": "If **snapshotId** is specified, the change will take effect starting from the identified network Snapshot,\nand `devices` in the request body must be the names of devices and/or endpoints in the Snapshot. Otherwise,\n`devices` must be the names of devices and/or endpoints configured as _collection sources_, and the change\nwill take effect in the network’s next Snapshot.\n\nTo skip validation of `devices`, set the query parameter **validateDevices** to **false** in the URL.",
        "operationId": "removeAllDeviceTagsFromDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "validateDevices",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceSet"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags?action=removeBatchFrom": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Remove tags from devices",
        "description": "If **snapshotId** is specified, the change will take effect starting from the identified network Snapshot,\nand `devices` in the request body must be the names of devices and/or endpoints in the Snapshot. Otherwise,\n`devices` must be the names of devices and/or endpoints configured as _collection sources_, and the change\nwill take effect in the network’s next Snapshot.\n\nTo skip validation of `devices`, set the query parameter **validateDevices** to **false** in the URL.",
        "operationId": "removeDeviceTagsFromDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "validateDevices",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DevicesAndTags"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags?action=replaceAllFor": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Replace all tags for devices",
        "description": "If **snapshotId** is specified, the change will take effect starting from the identified network Snapshot,\nand `devices` in the request body must be the names of devices and/or endpoints in the Snapshot. Otherwise,\n`devices` must be the names of devices and/or endpoints configured as _collection sources_, and the change\nwill take effect in the network’s next Snapshot.\n\nTo skip validation of `devices`, set the query parameter **validateDevices** to **false** in the URL.",
        "operationId": "replaceAllDeviceTagsForDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "validateDevices",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DevicesAndTags"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags/{tagName}": {
      "get": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Get a device tag",
        "operationId": "getDeviceTag",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceTag"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Update a device tag",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateDeviceTag",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceTagPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceTag"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Delete a device tag",
        "description": "**Warning:** This operation deletes the device tag from the network completely. It removes the tag from all\ndevices and endpoints in all the network’s Snapshots.",
        "operationId": "deleteDeviceTag",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags/{tagName}?with=devices": {
      "get": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Get a tag with its devices",
        "description": "If **snapshotId** is specified, the response will include device names that were associated with the tag(s)\nas of the identified network Snapshot.",
        "operationId": "getDeviceTagWithDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceTagWithDevices"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags/{tagName}?action=addTo": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Add a tag to devices",
        "description": "If **snapshotId** is specified, the change will take effect starting from the identified network Snapshot,\nand `devices` in the request body must be the names of devices and/or endpoints in the Snapshot. Otherwise,\n`devices` must be the names of devices and/or endpoints configured as _collection sources_, and the change\nwill take effect in the network’s next Snapshot.\n\nTo skip validation of `devices`, set the query parameter **validateDevices** to **false** in the URL.",
        "operationId": "addDeviceTagToDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "validateDevices",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceSet"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/device-tags/{tagName}?action=removeFrom": {
      "post": {
        "tags": [
          "Device Tags"
        ],
        "summary": "Remove a tag from devices",
        "description": "If **snapshotId** is specified, the change will take effect starting from the identified network Snapshot,\nand `devices` in the request body must be the names of devices and/or endpoints in the Snapshot. Otherwise,\n`devices` must be the names of devices and/or endpoints configured as _collection sources_, and the change\nwill take effect in the network’s next Snapshot.\n\nTo skip validation of `devices`, set the query parameter **validateDevices** to **false** in the URL.",
        "operationId": "removeDeviceTagFromDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "snapshotId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "validateDevices",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceSet"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/jumpServers": {
      "get": {
        "tags": [
          "Jump Servers"
        ],
        "summary": "Get all jump servers",
        "description": "Substitutes a system-generated identifier for each sensitive `password` and `sshKey`.",
        "operationId": "getJumpServers",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoredJumpServer"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Jump Servers"
        ],
        "summary": "Create a jump server",
        "operationId": "createJumpServer",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewJumpServer"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JumpServer"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/jumpServers/{jumpServerId}": {
      "patch": {
        "tags": [
          "Jump Servers"
        ],
        "summary": "Update a jump server",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "editJumpServer",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jumpServerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JumpServerUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Jump Servers"
        ],
        "summary": "Delete a jump server",
        "operationId": "deleteJumpServer",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jumpServerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/collector-tasks": {
      "post": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Add a collector task",
        "description": "Signals the system to begin collecting a new network Snapshot as soon as a Collector is available. Use [Get a\ncollector task](https://docs.fwd.app/latest/api/network-collection/get-collector-task/) to check a task’s\nstatus.\n\nA network can have only one network collection task running at a time.",
        "operationId": "addCollectorTask",
        "parameters": [
          {
            "name": "networkId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "const": "NETWORK_COLLECTION"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartCollectionResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/collector-tasks/{taskId}": {
      "get": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Get a collector task",
        "description": "Get information about a recent collector task. Use\n[Add a collector task](https://docs.fwd.app/latest/api/network-collection/add-collector-task/) to create a task.",
        "operationId": "getCollectorTask",
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "description": "The identifier of the collector task to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectorTask"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/cancelcollection": {
      "post": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Cancel an in-progress network collection",
        "operationId": "cancelCollect",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/collection-schedules": {
      "get": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Get a network’s collection schedules",
        "operationId": "getCollectionSchedules",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionSchedules"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Add a network collection schedule",
        "operationId": "addCollectionSchedule",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CollectionScheduleDefinition"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionSchedule"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/collection-schedules/{scheduleId}": {
      "get": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Get a network collection schedule",
        "operationId": "getCollectionSchedule",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionSchedule"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Replace a network collection schedule",
        "operationId": "replaceCollectionSchedule",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CollectionSchedule"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Delete a network collection schedule",
        "operationId": "deleteCollectionSchedule",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/collector/status": {
      "get": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Get the status of a network’s collector",
        "description": "**Deprecated for removal in release 26.6.** Use [Get a collector\ntask](https://docs.fwd.app/latest/api/network-collection/get-collector-task/) instead to check the status of\na task.",
        "operationId": "getCollectorState",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectorState"
                }
              }
            }
          }
        },
        "deprecated": true,
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/startcollection": {
      "post": {
        "tags": [
          "Network Collection"
        ],
        "summary": "Trigger a network collection",
        "description": "**Deprecated for removal in release 26.6.** Use\n[Add a collector task](https://docs.fwd.app/latest/api/network-collection/add-collector-task/) instead.",
        "operationId": "collect",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "deprecated": true,
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/devices": {
      "get": {
        "tags": [
          "Network Devices"
        ],
        "summary": "Get all network devices",
        "description": "All glob filter parameters ignore case and support [the common glob\nwildcards](https://en.wikipedia.org/wiki/Glob_(programming)#Syntax) (`*`, `?`, `[abc]`, `[a-z]`).",
        "operationId": "getDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "`\"name\"` glob filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "displayName",
            "in": "query",
            "description": "`\"displayName\"` glob filter. Use `?displayName=` to request devices that have no `\"displayName\"` property\n(because it’s the same as `\"name\"`).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sourceName",
            "in": "query",
            "description": "`\"sourceName\"` glob filter. Use `?sourceName=` to request devices that have no `\"sourceName\"` property\n(because it’s the same as `\"name\"`).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "`\"type\"` glob filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vendor",
            "in": "query",
            "description": "`\"vendor\"` glob filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "query",
            "description": "`\"model\"` glob filter. Use `?model=` to request devices with no `\"model\"` property.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "platform",
            "in": "query",
            "description": "`\"platform\"` glob filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "osVersion",
            "in": "query",
            "description": "`\"osVersion\"` glob filter. Use `?osVersion=` to request devices with no `\"osVersion\"` property.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "collectionError",
            "in": "query",
            "description": "`\"collectionError\"` glob filter. Use `?collectionError=` to request devices with no `\"collectionError\"`\nproperty (because collection succeeded). Use `?collectionError=*` to request devices that had a collection\nerror of any kind.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processingError",
            "in": "query",
            "description": "`\"processingError\"` glob filter. Use `?processingError=` to request devices with no `\"processingError\"`\nproperty (because processing succeeded). Use `?processingError=*` to request devices that had a processing\nerror of any kind.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Number of devices to skip (for paging)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of devices desired",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "with",
            "in": "query",
            "description": "Optional device properties to include",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId"
                ]
              }
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Device"
                  }
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/devices/{deviceName}": {
      "get": {
        "tags": [
          "Network Devices"
        ],
        "summary": "Get a network device",
        "operationId": "getDevice",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with",
            "in": "query",
            "description": "Optional device properties to include",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId"
                ]
              }
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Device"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/devices/{deviceName}/files": {
      "get": {
        "tags": [
          "Network Devices"
        ],
        "summary": "List a device’s data files",
        "operationId": "getDeviceFiles",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceFiles"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/devices/{deviceName}/files/{fileName}": {
      "get": {
        "tags": [
          "Network Devices"
        ],
        "summary": "Get device data file content",
        "description": "Most device data files are text files. Some are binary. A file’s extension indicates its type.\n\nFor convenience, the .txt file extension is optional (can be omitted).",
        "operationId": "getDeviceFileContent",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain;charset=utf-8": {
                "schema": {
                  "type": "string",
                  "format": "byte"
                }
              },
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "byte"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "text/plain;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              },
              "application/octet-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/missing-devices": {
      "get": {
        "tags": [
          "Network Devices"
        ],
        "summary": "Get missing network devices",
        "description": "Returns devices that are listed as CDP, LLDP, iBGP or OSPF neighbors of modeled devices but that aren’t yet\nincluded in the network model.",
        "operationId": "getMissingDevices",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Devices are sorted by number of neighbors (most first) and secondarily by name.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MissingDevices"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles": {
      "get": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Get all endpoint profiles",
        "operationId": "getEndpointProfiles",
        "x-position": 1,
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfiles"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles?type=CLI": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add a CLI endpoint profile",
        "operationId": "createCliEndpointProfile",
        "x-position": 2,
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CliEndpointProfileDef"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles?type=HTTP": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add an HTTP endpoint profile",
        "operationId": "createHttpEndpointProfile",
        "x-position": 3,
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HttpEndpointProfileDef"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles?type=SNMP": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add an SNMP endpoint profile",
        "operationId": "createSnmpEndpointProfile",
        "x-position": 4,
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SnmpEndpointProfileDef"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles/CLI-{profileId}": {
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update a CLI endpoint profile",
        "operationId": "updateCliEndpointProfile",
        "x-position": 6,
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "description": "Profile ID (the numeric part)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CliEndpointProfilePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles/HTTP-{profileId}": {
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update an HTTP endpoint profile",
        "operationId": "updateHttpEndpointProfile",
        "x-position": 7,
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "description": "Profile ID (the numeric part)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HttpEndpointProfilePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles/SNMP-{profileId}": {
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update an SNMP endpoint profile",
        "operationId": "updateSnmpEndpointProfile",
        "x-position": 8,
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "description": "Profile ID (the numeric part)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SnmpEndpointProfilePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/endpoint-profiles/{profileId}": {
      "get": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Get an endpoint profile",
        "operationId": "getEndpointProfile",
        "x-position": 5,
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointProfile"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Delete an endpoint profile",
        "operationId": "deleteEndpointProfile",
        "x-position": 9,
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints": {
      "get": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Get a network’s endpoints",
        "operationId": "getNetworkEndpoints",
        "x-position": 10,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId",
                  "testResult"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkEndpoints"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update specific network endpoints",
        "description": "All JSON properties in the `update` object are optional. Include only the properties you wish\nto change.",
        "operationId": "patchNetworkEndpoints",
        "x-position": 18,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NetworkEndpointsPatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?type=CLI": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add a CLI network endpoint",
        "operationId": "createCliNetworkEndpoint",
        "x-position": 11,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewCliNetworkEndpoint"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CliNetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?type=HTTP": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add an HTTP network endpoint",
        "operationId": "createHttpNetworkEndpoint",
        "x-position": 12,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHttpNetworkEndpoint"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpNetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?type=SNMP": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add an SNMP network endpoint",
        "operationId": "createSnmpNetworkEndpoint",
        "x-position": 13,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewSnmpNetworkEndpoint"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnmpNetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?action=addBatch&type=CLI": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add CLI network endpoints",
        "operationId": "createCliNetworkEndpoints",
        "x-position": 14,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewCliNetworkEndpoint"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?action=addBatch&type=HTTP": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add HTTP network endpoints",
        "operationId": "createHttpNetworkEndpoints",
        "x-position": 15,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewHttpNetworkEndpoint"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?action=addBatch&type=SNMP": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Add SNMP network endpoints",
        "operationId": "createSnmpNetworkEndpoints",
        "x-position": 16,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewSnmpNetworkEndpoint"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints?action=deleteBatch": {
      "post": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Delete specific network endpoints",
        "operationId": "deleteNetworkEndpoints",
        "x-position": 17,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceNames"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints/{endpointName}": {
      "get": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Get a network endpoint",
        "operationId": "getNetworkEndpoint",
        "x-position": 19,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endpointName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "with",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "tags",
                  "locationId",
                  "testResult"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Delete a network endpoint",
        "operationId": "deleteNetworkEndpoint",
        "x-position": 23,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endpointName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints/{endpointName}?type=CLI": {
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update a CLI network endpoint",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateCliNetworkEndpoint",
        "x-position": 20,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endpointName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CliNetworkEndpointPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CliNetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints/{endpointName}?type=HTTP": {
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update an HTTP network endpoint",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateHttpNetworkEndpoint",
        "x-position": 21,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endpointName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HttpNetworkEndpointPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpNetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/endpoints/{endpointName}?type=SNMP": {
      "patch": {
        "tags": [
          "Network Endpoints"
        ],
        "summary": "Update an SNMP network endpoint",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateSnmpNetworkEndpoint",
        "x-position": 22,
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endpointName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SnmpNetworkEndpointPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnmpNetworkEndpoint"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/atlas": {
      "get": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Get device locations",
        "description": "The response is a JSON object that maps device names to their location ids.\n\nSample response: `{\"atl-edge-fw01\": \"2\", \"ny-edge-fw2\": \"1\"}`",
        "operationId": "getAtlas",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Update device locations",
        "description": "The request is a JSON object that maps device names to their new location ids.\n\nSample request: `{\"atl-edge-fw01\": \"2\", \"ny-edge-fw2\": \"1\"}`",
        "operationId": "updateAtlas",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/locations": {
      "get": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Get a network’s locations",
        "operationId": "getLocations",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Location"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Create a network location",
        "operationId": "addLocation",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewLocation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Location"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Create network locations",
        "description": "Creates multiple locations at once. Can be helpful when first setting up a network.\n\nFails (as a precautionary measure) with 409 Conflict if the network already has any network locations.",
        "operationId": "putLocations",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Location"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          },
          "409": {
            "description": "Occurs (as a precautionary measure) if the network already has any network locations.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Create or update network locations",
        "description": "Any patches that specify an existing location’s `id` will update the existing location. Any other patches\nwill each create a new location. Patches are applied sequentially.",
        "operationId": "patchLocations",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/LocationBulkPatch"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/locations/{locationId}": {
      "get": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Get a network location",
        "operationId": "getLocation",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Location"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Update a network location",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchLocation",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LocationPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Location"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Delete a network location",
        "description": "When a location with devices is deleted, all of its devices will be unassigned.",
        "operationId": "deleteLocation",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/locations/{locationId}/clusters": {
      "get": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Get the device clusters at a location",
        "operationId": "getDeviceClusters",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeviceCluster"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Create a device cluster at a location",
        "operationId": "addDeviceCluster",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceCluster"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Replace all device clusters at a location",
        "operationId": "putDeviceClusters",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DeviceCluster"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/locations/{locationId}/clusters/{clusterName}": {
      "get": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Get a device cluster",
        "operationId": "getDeviceCluster",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clusterName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceCluster"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Update a device cluster",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateDeviceCluster",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clusterName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceClusterUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Network Locations"
        ],
        "summary": "Delete a device cluster",
        "operationId": "deleteDeviceCluster",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clusterName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/snapshots": {
      "get": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "List all Snapshots",
        "operationId": "listNetworkSnapshots",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "description": "List only Snapshots in this state.",
            "schema": {
              "$ref": "#/components/schemas/SnapshotState"
            }
          },
          {
            "name": "minSuccessfulDevices",
            "in": "query",
            "description": "List only Snapshots with at least this many successfully modeled devices.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "minSuccessfulDevicePct",
            "in": "query",
            "description": "List only Snapshots with at least this percentage of devices successfully modeled.",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "maxCollectionFailureDevices",
            "in": "query",
            "description": "List only Snapshots with no more than this many devices from which collection has failed.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "maxCollectionFailureDevicePct",
            "in": "query",
            "description": "List only Snapshots with no more than this percentage of devices from which collection has\nfailed.",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "maxParsingFailureDevices",
            "in": "query",
            "description": "List only Snapshots with no more than this many devices for which parsing of collected data has\nfailed.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "maxParsingFailureDevicePct",
            "in": "query",
            "description": "List only Snapshots with no more than this percentage of devices for which parsing of collected data has\nfailed.",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of Snapshots desired",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeArchived",
            "in": "query",
            "description": "Also include archived snapshots. Defaults to false if not provided.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkSnapshots"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "Import a Snapshot",
        "description": "Imports a network Snapshot that was previously exported as a .zip file. If multiple Snapshot .zip files are\nuploaded in a single request, they will be merged. They must not have any devices in common.",
        "operationId": "createSnapshot",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  },
                  "note": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnapshotInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/snapshots/latestProcessed": {
      "get": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "Get the latest processed Snapshot",
        "description": "Returns the latest processed Snapshot (the most recent one that's currently prepared for\n[path searches](https://docs.fwd.app/latest/api/path-search/) and\n[new checks](https://docs.fwd.app/latest/api/checks/)).\n\nTriggers processing of the latest Snapshot if it's not already underway and the network has no processed\nSnapshots.",
        "operationId": "getLatestProcessedSnapshot",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Processing is complete for the identified Snapshot.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnapshotInfo"
                }
              }
            }
          },
          "404": {
            "description": "The network has no Snapshots.",
            "content": {}
          },
          "409": {
            "description": "None of the Snapshots in the network are processed. Processing of the latest Snapshot has\nbegun.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}": {
      "get": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "Export a Snapshot",
        "description": "Exports a network Snapshot as a .zip file.",
        "operationId": "exportSnapshot",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "only",
            "in": "query",
            "description": "Use `?only=CONFIG` to include only device configuration files.",
            "schema": {
              "type": "string",
              "const": "CONFIG"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "Export a Snapshot subset",
        "description": "Exports a network Snapshot as a .zip file, optionally limiting which devices are included and optionally\n[obfuscating](https://docs.fwd.app/latest/application/settings/system/obfuscate-snapshot/) sensitive data.\n\nTo limit which devices are included, specify either `\"includeDevices\"` or `\"excludeDevices\"`. To obfuscate,\nspecify an `\"obfuscationKey\"`.",
        "operationId": "exportSnapshotSubset",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SnapshotExportParams"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "Delete a Snapshot",
        "operationId": "deleteSnapshot",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}/metrics": {
      "get": {
        "tags": [
          "Network Snapshots"
        ],
        "summary": "Get Snapshot metrics",
        "description": "Returns collection and processing health metrics of a Snapshot.",
        "operationId": "getSnapshotMetrics",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved metrics for the Snapshot.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnapshotMetrics"
                }
              }
            }
          },
          "404": {
            "description": "The Snapshot was not found or its metrics were not found; the health metrics will be recomputed if the\nSnapshot is reprocessed.",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}/topology": {
      "get": {
        "tags": [
          "Network Topology"
        ],
        "summary": "Get the network topology",
        "description": "The links in the response are directed, so they generally appear twice—once for each direction.",
        "operationId": "getTopology",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TopologyLink"
                  }
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/snapshots/{snapshotId}/topology/overrides": {
      "get": {
        "tags": [
          "Network Topology"
        ],
        "summary": "Get the topology overrides",
        "operationId": "getLinkOverrides",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkOverrides"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Network Topology"
        ],
        "summary": "Edit the topology overrides",
        "operationId": "editLinkOverrides",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkOverridesEdit"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Network Topology"
        ],
        "summary": "Set the topology overrides",
        "description": "Replaces any topology overrides previously saved for the Snapshot.",
        "operationId": "replaceLinkOverrides",
        "parameters": [
          {
            "name": "snapshotId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkOverrides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks": {
      "get": {
        "tags": [
          "Networks"
        ],
        "summary": "Get all networks",
        "operationId": "getNetworks",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Network"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Networks"
        ],
        "summary": "Create a network",
        "operationId": "createNetwork",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Network"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}": {
      "patch": {
        "tags": [
          "Networks"
        ],
        "summary": "Update a network",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateNetwork",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NetworkUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Network"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Networks"
        ],
        "summary": "Delete a network",
        "operationId": "deleteNetwork",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Network"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/workspaces": {
      "post": {
        "tags": [
          "Networks"
        ],
        "summary": "Create a Workspace network",
        "description": "A [Workspace network](https://docs.fwd.app/latest/application/change-mgmt/workspace_network/) is a network that\ncollects from only a subset of the devices in a large “parent” network. This kind of network can be useful\nin time-sensitive situations like change management windows.",
        "operationId": "createWorkspaceNetwork",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "description": "The id of the parent network",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Information about the new Workspace network",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspaceNetworkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Network"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/nqe": {
      "post": {
        "tags": [
          "NQE"
        ],
        "summary": "Run an NQE query",
        "operationId": "runNqeQuery",
        "parameters": [
          {
            "name": "networkId",
            "in": "query",
            "description": "The ID of the Network to query. Required unless the `snapshotId` parameter is provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "requestBody": {
          "description": "In the example request body, up to 100 rows are requested, starting from row 20, from the results consisting\nof all the rows, sorted by the `Name` column in ascending order, and limiting to those rows whose `Name`\nproperty contains `MyDeviceName`. Note that the sample JSON object contains both the `query` and `queryId`\nproperties and therefore is NOT a valid request. If you use this example for testing, then make sure to remove\none of them. The example `parameters` object is only there as an example. It is not needed for either of the\nreferenced queries. The referenced query must define parameters `mtuThreshold` of type `Integer` and\n`ntpServers` of type `List<IpAddress>` for these values to be valid.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NqeQueryRunRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The response contains the query's results in the `items` property.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NqeRunResult"
                }
              }
            }
          },
          "400": {
            "description": "The query did not complete successfully. For example, the query could not be parsed, the column filters\nwere invalid, or the query timed out or was cancelled during execution. The response will contain\n`completionType`, `errors`, and `snapshotId` properties that provide detailed information on the errors. See\nmodel for more information. Note that a response with a 400 code can happen for other errors, such as a lack\nof permission to execute the query, or a request that specified a Query ID for a deleted query without also\nspecifying a Commit ID. In such cases, the `completionType`, `errors`, and `snapshotId` properties will be\nomitted from the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NqeErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/nqe-diffs/{before}/{after}": {
      "post": {
        "tags": [
          "NQE"
        ],
        "summary": "Compare NQE query results",
        "description": "Identifies differences in the results of an NQE query for two Snapshots of a network.",
        "operationId": "getNqeQueryDiff",
        "parameters": [
          {
            "name": "before",
            "in": "path",
            "description": "The ID for the Snapshot to base the diff on.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "after",
            "in": "path",
            "description": "The ID for the Snapshot to diff against the base Snapshot.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The `queryId` property contains a Query ID of a query in NQE Library (this can be found in the information\ncallout of a query listed in the Queries pane). The `commitId` property contains a Commit ID of the query\nidentified by `queryId` (this can also be found in either the information callout in the Queries pane, or in\nthe callout in the Versions view dropdown). Use `commitId` to run a specific version of the query. The\n`options` property is optional and can be used to refine the results and/or specify the JSON format. In the\nsample object below, `options` requests up to 100 rows, starting from row 20, from the results consisting of\nall the rows, sorted by `Name` column in ascending order and limited to those rows whose `Name` property\ncontains `ATL`, rendered with JSON arrays and objects instead of strings. The `options` property also allows\nfor sorting and filtering on the diff change type column. To do this, set the `columnName` value on either the\n`sortBy` or `columnFilters` property to `ChangeType`. It has three possible values: `MODIFIED`, `ADDED`, or\n`DELETED`. The `parameters` property can be omitted if the query has no declared parameters. If the query\ndeclares parameters, the `parameters` property should contain a JSON object providing the values for the\nparameters to use while executing the query for this request. The provided parameter values must match the\nparameter types declared in the NQE query.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NqeDiffRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The response contains the query's diff results in the `rows` property.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NqeDiffResult"
                }
              }
            }
          },
          "400": {
            "description": "The diff request did not complete successfully. For example, the query indicated by `queryId` could be\ninvalid, the `options` for the query were invalid, the query and/or diff timed out or was cancelled during\nexecution, or the user does not have permission to execute the query.",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/nqe/queries": {
      "get": {
        "tags": [
          "NQE"
        ],
        "summary": "List all NQE queries",
        "operationId": "getNqeQueries",
        "parameters": [
          {
            "name": "dir",
            "in": "query",
            "description": "If specified, include only queries in the given directory. The directory must start and end with a forward\nslash, such as `/L3/Advanced/`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NqeQuery"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/l7-applications": {
      "get": {
        "tags": [
          "Path Search"
        ],
        "summary": "List known L7 applications",
        "operationId": "getL7Applications",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/L7Application"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/paths": {
      "get": {
        "tags": [
          "Path Search"
        ],
        "summary": "Trace packets through the network",
        "operationId": "getPaths",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "the device from which the traffic originates. If this is specified, then the srcIp will be considered as a\npacket header only, else, the srcIp will be resolved to specific location(s) and used as the source in the\npath search. Either the source device or srcIp must be specified.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "srcIp",
            "in": "query",
            "description": "the source IP address or subnet of packets entering the network. For multicast (*, G) paths, set srcIp = G\n(multicast group address).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dstIp",
            "in": "query",
            "description": "the destination IP address or subnet of packets entering the network. For multicast (*, G) paths, set dstIp\n= G (multicast group address).",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "intent",
            "in": "query",
            "description": "Specifies the intent for the search. Default PREFER_DELIVERED.\n*PREFER_VIOLATIONS*: Prefer paths that result in the traffic not getting delivered, e.g. drops, blackholes,\nloops. An example usage is while trying to evaluate if the specified traffic always gets delivered to the\ndestination along all path choices.\n*PREFER_DELIVERED*: Prefer paths that result in the traffic getting delivered. An example usage is while\ntrying to evaluate if traffic gets delivered to the destination along any path choice.\n*VIOLATIONS_ONLY*: Search for paths where traffic is not delivered to the destination.",
            "schema": {
              "$ref": "#/components/schemas/SearchIntent",
              "default": "PREFER_DELIVERED"
            }
          },
          {
            "name": "ipProto",
            "in": "query",
            "description": "the IP protocol",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "srcPort",
            "in": "query",
            "description": "the L4 source port, like \"80\" or a range \"8080-8088\"",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dstPort",
            "in": "query",
            "description": "the L4 destination port, like \"80\" or a range \"8080-8088\"",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "icmpType",
            "in": "query",
            "description": "the ICMP type. Implies ipProto = 1.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fin",
            "in": "query",
            "description": "the FIN (finish) bit (0 or 1). Implies ipProto = 6.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "syn",
            "in": "query",
            "description": "the SYN (synchronize) bit (0 or 1). Implies ipProto = 6.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rst",
            "in": "query",
            "description": "the RST (reset) bit (0 or 1). Implies ipProto = 6.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "psh",
            "in": "query",
            "description": "the PSH (push) bit (0 or 1). Implies ipProto = 6.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ack",
            "in": "query",
            "description": "the ACK (acknowledgment) bit (0 or 1). Implies ipProto = 6.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "urg",
            "in": "query",
            "description": "the URG (urgent) bit (0 or 1). Implies ipProto = 6.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "appId",
            "in": "query",
            "description": "the L7 app-id or \"unidentified\" to exclude paths that traverse firewall policies with app-id matches. If the\nsystem doesn't recognize the provided value, it handles the value the same as \"unidentified\" and includes\nthe value in the `unrecognizedValues` response field. The applications that are recognized by the model can\nbe obtained using GET /api/l7-applications.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "the L7 user-id or \"unidentified\" to exclude paths that traverse firewall policies with user-id matches. If\nthe system doesn't recognize the provided value, it handles the value the same as \"unidentified\" and\nincludes the value in the `unrecognizedValues` response field. See [Path Analysis with Layer 7\nUser-Group](https://docs.fwd.app/latest/application/search/path-analysis/layer7_ugroup/) for more info.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userGroupId",
            "in": "query",
            "description": "the L7 user-group-id. If the system doesn't recognize the provided value, the search returns 0 results as\nthere are no paths that traverse firewall policies with that user-group-id match, and the value is included\nin the `unrecognizedValues` response field. See [Path Analysis with Layer 7\nUser-Group](https://docs.fwd.app/latest/application/search/path-analysis/layer7_ugroup/) for more info.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "description": "the L7 URL that traffic of interest is trying to access. Prefix wildcards are supported for subdomains.\nSuffix wildcards are supported for top-level domains and URL paths. See [Path Analysis with Layer 7\nURL](https://docs.fwd.app/latest/application/search/path-analysis/layer7_url/) for more policy patterns\nsupported in the model.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeTags",
            "in": "query",
            "description": "If true, the response will include device tags for each hop.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "includeNetworkFunctions",
            "in": "query",
            "description": "If true, the response includes detailed forwarding info for each hop.\nNote: Setting this to true increases the API response time.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "maxCandidates",
            "in": "query",
            "description": "the limit on the number of search results computed, before applying any ranking criteria. Permitted range =\n1 to 10,000. Default 5,000.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5000
            }
          },
          {
            "name": "maxResults",
            "in": "query",
            "description": "the limit on the number of search results returned by the API. First, the platform computes up to\nmaxCandidates results that match the search criteria. Then they are sorted by various ranking criteria. A\nkey ranking factor is path length, preferring longer paths (greatest reach) in the network over shorter\nones. Finally, the API limits the number of returned search results to maxResults. Permitted range = 1 to\nmaxCandidates. Default 1.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "maxReturnPathResults",
            "in": "query",
            "description": "the limit on the number of return path search results. Permitted range = 0 to 10,000. Default 0. Multicast\n(*, G) and (S, G) queries will always return 0 return path results regardless of this value.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "maxSeconds",
            "in": "query",
            "description": "the timeout duration. Permitted range = 1 to 300. Default 30.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 30
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PathSearchResponse"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/paths-bulk": {
      "post": {
        "tags": [
          "Path Search"
        ],
        "summary": "Trace sets of packets through the network",
        "operationId": "getPathsBulk",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PathSearchBulkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The response is an array containing a result (a `PathSearchResponse` or an error object) for each query in\nthe request, in the same order. An error object has an `\"error\": true` property. Each query is evaluated\nindependently.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PathSearchResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request failed input validation. For example, a request parameter is outside the permitted range or an\ninput path search query had an invalid IP protocol and ICMP type combination.",
            "content": {}
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/paths-bulk-seq": {
      "post": {
        "tags": [
          "Path Search"
        ],
        "summary": "Trace sets of packets through the network",
        "operationId": "getPathsBulkSeq",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PathSearchBulkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The response is a sequence of a result (a `PathSearchResponse` or an error object) for each query in the\nrequest, in the same order. Each result is prefixed by an ASCII Record Separator (0x1E), and ends with an\nASCII Line Feed character (0x0A), as described in [RFC 7464: JSON Text\nSequences](https://tools.ietf.org/html/rfc7464). An error object has an `\"error\": true` property. Each query\nis evaluated independently.",
            "content": {
              "application/json-seq": {
                "schema": {
                  "$ref": "#/components/schemas/PathSearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request failed input validation. For example, a request parameter is outside the permitted range or an\ninput path search query had an invalid IP protocol and ICMP type combination.",
            "content": {}
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json-seq": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/encryptors": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get a network's encryptors",
        "operationId": "getEncryptors",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EncryptorList"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Replace all of a network’s encryptors",
        "operationId": "putEncryptors",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptorList"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/encryptors/{deviceName}": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an encryptor",
        "operationId": "getEncryptor",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Encryptor"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add or replace an encryptor",
        "operationId": "putEncryptor",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Encryptor"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Update an encryptor",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchEncryptor",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EncryptorPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Encryptor"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an encryptor",
        "operationId": "deleteEncryptor",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/internet-node": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get the network’s internet node",
        "operationId": "getInternetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternetNode"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Replace the network’s internet node",
        "operationId": "putInternetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InternetNode"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Update the network’s internet node",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateInternetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InternetNodePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternetNode"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/internet-node/connections": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get the internet node’s connections",
        "operationId": "getInternetNodeConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add a connection to the internet node",
        "operationId": "addInternetNodeConnection",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L3SyntheticWanConnection"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove internet node connections",
        "operationId": "deleteInternetNodeConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/intranet-nodes": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get a network’s intranet nodes",
        "operationId": "getIntranetNodes",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntranetNodeList"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Replace all of a network’s intranet nodes",
        "operationId": "putIntranetNodes",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntranetNodeList"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/intranet-nodes/{nodeName}": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an intranet node",
        "operationId": "getIntranetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntranetNode"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add or replace an intranet node",
        "operationId": "putIntranetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntranetNode"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Update an intranet node",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchIntranetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntranetNodePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntranetNode"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an intranet node",
        "operationId": "deleteIntranetNode",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/intranet-nodes/{nodeName}/connections": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an intranet node’s connections",
        "operationId": "getIntranetNodeConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add a connection to an intranet node",
        "operationId": "addIntranetNodeConnection",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L3SyntheticWanConnection"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an intranet node’s connections",
        "operationId": "deleteIntranetNodeConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nodeName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/l2-vpns": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get a network’s L2VPNs",
        "operationId": "getL2Vpns",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L2VpnList"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Replace all of a network’s L2VPNs",
        "operationId": "putL2Vpns",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L2VpnList"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/l2-vpns/{l2VpnName}": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an L2VPN",
        "operationId": "getL2Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L2Vpn"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add or replace an L2VPN",
        "operationId": "putL2Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L2Vpn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Update an L2VPN",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchL2Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L2VpnPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L2Vpn"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an L2VPN",
        "operationId": "deleteL2Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/l2-vpns/{l2VpnName}/connections": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an L2VPN’s connections",
        "operationId": "getL2VpnConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "device",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "port",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add a connection to an L2VPN",
        "operationId": "addL2VpnConnection",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L2VpnConnection"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an L2VPN’s connections",
        "operationId": "deleteL2VpnConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l2VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "device",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "port",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/l3-vpns": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get a network’s L3VPNs",
        "operationId": "getL3Vpns",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L3VpnList"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Replace all of a network’s L3VPNs",
        "operationId": "putL3Vpns",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L3VpnList"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/l3-vpns/{l3VpnName}": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an L3VPN",
        "operationId": "getL3Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L3Vpn"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add or replace an L3VPN",
        "operationId": "putL3Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L3Vpn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Update an L3VPN",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchL3Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L3VpnPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L3Vpn"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an L3VPN",
        "operationId": "deleteL3Vpn",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/l3-vpns/{l3VpnName}/connections": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get an L3VPN’s connections",
        "operationId": "getL3VpnConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add a connection to an L3VPN",
        "operationId": "addL3VpnConnection",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/L3SyntheticWanConnection"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove an L3VPN’s connections",
        "operationId": "deleteL3VpnConnections",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "l3VpnName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uplinkPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayDevice",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gatewayPort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vlan",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyntheticConnections"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/wan-circuits": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get a network’s WAN circuits",
        "operationId": "getWanCircuits",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WanCircuitList"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Replace all of a network’s WAN circuits",
        "operationId": "putWanCircuits",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WanCircuitList"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/wan-circuits/{wanCircuitName}": {
      "get": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Get a WAN circuit",
        "operationId": "getWanCircuit",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wanCircuitName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WanCircuit"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Add or replace a WAN circuit",
        "operationId": "putWanCircuit",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wanCircuitName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WanCircuit"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Update a WAN circuit",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "patchWanCircuit",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wanCircuitName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WanCircuitPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WanCircuit"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Synthetic Devices"
        ],
        "summary": "Remove a WAN circuit",
        "operationId": "deleteWanCircuit",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wanCircuitName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/cve-index": {
      "get": {
        "tags": [
          "System Administration"
        ],
        "summary": "Export the CVE index",
        "description": "The CVE index is a gzipped binary (.bin.gz) file.\n\nTo download the latest one from fwd.app:\n\n`curl -vu <user>:<pass> https://fwd.app/api/cve-index -o cve-index.bin.gz`\n\nThe response includes a `Digest` header containing the file’s SHA-256 digest.",
        "operationId": "getCveIndex",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/gzip": {
                "schema": {
                  "type": "string",
                  "format": "byte"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "System Administration"
        ],
        "summary": "Import a new CVE index",
        "description": "Replaces the CVE index in use.\n\nTo upload a CVE index gzipped binary (.bin.gz) file downloaded from fwd.app:\n\n`curl -vu <user>:<pass> https://<host>/api/cve-index?sha=<digest> -T cve-index.bin.gz`\n\nThe `sha` parameter is optional but recommended. The `<digest>` value can be found in the `Digest` response\nheader when a CVE index is downloaded from fwd.app.\n\n**Note:** This operation is for on-premises deployments only.",
        "operationId": "putCveIndex",
        "parameters": [
          {
            "name": "sha",
            "in": "query",
            "description": "Optional SHA-256 digest (consisting of 64 hex digits) to use to verify the integrity of the CVE\nindex",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "string",
                "format": "byte"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/users": {
      "get": {
        "tags": [
          "User Accounts"
        ],
        "summary": "Get all user accounts",
        "operationId": "getUsers",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Users"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "User Accounts"
        ],
        "summary": "Create a user account",
        "description": "Creates a new `LOCAL` user account.",
        "operationId": "createUser",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewUser"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/users/{userId}": {
      "get": {
        "tags": [
          "User Accounts"
        ],
        "summary": "Get a user account",
        "operationId": "getUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "User Accounts"
        ],
        "summary": "Update a user account",
        "description": "All JSON properties in the request body are optional. Include only the properties you wish to\nchange.",
        "operationId": "updateUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "User Accounts"
        ],
        "summary": "Delete a user account",
        "description": "**Warning**: This operation *cannot* be undone.",
        "operationId": "deleteUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {}
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/vulnerabilities": {
      "get": {
        "tags": [
          "Vulnerability Analysis"
        ],
        "summary": "Get full vulnerability analysis",
        "description": "Get the CVEs that may impact devices in the network.\n\nEach OsVulnerability corresponds to a distinct CVE-OS combination that could possibly impact devices in the\nnetwork. An OsVulnerability includes basic CVE information, an affected OS, the affected versions of that OS,\nand a vulnerability detection result for each possibly impacted device.\n\nThis operation’s response can get quite large for large networks. Paging is supported via the `limit` and\n`offset` parameters.",
        "operationId": "getOsVulnerabilities",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "An optional number of vulnerabilities to skip. Useful for paging. Defaults to 0.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "An optional maximum number of vulnerabilities desired. Useful for paging. Defaults to 1000.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OsVulnerabilityAnalysis"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/vulnerabilities?v=2": {
      "get": {
        "tags": [
          "Vulnerability Analysis"
        ],
        "summary": "Get vulnerabilities",
        "description": "Get the CVEs that may impact devices in the network.\n\nEach Vulnerability object includes basic CVE information, the CVE’s affected OSes and versions, and a\nsummary of vulnerability detection results for possibly impacted devices.",
        "operationId": "getVulnerabilities",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "internetAddressable",
            "in": "query",
            "description": "Whether to limit the analysis to internet-addressable devices. Defaults to false.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "location",
            "in": "query",
            "description": "The IDs of the locations to include in the analysis. Defaults to all locations.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "tag",
            "in": "query",
            "description": "Device tags used to limit the scope of the analysis. A device must have at least one of these\ntags to be included.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VulnerabilityAnalysis"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    },
    "/networks/{networkId}/vulnerabilities/{cveId}": {
      "get": {
        "tags": [
          "Vulnerability Analysis"
        ],
        "summary": "Get a vulnerability",
        "description": "Get detailed information about a vulnerability that might impact devices in the network, including basic CVE\ninformation, affected OSes and versions, and a vulnerability detection result for each possibly impacted device.",
        "operationId": "getVulnerability",
        "parameters": [
          {
            "name": "networkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cveId",
            "in": "path",
            "description": "A CVE ID from the\n[Get vulnerabilities](https://docs.fwd.app/latest/api/vulnerability-analysis/get-vulnerabilities/) response.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/SnapshotId"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VulnerabilityWithDevices"
                }
              }
            }
          },
          "409": {
            "description": "The system is currently processing this Snapshot.\n\nNote: GET /networks/{networkId}/snapshots/latestProcessed can be used to determine when processing of the\nlatest Snapshot is done or to identify an alternate Snapshot that has already been processed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security": [
          {
            "api_token": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Alias": {
        "type": "object",
        "required": [
          "createdAt",
          "creationTime",
          "creatorId",
          "name",
          "type"
        ],
        "properties": {
          "createdAt": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "creationTime": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `createdAt` instead.",
            "examples": [
              1649277285118
            ]
          },
          "creatorId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AliasType"
          }
        }
      },
      "AliasAndValue": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Alias"
          }
        ]
      },
      "AliasBuilder": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "HOSTS",
              "DEVICES",
              "INTERFACES",
              "HEADERS",
              "LOGICAL_NETWORK"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/HostsAliasBuilder"
          },
          {
            "$ref": "#/components/schemas/DevicesAliasBuilder"
          },
          {
            "$ref": "#/components/schemas/InterfacesAliasBuilder"
          },
          {
            "$ref": "#/components/schemas/TrafficAliasBuilder"
          },
          {
            "$ref": "#/components/schemas/LogicalNetworkAliasBuilder"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "HOSTS": "#/components/schemas/HostsAliasBuilder",
            "HostFilter": "#/components/schemas/HostsAliasBuilder",
            "DEVICES": "#/components/schemas/DevicesAliasBuilder",
            "DeviceFilter": "#/components/schemas/DevicesAliasBuilder",
            "INTERFACES": "#/components/schemas/InterfacesAliasBuilder",
            "InterfaceFilter": "#/components/schemas/InterfacesAliasBuilder",
            "HEADERS": "#/components/schemas/TrafficAliasBuilder",
            "PacketFilter": "#/components/schemas/TrafficAliasBuilder",
            "LOGICAL_NETWORK": "#/components/schemas/LogicalNetworkAliasBuilder"
          }
        }
      },
      "Aliases": {
        "type": "object",
        "required": [
          "aliases"
        ],
        "properties": {
          "aliases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Alias"
            }
          }
        }
      },
      "ErrorInfo": {
        "type": "object",
        "required": [
          "httpMethod",
          "apiUrl",
          "message"
        ],
        "properties": {
          "httpMethod": {
            "type": "string",
            "examples": [
              "GET"
            ],
            "enum": [
              "GET",
              "HEAD",
              "POST",
              "PUT",
              "PATCH",
              "DELETE"
            ]
          },
          "apiUrl": {
            "type": "string",
            "examples": [
              "/api/version"
            ]
          },
          "message": {
            "type": "string",
            "description": "A description of the error"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "AliasType": {
        "type": "string",
        "enum": [
          "HOSTS",
          "DEVICES",
          "INTERFACES",
          "HEADERS",
          "LOGICAL_NETWORK"
        ]
      },
      "HostsAliasBuilder": {
        "type": "object",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "locations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AliasType"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "DevicesAliasBuilder": {
        "type": "object",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AliasType"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "InterfacesAliasBuilder": {
        "type": "object",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "isExposurePoint": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AliasType"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "vlanIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "vlanIntfTypes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ACCESS",
                "TRUNK"
              ]
            }
          }
        }
      },
      "TrafficAliasBuilder": {
        "type": "object",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AliasType"
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      },
      "LogicalNetworkAliasBuilder": {
        "type": "object",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "edgeNodes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AliasType"
          }
        }
      },
      "AvailablePredefinedCheck": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "predefinedCheckType": {
            "$ref": "#/components/schemas/PredefinedCheckType"
          }
        }
      },
      "CheckPriority": {
        "type": "string",
        "enum": [
          "NOT_SET",
          "LOW",
          "MEDIUM",
          "HIGH"
        ]
      },
      "CheckStatus": {
        "type": "string",
        "enum": [
          "NONE",
          "PASS",
          "FAIL",
          "ERROR",
          "TIMEOUT",
          "PROCESSING"
        ]
      },
      "CheckType": {
        "type": "string",
        "enum": [
          "Isolation",
          "Reachability",
          "Existential",
          "QueryStringBased",
          "Predefined",
          "NQE"
        ]
      },
      "NetworkCheckResult": {
        "type": "object",
        "properties": {
          "createdAt": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "creationDateMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `createdAt` instead.",
            "examples": [
              1649277285118
            ]
          },
          "creator": {
            "type": "string",
            "description": "The username of the user who created the check, or null if unknown or if the account was\ndeleted",
            "examples": [
              "mary"
            ]
          },
          "creatorId": {
            "type": "string"
          },
          "definition": {
            "$ref": "#/components/schemas/CheckDefinition"
          },
          "definedAt": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "definitionDateMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `definedAt` instead.",
            "examples": [
              1649277285118
            ]
          },
          "description": {
            "type": "string"
          },
          "editedAt": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "editDateMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `editedAt` instead.",
            "examples": [
              1649277285118
            ]
          },
          "editor": {
            "type": "string",
            "description": "The username of the user who last edited the check, or null if unknown, if the account was deleted, or if\nthe check hasn't been edited",
            "examples": [
              "steven"
            ]
          },
          "editorId": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "executedAt": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "executionDateMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `executedAt` instead.",
            "examples": [
              1649277285118
            ]
          },
          "executionDurationMillis": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "numViolations": {
            "type": "integer",
            "format": "int64"
          },
          "perfMonitoringEnabled": {
            "type": "boolean",
            "description": "Whether performance monitoring is enabled for this check. Only supported for Existential intent checks.\nPerformance monitoring must be independently enabled for each device along the check’s path(s)."
          },
          "priority": {
            "$ref": "#/components/schemas/CheckPriority"
          },
          "status": {
            "$ref": "#/components/schemas/CheckStatus"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "NetworkCheckResultWithDiagnosis": {
        "allOf": [
          {
            "$ref": "#/components/schemas/NetworkCheckResult"
          },
          {
            "type": "object",
            "properties": {
              "diagnosis": {
                "$ref": "#/components/schemas/CheckDiagnosis"
              }
            }
          }
        ]
      },
      "NewNetworkCheck": {
        "type": "object",
        "required": [
          "definition"
        ],
        "properties": {
          "definition": {
            "$ref": "#/components/schemas/CheckDefinition"
          },
          "enabled": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "perfMonitoringEnabled": {
            "type": "boolean",
            "description": "Whether performance monitoring is enabled for this check. Only supported for Existential intent checks.\nPerformance monitoring must be independently enabled for each device along the check’s path(s)."
          },
          "priority": {
            "$ref": "#/components/schemas/CheckPriority"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PredefinedCheckType": {
        "type": "string",
        "enum": [
          "BGP_NEIGHBOR_ADJACENCY",
          "BGP_ROUTER_ID",
          "BGP_ROUTE_CONSISTENCY",
          "BGP_VPC_PARAMETER_CONSISTENCY",
          "EBGP_SELECTION_OVER_IBGP",
          "BGP_COMMUNITY_LIST",
          "NEXT_HOP_REACHABILITY",
          "NO_LOOP",
          "SHORTEST_PATH",
          "IP_UNIQUENESS",
          "HOSTNAME_CONSISTENCY",
          "HOSTNAME_UNIQUENESS",
          "VLAN_CONSISTENCY",
          "MTU_CONSISTENCY",
          "PORT_CHANNEL_CONSISTENCY",
          "DUPLEX_CONSISTENCY",
          "LINK_SPEED_CONSISTENCY",
          "SOFTWARE_VERSION_CONSISTENCY",
          "TRUNK_INTERFACE_WHITELIST",
          "VLAN_EXISTENCE",
          "LEARNED_MAC_CONSISTENCY",
          "FHRP_PEERING",
          "VPC_PARAMETER_CONSISTENCY",
          "VPC_INTERFACE_PARAMETER_CONSISTENCY",
          "VPC_DEDICATED_KEEPALIVE_LINK",
          "VPC_ROLE_PRIORITY",
          "SSH_RSA_KEY_LENGTH",
          "VPC_STP_PRIORITY",
          "VPC_MST_REGION_CONSISTENCY"
        ]
      },
      "ExistsCheck": {
        "type": "object",
        "required": [
          "checkType",
          "filters"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "const": "Existential"
          },
          "filters": {
            "$ref": "#/components/schemas/PathQuery"
          },
          "headerFieldsWithDefaults": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ip_tos",
                "tp_src",
                "app_id",
                "url",
                "user_id"
              ]
            },
            "description": "The header fields for which a default value is assumed if no valid is specified in the `from` clause.\nDefaults to `[\"url\"]`."
          },
          "noiseTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoiseType"
            },
            "description": "The noise types that should be included in the search results. Defaults to `[]`."
          },
          "returnPath": {
            "type": "string",
            "enum": [
              "ANY",
              "SYMMETRIC"
            ]
          }
        }
      },
      "IsolationCheck": {
        "type": "object",
        "required": [
          "checkType",
          "filters"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "const": "Isolation"
          },
          "filters": {
            "$ref": "#/components/schemas/PathQuery"
          },
          "headerFieldsWithDefaults": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ip_tos",
                "tp_src",
                "app_id",
                "url",
                "user_id"
              ]
            },
            "description": "The header fields for which a default value is assumed if no valid is specified in the `from` clause.\nDefaults to `[\"url\"]`."
          },
          "noiseTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoiseType"
            },
            "description": "The noise types that should be included in the search results. Defaults to `[]`."
          }
        }
      },
      "ReachabilityCheck": {
        "type": "object",
        "required": [
          "checkType",
          "filters"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "const": "Reachability"
          },
          "filters": {
            "$ref": "#/components/schemas/PathQuery"
          },
          "headerFieldsWithDefaults": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ip_tos",
                "tp_src",
                "app_id",
                "url",
                "user_id"
              ]
            },
            "description": "The header fields for which a default value is assumed if no valid is specified in the `from` clause.\nDefaults to `[\"url\"]`."
          },
          "noiseTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoiseType"
            },
            "description": "The noise types that should be included in the search results. Defaults to `[]`."
          }
        }
      },
      "QueryStringCheck": {
        "type": "object",
        "required": [
          "checkType"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "const": "QueryStringBased"
          },
          "forRequest": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      },
      "PredefinedCheck": {
        "type": "object",
        "required": [
          "checkType"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "const": "Predefined"
          },
          "params": {
            "type": "object"
          },
          "predefinedCheckType": {
            "$ref": "#/components/schemas/PredefinedCheckType"
          }
        }
      },
      "NqeCheck": {
        "type": "object",
        "required": [
          "checkType",
          "queryId"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "const": "NQE"
          },
          "queryId": {
            "type": "string",
            "examples": [
              "FQ_6ac3682c92a74b778d98584aea8afa5fe40f2150"
            ]
          },
          "params": {
            "type": "object",
            "description": "Values for each parameter declared in the query. The parameter values are specified as a JSON object, with\none property per parameter, where the property name matches the parameter name. The property value is the\nJSON representation of the parameter value. The JSON representation of a parameter value depends on the type\nof the value. For values of type `String`, `IpAddress`, `IpSubnet`, and `MacAddress`, the JSON\nrepresentation is a JSON string. For values of type `Number`, the value is an integral JSON number. For\nvalues of type `Boolean`, the JSON representation is true or false. For values of type `List<T>`, the JSON\nrepresentation is an array of JSON values, each of which is a JSON representation for type `T`. For record\nvalues, the JSON representation is a JSON object with corresponding properties whose values are JSON\nrepresentations corresponding to the properties' types. For enumerations, the JSON representation is a JSON\nstring with the enum constant name. For `oneOf` values that contain data, the JSON representation is a JSON\nobject with two properties, `alternative` and `value`, where the `alternative` property contains the\nalternative's name (a string) and the `value` property is a JSON representation of the data associated with\nthis alternative.",
            "examples": [
              {
                "mtuThreshold": 123,
                "ntpServers": [
                  "10.22.2.3",
                  "192.33.4.1"
                ]
              }
            ]
          }
        }
      },
      "DeviceFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "DeviceFilter"
          },
          "value": {
            "type": "string",
            "examples": [
              "nyc-dc01-fw01"
            ]
          }
        },
        "description": "A filter that matches one device by name or all devices (using value \"*\")"
      },
      "DeviceAliasFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "DeviceAliasFilter"
          },
          "value": {
            "type": "string",
            "description": "A Device Group name"
          }
        },
        "description": "A filter that matches any device in a Device Group"
      },
      "BypassFilter": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DeviceFilter",
              "DeviceAliasFilter"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/DeviceFilter"
          },
          {
            "$ref": "#/components/schemas/DeviceAliasFilter"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "DeviceFilter": "#/components/schemas/DeviceFilter",
            "DeviceAliasFilter": "#/components/schemas/DeviceAliasFilter"
          }
        }
      },
      "PacketFilter": {
        "type": "object",
        "required": [
          "type",
          "values"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "PacketFilter"
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "examples": [
              {
                "ipv4_dst": [
                  "10.10.10.0/24"
                ]
              }
            ]
          }
        },
        "description": "A filter that matches a specific packet header value or range of values"
      },
      "PacketAliasFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "direction": {
            "type": "string",
            "enum": [
              "src",
              "dst"
            ]
          },
          "type": {
            "type": "string",
            "const": "PacketAliasFilter"
          },
          "value": {
            "type": "string",
            "description": "A Packet Header Set name"
          }
        },
        "description": "A filter that matches any combination of packet header values that satisfy the criteria in a\nHeader Set"
      },
      "NotFilter": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "clause": {
            "type": "object",
            "description": "A filter that would be permitted in the place of this NotFilter. Cannot be another NotFilter."
          },
          "type": {
            "type": "string",
            "const": "NotFilter"
          }
        },
        "description": "A filter that inverts the filter in its `clause`"
      },
      "PacketHeaderFilter": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "PacketFilter",
              "PacketAliasFilter",
              "NotFilter"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/PacketFilter"
          },
          {
            "$ref": "#/components/schemas/PacketAliasFilter"
          },
          {
            "$ref": "#/components/schemas/NotFilter"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "PacketFilter": "#/components/schemas/PacketFilter",
            "PacketAliasFilter": "#/components/schemas/PacketAliasFilter",
            "NotFilter": "#/components/schemas/NotFilter"
          }
        }
      },
      "InterfaceFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "InterfaceFilter"
          },
          "value": {
            "type": "string",
            "examples": [
              "nyc-dc01-fw01 eth1"
            ]
          }
        },
        "description": "A filter that matches one device interface by name"
      },
      "TunnelInterfaceFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "TunnelInterfaceFilter"
          },
          "value": {
            "type": "string",
            "examples": [
              "nyc-dc01-rtr-01 ge3"
            ]
          }
        },
        "description": "A filter that matches one tunnel interface by name and has underlay semantics in the `from` or `to` property\nof a `PathQuery`"
      },
      "SecurityZoneFilter": {
        "type": "object",
        "required": [
          "device",
          "type",
          "value"
        ],
        "properties": {
          "device": {
            "type": "string",
            "examples": [
              "nyc-dc01-rtr-01"
            ]
          },
          "type": {
            "type": "string",
            "const": "SecurityZoneFilter"
          },
          "value": {
            "type": "string",
            "examples": [
              "corp-trusted"
            ]
          }
        },
        "description": "A filter that matches one security zone on a firewall by name and can be used in the `from` or `to` property\nof a `PathQuery`"
      },
      "DeviceVrfFilter": {
        "type": "object",
        "required": [
          "type",
          "device",
          "vrf"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "DeviceVrfFilter"
          },
          "device": {
            "type": "string",
            "examples": [
              "nyc-dc01-rtr-01"
            ]
          },
          "vrf": {
            "type": "string",
            "examples": [
              "MY VRF"
            ]
          }
        },
        "description": "A filter that matches a device’s interfaces by VRF name"
      },
      "InterfaceAliasFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "InterfaceAliasFilter"
          },
          "value": {
            "type": "string",
            "description": "An Interface Group name"
          }
        },
        "description": "A filter that matches any device interface in an Interface Group"
      },
      "VrfFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "VrfFilter"
          },
          "value": {
            "type": "string",
            "description": "A VRF name. Use `DeviceVrfFilter` instead for a (device, VRF) pair.",
            "examples": [
              "MY VRF"
            ]
          }
        },
        "description": "A filter that matches device interfaces by VRF name"
      },
      "HopLocationFilter": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DeviceFilter",
              "InterfaceFilter",
              "TunnelInterfaceFilter",
              "SecurityZoneFilter",
              "DeviceVrfFilter",
              "DeviceAliasFilter",
              "InterfaceAliasFilter",
              "VrfFilter",
              "NotFilter"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/DeviceFilter"
          },
          {
            "$ref": "#/components/schemas/InterfaceFilter"
          },
          {
            "$ref": "#/components/schemas/TunnelInterfaceFilter"
          },
          {
            "$ref": "#/components/schemas/SecurityZoneFilter"
          },
          {
            "$ref": "#/components/schemas/DeviceVrfFilter"
          },
          {
            "$ref": "#/components/schemas/DeviceAliasFilter"
          },
          {
            "$ref": "#/components/schemas/InterfaceAliasFilter"
          },
          {
            "$ref": "#/components/schemas/VrfFilter"
          },
          {
            "$ref": "#/components/schemas/NotFilter"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "DeviceFilter": "#/components/schemas/DeviceFilter",
            "InterfaceFilter": "#/components/schemas/InterfaceFilter",
            "TunnelInterfaceFilter": "#/components/schemas/TunnelInterfaceFilter",
            "SecurityZoneFilter": "#/components/schemas/SecurityZoneFilter",
            "DeviceVrfFilter": "#/components/schemas/DeviceVrfFilter",
            "DeviceAliasFilter": "#/components/schemas/DeviceAliasFilter",
            "InterfaceAliasFilter": "#/components/schemas/InterfaceAliasFilter",
            "VrfFilter": "#/components/schemas/VrfFilter",
            "NotFilter": "#/components/schemas/NotFilter"
          }
        }
      },
      "HopFilter": {
        "type": "object",
        "required": [
          "location",
          "transitType"
        ],
        "properties": {
          "headers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PacketHeaderFilter"
            }
          },
          "location": {
            "$ref": "#/components/schemas/HopLocationFilter"
          },
          "transitType": {
            "type": "string",
            "enum": [
              "through",
              "ingress",
              "egress"
            ]
          }
        }
      },
      "HostFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "HostFilter"
          },
          "value": {
            "type": "string",
            "examples": [
              "10.10.10.10"
            ]
          }
        },
        "description": "A filter that matches hosts by hostname, IP subnet address, or MAC address"
      },
      "HostAliasFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "HostAliasFilter"
          },
          "value": {
            "type": "string",
            "description": "A Host Group name"
          }
        },
        "description": "A filter that matches any host in a Host Group"
      },
      "SubnetLocationFilter": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "SubnetLocationFilter"
          },
          "value": {
            "type": "string",
            "examples": [
              "10.10.10.64/30"
            ]
          },
          "host": {
            "type": "string",
            "description": "The hostname that resolves to the IP in `value` (metadata only; not used directly)",
            "examples": [
              "testing.example.com"
            ]
          },
          "device": {
            "type": "string",
            "description": "The device at which the subnet is located",
            "examples": [
              "nyc-dc01-rtr01"
            ]
          }
        },
        "description": "A filter that matches a specific IP address or IP subnet address at a specific location in the network. If\nthe IP address is a multicast group address, this filter matches on the locations of the corresponding\nmulticast Rendezvous Points (RPs) in the network."
      },
      "LocationFilter": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "HostFilter",
              "DeviceFilter",
              "InterfaceFilter",
              "TunnelInterfaceFilter",
              "SecurityZoneFilter",
              "DeviceVrfFilter",
              "HostAliasFilter",
              "DeviceAliasFilter",
              "InterfaceAliasFilter",
              "SubnetLocationFilter",
              "VrfFilter",
              "NotFilter"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/HostFilter"
          },
          {
            "$ref": "#/components/schemas/DeviceFilter"
          },
          {
            "$ref": "#/components/schemas/InterfaceFilter"
          },
          {
            "$ref": "#/components/schemas/TunnelInterfaceFilter"
          },
          {
            "$ref": "#/components/schemas/SecurityZoneFilter"
          },
          {
            "$ref": "#/components/schemas/DeviceVrfFilter"
          },
          {
            "$ref": "#/components/schemas/HostAliasFilter"
          },
          {
            "$ref": "#/components/schemas/DeviceAliasFilter"
          },
          {
            "$ref": "#/components/schemas/InterfaceAliasFilter"
          },
          {
            "$ref": "#/components/schemas/SubnetLocationFilter"
          },
          {
            "$ref": "#/components/schemas/VrfFilter"
          },
          {
            "$ref": "#/components/schemas/NotFilter"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "HostFilter": "#/components/schemas/HostFilter",
            "DeviceFilter": "#/components/schemas/DeviceFilter",
            "InterfaceFilter": "#/components/schemas/InterfaceFilter",
            "TunnelInterfaceFilter": "#/components/schemas/TunnelInterfaceFilter",
            "SecurityZoneFilter": "#/components/schemas/SecurityZoneFilter",
            "DeviceVrfFilter": "#/components/schemas/DeviceVrfFilter",
            "HostAliasFilter": "#/components/schemas/HostAliasFilter",
            "DeviceAliasFilter": "#/components/schemas/DeviceAliasFilter",
            "InterfaceAliasFilter": "#/components/schemas/InterfaceAliasFilter",
            "SubnetLocationFilter": "#/components/schemas/SubnetLocationFilter",
            "VrfFilter": "#/components/schemas/VrfFilter",
            "NotFilter": "#/components/schemas/NotFilter"
          }
        }
      },
      "EndpointFilter": {
        "type": "object",
        "required": [
          "location"
        ],
        "properties": {
          "headers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PacketHeaderFilter"
            }
          },
          "location": {
            "$ref": "#/components/schemas/LocationFilter"
          },
          "logicalNetwork": {
            "type": "string"
          }
        }
      },
      "PathQuery": {
        "type": "object",
        "properties": {
          "bypass": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BypassFilter"
            }
          },
          "chain": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HopFilter"
            }
          },
          "flowTypes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "VALID",
                "LOOP",
                "POTENTIAL_LOOP",
                "BLACKHOLE",
                "DROPPED",
                "INADMISSIBLE",
                "UNREACHABLE",
                "IGNORED",
                "UNDELIVERED"
              ]
            }
          },
          "forwardingTypes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "L2",
                "L3",
                "DIRECT_L2",
                "FABRIC_PATH",
                "VXLAN",
                "MCAST_IP",
                "DIRECT_IP",
                "MPLS",
                "L2_PBR",
                "L3_PBR"
              ]
            }
          },
          "from": {
            "$ref": "#/components/schemas/EndpointFilter"
          },
          "mode": {
            "type": "string",
            "const": "PERMIT_ALL"
          },
          "to": {
            "$ref": "#/components/schemas/EndpointFilter"
          }
        }
      },
      "NoiseType": {
        "type": "string",
        "enum": [
          "WRONG_GATEWAY",
          "INADMISSIBLE",
          "NETWORK_OR_BROADCAST_ADDRESS",
          "TO_L2_INTERFACE_MAC",
          "GLEAN"
        ]
      },
      "CheckDefinition": {
        "type": "object",
        "required": [
          "checkType"
        ],
        "properties": {
          "checkType": {
            "type": "string",
            "enum": [
              "Existential",
              "Isolation",
              "Reachability",
              "QueryStringBased",
              "Predefined",
              "NQE"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ExistsCheck"
          },
          {
            "$ref": "#/components/schemas/IsolationCheck"
          },
          {
            "$ref": "#/components/schemas/ReachabilityCheck"
          },
          {
            "$ref": "#/components/schemas/QueryStringCheck"
          },
          {
            "$ref": "#/components/schemas/PredefinedCheck"
          },
          {
            "$ref": "#/components/schemas/NqeCheck"
          }
        ],
        "discriminator": {
          "propertyName": "checkType",
          "mapping": {
            "Existential": "#/components/schemas/ExistsCheck",
            "Isolation": "#/components/schemas/IsolationCheck",
            "Reachability": "#/components/schemas/ReachabilityCheck",
            "QueryStringBased": "#/components/schemas/QueryStringCheck",
            "Predefined": "#/components/schemas/PredefinedCheck",
            "NQE": "#/components/schemas/NqeCheck"
          }
        }
      },
      "LineRange": {
        "type": "object",
        "properties": {
          "start": {
            "type": "integer",
            "format": "int32",
            "description": "The 0-based index of the first line in the range.",
            "examples": [
              23
            ]
          },
          "end": {
            "type": "integer",
            "format": "int32",
            "description": "The 0-based index of the last line in the range (inclusive).",
            "examples": [
              27
            ]
          }
        }
      },
      "DiagnosisReference": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "A name or identifier associated with the reference, like a device or interface name.",
            "examples": [
              "rtr-01 eth0"
            ]
          },
          "value": {
            "type": "string",
            "description": "The value associated with `key` that’s relevant to this violation, such as a link speed, MTU size, VLAN\nrange, or IP address.",
            "examples": [
              "10.110.4.14"
            ]
          },
          "files": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LineRange"
              }
            },
            "description": "Relevant line ranges in files collected from the device.",
            "examples": [
              {
                "rtr-01,configuration,16.txt": [
                  {
                    "start": 6,
                    "end": 6
                  },
                  {
                    "start": 22,
                    "end": 29
                  }
                ]
              }
            ]
          }
        }
      },
      "DiagnosisDetail": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "references": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiagnosisReference"
            }
          }
        }
      },
      "CheckDiagnosis": {
        "type": "object",
        "properties": {
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiagnosisDetail"
            }
          },
          "detailsIncomplete": {
            "type": "boolean"
          },
          "summary": {
            "type": "string"
          }
        }
      },
      "ClassicDevice": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "name",
              "host"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
                "examples": [
                  "my-router"
                ]
              },
              "type": {
                "$ref": "#/components/schemas/ClassicDeviceType",
                "description": "Auto-detected during connectivity testing if unspecified.",
                "examples": [
                  "checkpoint_ssh"
                ]
              },
              "host": {
                "type": "string",
                "description": "IP address or hostname used to connect to the device.",
                "examples": [
                  "10.121.7.13"
                ]
              },
              "port": {
                "type": "integer",
                "format": "int32",
                "minimum": 1,
                "maximum": 65535,
                "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
                "examples": [
                  22
                ]
              },
              "cliCredentialId": {
                "type": "string",
                "description": "The `id` of a CliCredential of type `LOGIN`. Relevant for devices collected via SSH or Telnet. Credential\nauto-association will be attempted using credentials configured to allow it if this property is unspecified\nand collecting from this device requires this kind of credential.",
                "examples": [
                  "L-3"
                ]
              },
              "cliCredential2Id": {
                "type": "string",
                "description": "The `id` of a CliCredential of type `PRIVILEGED_MODE` (for Cisco-like or Checkpoint devices) or `SHELL` (for\nAvi controllers). On Checkpoint, this credential is used for TACACS privilege escalation. Credential\nauto-association will be attempted using credentials configured to allow it if this property is unspecified\nand collecting from this device requires this kind of credential.",
                "examples": [
                  "PM-2"
                ]
              },
              "cliCredential3Id": {
                "type": "string",
                "description": "The `id` of a CliCredential of type `EXPERT_MODE` (for Checkpoint devices). Can be set with or without a\n`PRIVILEGED_MODE` credential for `cliCredential2Id`. Credential auto-association will be attempted using\ncredentials configured to allow it if this property is unspecified and collecting from this device requires\nthis kind of credential.",
                "examples": [
                  "EM-6"
                ]
              },
              "httpCredentialId": {
                "type": "string",
                "description": "The `id` of an HttpCredential of type `LOGIN` or `API_KEY`. Relevant for devices collected via HTTPS or\nHTTP. Credential auto-association will be attempted using credentials configured to allow it if this\nproperty is unspecified and collecting from this device requires this kind of credential.",
                "examples": [
                  "H-5"
                ]
              },
              "snmpCredentialId": {
                "type": "string",
                "description": "The `id` of an SnmpCredential. Used to collect performance data (counters) if `enableSnmpCollection` is\ntrue. Credential auto-association will be attempted using credentials configured to allow it if this\nproperty is unspecified and collecting from this device requires this kind of credential.",
                "examples": [
                  "S-4"
                ]
              },
              "jumpServerId": {
                "type": "string",
                "description": "The `id` of the JumpServer that should be used to collect from this device.",
                "examples": [
                  "J-0"
                ]
              },
              "disableIpv6Collection": {
                "type": "boolean",
                "description": "Disables collection of any IPv6 forwarding state on the device. Defaults to false.",
                "examples": [
                  false
                ]
              },
              "fullCollectionLog": {
                "type": "boolean",
                "description": "Enables more detailed logging during collection. Defaults to false.",
                "examples": [
                  false
                ]
              },
              "paginationMode": {
                "$ref": "#/components/schemas/PaginationMode",
                "description": "The pagination mode to use during collection. Relevant for devices collected via SSH or Telnet. Defaults to\n`DISABLE_PAGINATION`. Per-command pagination (such as appending `| more`) may be used if set to\n`ENABLE_PAGINATION` for a device that doesn’t have a per-session pagination mode setting.",
                "examples": [
                  "KEEP_UNCHANGED"
                ]
              },
              "terminalWidth": {
                "type": "integer",
                "format": "int32",
                "minimum": 80,
                "maximum": 500,
                "description": "Width of pseudo-terminal in characters. A high value can prevent long lines from wrapping. Defaults to 500.\nRelevant for devices collected via SSH or Telnet.",
                "examples": [
                  500
                ]
              },
              "largeRtt": {
                "type": "boolean",
                "description": "Whether the device has a large round-trip time (requires a longer response timeout).",
                "examples": [
                  false
                ]
              },
              "minBytesReadPerSec": {
                "type": "integer",
                "format": "int64",
                "description": "The minimum read rate in bytes/sec required to prevent collection from failing with a\n`SLOW_READ_RATE_DETECTED` error. Defaults to 500.",
                "examples": [
                  false
                ]
              },
              "maxConnectionsPerMin": {
                "type": "integer",
                "format": "int32",
                "description": "The maximum number of connections to this device that should be attempted per minute. Setting this property\ncan prevent spurious connectivity test failures if the device’s SSH server is configured with a connection\nrate limit.",
                "examples": [
                  10
                ]
              },
              "useFileTransferForLargeOutput": {
                "type": "boolean",
                "description": "Whether to use file transfer instead of printing large command output directly to the shell. This is\ncurrently only supported for Juniper devices when executing routing table commands. The primary purpose is\nto avoid printing large outputs directly to the shell, which on Juniper devices can interfere with packet\nforwarding performance. Instead, the command output is written to a temporary file on the device and then\ntransferred over a separate connection. After the transfer is complete, the temporary file is deleted to\nprevent unnecessary disk usage on the device.",
                "examples": [
                  false
                ]
              },
              "bmpStationHost": {
                "type": "string",
                "description": "IP address or hostname of the BMP station from which BMP collection should be peformed for this device. If\nset, a jump server won’t be used for BMP collection.",
                "examples": [
                  "10.121.7.33"
                ]
              },
              "bgpAndBmpFailureHandling": {
                "type": "string",
                "description": "How to handle BGP or BMP collection failure. Defaults to `FAIL_DEVICE`.",
                "examples": [
                  "SWITCH_TO_CLI"
                ],
                "enum": [
                  "FAIL_DEVICE",
                  "SWITCH_TO_CLI",
                  "ALWAYS_USE_CLI",
                  "ALWAYS_USE_BMP",
                  "CONTINUE_WITHOUT_BGP_DATA"
                ]
              },
              "collectBgpAdvertisements": {
                "type": "boolean",
                "description": "Whether BGP advertisements should be collected. Defaults to `false` unless advertisement collection is\nrequired to model a [synthetic device](https://docs.fwd.app/latest/api/synthetic-devices/) connected to this\ndevice.",
                "examples": [
                  false
                ]
              },
              "bgpTableType": {
                "type": "string",
                "description": "The BGP route types to collect. Honored only if `collectedBgpAdvertisements` is true. Defaults\nto `BOTH`.",
                "examples": [
                  "BOTH"
                ],
                "enum": [
                  "BOTH",
                  "ADJ_RIB_IN",
                  "ADJ_RIB_OUT"
                ]
              },
              "bgpPeerType": {
                "type": "string",
                "description": "The BGP peer types from which to collect routes. Honored only if `collectedBgpAdvertisements` is true.\nDefaults to `BOTH`.",
                "examples": [
                  "BOTH"
                ],
                "enum": [
                  "BOTH",
                  "EBGP",
                  "IBGP"
                ]
              },
              "bgpSubnetsToCollect": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Restricts collection of BGP advertisements to specific subnets if the device supports it. Honored only if\n`collectBgpAdvertisements` is `true`.",
                "examples": [
                  [
                    "123.223.47.0/24"
                  ]
                ]
              },
              "prompt": {
                "type": "string",
                "description": "A case-insensitive glob pattern used to identify an interactive prompt. When this pattern matches the end of\nthe prompt, ignoring any trailing whitespace, the Collector will enter the configured `promptResponse`.\nRelevant for devices collected via SSH or Telnet.",
                "examples": [
                  "y/n"
                ]
              },
              "promptResponse": {
                "type": "string",
                "description": "What the Collector should enter in response to a device prompt matching `prompt` in order to proceed.\nRelevant for devices collected via SSH or Telnet. Required if `prompt` is set.",
                "examples": [
                  "y"
                ]
              },
              "collect": {
                "type": "boolean",
                "description": "Whether to collect from the device. Defaults to true.",
                "examples": [
                  false
                ]
              },
              "note": {
                "type": "string",
                "description": "An optional description or note about the device."
              },
              "enableSnmpCollection": {
                "type": "boolean",
                "description": "Whether to collect performance data (counters) via SNMP. Defaults to false.",
                "examples": [
                  false
                ]
              },
              "highCpuUsage": {
                "type": "number",
                "format": "float",
                "minimum": 0.75,
                "maximum": 1,
                "description": "Threshold at or above which CPU usage is considered high. Defaults to 0.8 (80.0%).",
                "examples": [
                  0.85
                ]
              },
              "highMemoryUsage": {
                "type": "number",
                "format": "float",
                "minimum": 0.75,
                "maximum": 1,
                "description": "Threshold at or above which memory usage is considered high. Defaults to 0.9 (90.0%).",
                "examples": [
                  0.92
                ]
              },
              "highInputUtilization": {
                "type": "number",
                "format": "float",
                "minimum": 0.75,
                "maximum": 1,
                "description": "Threshold at or above which input interface utilization is considered high. Defaults to 0.9\n(90.0%).",
                "examples": [
                  0.8
                ]
              },
              "highOutputUtilization": {
                "type": "number",
                "format": "float",
                "minimum": 0.75,
                "maximum": 1,
                "description": "Threshold at or above which output interface utilization is considered high. Defaults to 0.9\n(90.0%).",
                "examples": [
                  0.88
                ]
              },
              "mediumCpuUsage": {
                "type": "number",
                "format": "float",
                "minimum": 0.5,
                "maximum": 1,
                "description": "Threshold at or above which CPU usage is considered medium high. Has no default value.",
                "examples": [
                  0.7
                ]
              },
              "mediumMemoryUsage": {
                "type": "number",
                "format": "float",
                "minimum": 0.5,
                "maximum": 1,
                "description": "Threshold at or above which memory usage is considered medium high. Has no default value.",
                "examples": [
                  0.71
                ]
              },
              "mediumInputUtilization": {
                "type": "number",
                "format": "float",
                "minimum": 0.5,
                "maximum": 1,
                "description": "Threshold at or above which input interface utilization is considered medium high. Has no\ndefault value.",
                "examples": [
                  0.72
                ]
              },
              "mediumOutputUtilization": {
                "type": "number",
                "format": "float",
                "minimum": 0.5,
                "maximum": 1,
                "description": "Threshold at or above which output interface utilization is considered medium high. Has no\ndefault value.",
                "examples": [
                  0.73
                ]
              },
              "cloudLocationId": {
                "type": "string",
                "description": "ID of the cloud location at which this device was discovered. Present for cloud-based virtualized devices\nonly.",
                "examples": [
                  "AWS.us-east-1"
                ]
              },
              "cloudSetupId": {
                "type": "string",
                "description": "Name of the cloud setup associated with this device’s discovery. Present for cloud-based virtualized devices\nonly.",
                "examples": [
                  "my-aws-setup"
                ]
              },
              "cloudDiscoverySource": {
                "type": "string",
                "description": "Account name (AWS), Project ID (GCP), or Subscription ID (Azure) associated with this device’s discovery.\nPresent for cloud-based virtualized devices only.",
                "examples": [
                  "main"
                ]
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Tags assigned to the device. Present only if specifically requested."
              },
              "locationId": {
                "type": "string",
                "description": "The `id` of the device’s assigned Location (see\n[Network Locations](https://docs.fwd.app/latest/api/network-locations/)). Present only if specifically\nrequested. Defaults to \"default\" (the Unassigned location).",
                "examples": [
                  "atl"
                ]
              },
              "testResult": {
                "$ref": "#/components/schemas/SourceConnectivityResult",
                "description": "The device’s most recent connectivity test result. Present only if specifically requested. Absent if the\ndevice’s connectivity hasn’t been tested since the last substantial edit to the device."
              }
            }
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "ClassicDevicePatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              "my-router"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/ClassicDeviceType",
            "description": "Auto-detected during connectivity testing if unspecified. Use `null` to clear. Omit to leave the property\nalone.",
            "examples": [
              "checkpoint_ssh"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device. Use `null` to clear. Omit to leave the\nproperty alone.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              22
            ]
          },
          "cliCredentialId": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `LOGIN`. Relevant for devices collected via SSH or Telnet. Credential\nauto-association will be attempted using credentials configured to allow it if this property is unspecified\nand collecting from this device requires this kind of credential. Use `null` to clear. Omit to leave the\nproperty alone.",
            "examples": [
              "L-3"
            ]
          },
          "cliCredential2Id": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `PRIVILEGED_MODE` (for Cisco-like or Checkpoint devices) or `SHELL` (for\nAvi controllers). On Checkpoint, this credential is used for TACACS privilege escalation. Credential\nauto-association will be attempted using credentials configured to allow it if this property is unspecified\nand collecting from this device requires this kind of credential. Use `null` to clear. Omit to leave the\nproperty alone.",
            "examples": [
              "PM-2"
            ]
          },
          "cliCredential3Id": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `EXPERT_MODE` (for Checkpoint devices). Can be set with or without a\n`PRIVILEGED_MODE` credential for `cliCredential2Id`. Credential auto-association will be attempted using\ncredentials configured to allow it if this property is unspecified and collecting from this device requires\nthis kind of credential. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              "EM-6"
            ]
          },
          "httpCredentialId": {
            "type": "string",
            "description": "The `id` of an HttpCredential of type `LOGIN` or `API_KEY`. Relevant for devices collected via HTTPS or\nHTTP. Credential auto-association will be attempted using credentials configured to allow it if this\nproperty is unspecified and collecting from this device requires this kind of credential. Use `null` to\nclear. Omit to leave the property alone.",
            "examples": [
              "H-5"
            ]
          },
          "snmpCredentialId": {
            "type": "string",
            "description": "The `id` of an SnmpCredential. Used to collect performance data (counters) if `enableSnmpCollection` is\ntrue. Credential auto-association will be attempted using credentials configured to allow it if this\nproperty is unspecified and collecting from this device requires this kind of credential. Use `null` to\nclear. Omit to leave the property alone.",
            "examples": [
              "S-4"
            ]
          },
          "jumpServerId": {
            "type": "string",
            "description": "The `id` of the JumpServer that should be used to collect from this device. Use `null` to clear. Omit to\nleave the property alone.",
            "examples": [
              "J-0"
            ]
          },
          "disableIpv6Collection": {
            "type": "boolean",
            "description": "Disables collection of any IPv6 forwarding state on the device. Defaults to false. Use `null` to clear. Omit\nto leave the property alone.",
            "examples": [
              false
            ]
          },
          "fullCollectionLog": {
            "type": "boolean",
            "description": "Enables more detailed logging during collection. Defaults to false. Use `null` to clear. Omit to leave the\nproperty alone.",
            "examples": [
              false
            ]
          },
          "paginationMode": {
            "$ref": "#/components/schemas/PaginationMode",
            "description": "The pagination mode to use during collection. Relevant for devices collected via SSH or Telnet. Defaults to\n`DISABLE_PAGINATION`. Per-command pagination (such as appending `| more`) may be used if set to\n`ENABLE_PAGINATION` for a device that doesn’t have a per-session pagination mode setting. Use `null` to\nclear. Omit to leave the property alone.",
            "examples": [
              "KEEP_UNCHANGED"
            ]
          },
          "terminalWidth": {
            "type": "integer",
            "format": "int32",
            "minimum": 80,
            "maximum": 500,
            "description": "Width of pseudo-terminal in characters. A high value can prevent long lines from wrapping. Defaults to 500.\nRelevant for devices collected via SSH or Telnet. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              500
            ]
          },
          "largeRtt": {
            "type": "boolean",
            "description": "Whether the device has a large round-trip time (requires a longer response timeout). Use `null` to clear.\nOmit to leave the property alone.",
            "examples": [
              false
            ]
          },
          "minBytesReadPerSec": {
            "type": "integer",
            "format": "int64",
            "description": "The minimum read rate in bytes/sec required to prevent collection from failing with a\n`SLOW_READ_RATE_DETECTED` error. Defaults to 500. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              false
            ]
          },
          "maxConnectionsPerMin": {
            "type": "integer",
            "format": "int32",
            "description": "The maximum number of connections to this device that should be attempted per minute. Setting this property\ncan prevent spurious connectivity test failures if the device’s SSH server is configured with a connection\nrate limit. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              10
            ]
          },
          "useFileTransferForLargeOutput": {
            "type": "boolean",
            "description": "Whether to use file transfer instead of printing large command output directly to the shell. This is\ncurrently only supported for Juniper devices when executing routing table commands. The primary purpose is\nto avoid printing large outputs directly to the shell, which on Juniper devices can interfere with packet\nforwarding performance. Instead, the command output is written to a temporary file on the device and then\ntransferred over a separate connection. After the transfer is complete, the temporary file is deleted to\nprevent unnecessary disk usage on the device. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              false
            ]
          },
          "bmpStationHost": {
            "type": "string",
            "description": "IP address or hostname of the BMP station from which BMP collection should be peformed for this device. If\nset, a jump server won’t be used for BMP collection. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              "10.121.7.33"
            ]
          },
          "bgpAndBmpFailureHandling": {
            "type": "string",
            "description": "How to handle BGP or BMP collection failure. Defaults to `FAIL_DEVICE`. Use `null` to clear. Omit to leave\nthe property alone.",
            "examples": [
              "SWITCH_TO_CLI"
            ],
            "enum": [
              "FAIL_DEVICE",
              "SWITCH_TO_CLI",
              "ALWAYS_USE_CLI",
              "ALWAYS_USE_BMP",
              "CONTINUE_WITHOUT_BGP_DATA"
            ]
          },
          "collectBgpAdvertisements": {
            "type": "boolean",
            "description": "Whether BGP advertisements should be collected. Defaults to `false` unless advertisement collection is\nrequired to model a [synthetic device](https://docs.fwd.app/latest/api/synthetic-devices/) connected to this\ndevice. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              false
            ]
          },
          "bgpTableType": {
            "type": "string",
            "description": "The BGP route types to collect. Honored only if `collectedBgpAdvertisements` is true. Defaults to `BOTH`.\nUse `null` to clear. Omit to leave the property alone.",
            "examples": [
              "BOTH"
            ],
            "enum": [
              "BOTH",
              "ADJ_RIB_IN",
              "ADJ_RIB_OUT"
            ]
          },
          "bgpPeerType": {
            "type": "string",
            "description": "The BGP peer types from which to collect routes. Honored only if `collectedBgpAdvertisements` is true.\nDefaults to `BOTH`. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              "BOTH"
            ],
            "enum": [
              "BOTH",
              "EBGP",
              "IBGP"
            ]
          },
          "bgpSubnetsToCollect": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Restricts collection of BGP advertisements to specific subnets if the device supports it. Honored only if\n`collectBgpAdvertisements` is `true`. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              [
                "123.223.47.0/24"
              ]
            ]
          },
          "prompt": {
            "type": "string",
            "description": "A case-insensitive glob pattern used to identify an interactive prompt. When this pattern matches the end of\nthe prompt, ignoring any trailing whitespace, the Collector will enter the configured `promptResponse`.\nRelevant for devices collected via SSH or Telnet. Use `null` to clear. Omit to leave the property alone.",
            "examples": [
              "y/n"
            ]
          },
          "promptResponse": {
            "type": "string",
            "description": "What the Collector should enter in response to a device prompt matching `prompt` in order to proceed.\nRelevant for devices collected via SSH or Telnet. Required if `prompt` is set. Use `null` to clear. Omit to\nleave the property alone.",
            "examples": [
              "y"
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from the device. Defaults to true. Use `null` to clear. Omit to leave the\nproperty alone.",
            "examples": [
              false
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about the device. Use `null` to clear. Omit to leave the\nproperty alone."
          },
          "enableSnmpCollection": {
            "type": "boolean",
            "description": "Whether to collect performance data (counters) via SNMP. Defaults to false. Use `null` to clear. Omit to\nleave the property alone.",
            "examples": [
              false
            ]
          },
          "highCpuUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which CPU usage is considered high. Defaults to 0.8 (80.0%). Use `null` to clear. Omit\nto leave the property alone.",
            "examples": [
              0.85
            ]
          },
          "highMemoryUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which memory usage is considered high. Defaults to 0.9 (90.0%). Use `null` to clear.\nOmit to leave the property alone.",
            "examples": [
              0.92
            ]
          },
          "highInputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which input interface utilization is considered high. Defaults to 0.9 (90.0%). Use\n`null` to clear. Omit to leave the property alone.",
            "examples": [
              0.8
            ]
          },
          "highOutputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which output interface utilization is considered high. Defaults to 0.9 (90.0%). Use\n`null` to clear. Omit to leave the property alone.",
            "examples": [
              0.88
            ]
          },
          "mediumCpuUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which CPU usage is considered medium high. Has no default value. Use `null` to clear.\nOmit to leave the property alone.",
            "examples": [
              0.7
            ]
          },
          "mediumMemoryUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which memory usage is considered medium high. Has no default value. Use `null` to\nclear. Omit to leave the property alone.",
            "examples": [
              0.71
            ]
          },
          "mediumInputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which input interface utilization is considered medium high. Has no default value. Use\n`null` to clear. Omit to leave the property alone.",
            "examples": [
              0.72
            ]
          },
          "mediumOutputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which output interface utilization is considered medium high. Has no default value.\nUse `null` to clear. Omit to leave the property alone.",
            "examples": [
              0.73
            ]
          }
        }
      },
      "ClassicDevices": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ClassicDevice"
            }
          }
        }
      },
      "ClassicDevicesPatch": {
        "type": "object",
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "update": {
            "$ref": "#/components/schemas/ClassicDevicePatch"
          }
        }
      },
      "DeviceCriteria": {
        "type": "object",
        "required": [
          "names"
        ],
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "router_01",
                "router_02"
              ]
            ]
          }
        }
      },
      "DeviceNames": {
        "type": "object",
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "NewClassicDevice": {
        "type": "object",
        "required": [
          "name",
          "host"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
            "examples": [
              "my-router"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/ClassicDeviceType",
            "description": "Auto-detected during connectivity testing if unspecified.",
            "examples": [
              "checkpoint_ssh"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
            "examples": [
              22
            ]
          },
          "cliCredentialId": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `LOGIN`. Relevant for devices collected via SSH or Telnet. Credential\nauto-association will be attempted using credentials configured to allow it if this property is unspecified\nand collecting from this device requires this kind of credential.",
            "examples": [
              "L-3"
            ]
          },
          "cliCredential2Id": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `PRIVILEGED_MODE` (for Cisco-like or Checkpoint devices) or `SHELL` (for\nAvi controllers). On Checkpoint, this credential is used for TACACS privilege escalation. Credential\nauto-association will be attempted using credentials configured to allow it if this property is unspecified\nand collecting from this device requires this kind of credential.",
            "examples": [
              "PM-2"
            ]
          },
          "cliCredential3Id": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `EXPERT_MODE` (for Checkpoint devices). Can be set with or without a\n`PRIVILEGED_MODE` credential for `cliCredential2Id`. Credential auto-association will be attempted using\ncredentials configured to allow it if this property is unspecified and collecting from this device requires\nthis kind of credential.",
            "examples": [
              "EM-6"
            ]
          },
          "httpCredentialId": {
            "type": "string",
            "description": "The `id` of an HttpCredential of type `LOGIN` or `API_KEY`. Relevant for devices collected via HTTPS or\nHTTP. Credential auto-association will be attempted using credentials configured to allow it if this\nproperty is unspecified and collecting from this device requires this kind of credential.",
            "examples": [
              "H-5"
            ]
          },
          "snmpCredentialId": {
            "type": "string",
            "description": "The `id` of an SnmpCredential. Used to collect performance data (counters) if `enableSnmpCollection` is\ntrue. Credential auto-association will be attempted using credentials configured to allow it if this\nproperty is unspecified and collecting from this device requires this kind of credential.",
            "examples": [
              "S-4"
            ]
          },
          "jumpServerId": {
            "type": "string",
            "description": "The `id` of the JumpServer that should be used to collect from this device.",
            "examples": [
              "J-0"
            ]
          },
          "disableIpv6Collection": {
            "type": "boolean",
            "description": "Disables collection of any IPv6 forwarding state on the device. Defaults to false.",
            "examples": [
              false
            ]
          },
          "fullCollectionLog": {
            "type": "boolean",
            "description": "Enables more detailed logging during collection. Defaults to false.",
            "examples": [
              false
            ]
          },
          "paginationMode": {
            "$ref": "#/components/schemas/PaginationMode",
            "description": "The pagination mode to use during collection. Relevant for devices collected via SSH or Telnet. Defaults to\n`DISABLE_PAGINATION`. Per-command pagination (such as appending `| more`) may be used if set to\n`ENABLE_PAGINATION` for a device that doesn’t have a per-session pagination mode setting.",
            "examples": [
              "KEEP_UNCHANGED"
            ]
          },
          "terminalWidth": {
            "type": "integer",
            "format": "int32",
            "minimum": 80,
            "maximum": 500,
            "description": "Width of pseudo-terminal in characters. A high value can prevent long lines from wrapping. Defaults to 500.\nRelevant for devices collected via SSH or Telnet.",
            "examples": [
              500
            ]
          },
          "largeRtt": {
            "type": "boolean",
            "description": "Whether the device has a large round-trip time (requires a longer response timeout).",
            "examples": [
              false
            ]
          },
          "minBytesReadPerSec": {
            "type": "integer",
            "format": "int64",
            "description": "The minimum read rate in bytes/sec required to prevent collection from failing with a\n`SLOW_READ_RATE_DETECTED` error. Defaults to 500.",
            "examples": [
              false
            ]
          },
          "maxConnectionsPerMin": {
            "type": "integer",
            "format": "int32",
            "description": "The maximum number of connections to this device that should be attempted per minute. Setting this property\ncan prevent spurious connectivity test failures if the device’s SSH server is configured with a connection\nrate limit.",
            "examples": [
              10
            ]
          },
          "useFileTransferForLargeOutput": {
            "type": "boolean",
            "description": "Whether to use file transfer instead of printing large command output directly to the shell. This is\ncurrently only supported for Juniper devices when executing routing table commands. The primary purpose is\nto avoid printing large outputs directly to the shell, which on Juniper devices can interfere with packet\nforwarding performance. Instead, the command output is written to a temporary file on the device and then\ntransferred over a separate connection. After the transfer is complete, the temporary file is deleted to\nprevent unnecessary disk usage on the device.",
            "examples": [
              false
            ]
          },
          "bmpStationHost": {
            "type": "string",
            "description": "IP address or hostname of the BMP station from which BMP collection should be peformed for this device. If\nset, a jump server won’t be used for BMP collection.",
            "examples": [
              "10.121.7.33"
            ]
          },
          "bgpAndBmpFailureHandling": {
            "type": "string",
            "description": "How to handle BGP or BMP collection failure. Defaults to `FAIL_DEVICE`.",
            "examples": [
              "SWITCH_TO_CLI"
            ],
            "enum": [
              "FAIL_DEVICE",
              "SWITCH_TO_CLI",
              "ALWAYS_USE_CLI",
              "ALWAYS_USE_BMP",
              "CONTINUE_WITHOUT_BGP_DATA"
            ]
          },
          "collectBgpAdvertisements": {
            "type": "boolean",
            "description": "Whether BGP advertisements should be collected. Defaults to `false` unless advertisement collection is\nrequired to model a [synthetic device](https://docs.fwd.app/latest/api/synthetic-devices/) connected to this\ndevice.",
            "examples": [
              false
            ]
          },
          "bgpTableType": {
            "type": "string",
            "description": "The BGP route types to collect. Honored only if `collectedBgpAdvertisements` is true. Defaults\nto `BOTH`.",
            "examples": [
              "BOTH"
            ],
            "enum": [
              "BOTH",
              "ADJ_RIB_IN",
              "ADJ_RIB_OUT"
            ]
          },
          "bgpPeerType": {
            "type": "string",
            "description": "The BGP peer types from which to collect routes. Honored only if `collectedBgpAdvertisements` is true.\nDefaults to `BOTH`.",
            "examples": [
              "BOTH"
            ],
            "enum": [
              "BOTH",
              "EBGP",
              "IBGP"
            ]
          },
          "bgpSubnetsToCollect": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Restricts collection of BGP advertisements to specific subnets if the device supports it. Honored only if\n`collectBgpAdvertisements` is `true`.",
            "examples": [
              [
                "123.223.47.0/24"
              ]
            ]
          },
          "prompt": {
            "type": "string",
            "description": "A case-insensitive glob pattern used to identify an interactive prompt. When this pattern matches the end of\nthe prompt, ignoring any trailing whitespace, the Collector will enter the configured `promptResponse`.\nRelevant for devices collected via SSH or Telnet.",
            "examples": [
              "y/n"
            ]
          },
          "promptResponse": {
            "type": "string",
            "description": "What the Collector should enter in response to a device prompt matching `prompt` in order to proceed.\nRelevant for devices collected via SSH or Telnet. Required if `prompt` is set.",
            "examples": [
              "y"
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from the device. Defaults to true.",
            "examples": [
              false
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about the device."
          },
          "enableSnmpCollection": {
            "type": "boolean",
            "description": "Whether to collect performance data (counters) via SNMP. Defaults to false.",
            "examples": [
              false
            ]
          },
          "highCpuUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which CPU usage is considered high. Defaults to 0.8 (80.0%).",
            "examples": [
              0.85
            ]
          },
          "highMemoryUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which memory usage is considered high. Defaults to 0.9 (90.0%).",
            "examples": [
              0.92
            ]
          },
          "highInputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which input interface utilization is considered high. Defaults to 0.9\n(90.0%).",
            "examples": [
              0.8
            ]
          },
          "highOutputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.75,
            "maximum": 1,
            "description": "Threshold at or above which output interface utilization is considered high. Defaults to 0.9\n(90.0%).",
            "examples": [
              0.88
            ]
          },
          "mediumCpuUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which CPU usage is considered medium high. Has no default value.",
            "examples": [
              0.7
            ]
          },
          "mediumMemoryUsage": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which memory usage is considered medium high. Has no default value.",
            "examples": [
              0.71
            ]
          },
          "mediumInputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which input interface utilization is considered medium high. Has no\ndefault value.",
            "examples": [
              0.72
            ]
          },
          "mediumOutputUtilization": {
            "type": "number",
            "format": "float",
            "minimum": 0.5,
            "maximum": 1,
            "description": "Threshold at or above which output interface utilization is considered medium high. Has no\ndefault value.",
            "examples": [
              0.73
            ]
          },
          "cloudLocationId": {
            "type": "string",
            "description": "ID of the cloud location at which this device was discovered. Present for cloud-based virtualized devices\nonly.",
            "examples": [
              "AWS.us-east-1"
            ]
          },
          "cloudSetupId": {
            "type": "string",
            "description": "Name of the cloud setup associated with this device’s discovery. Present for cloud-based virtualized devices\nonly.",
            "examples": [
              "my-aws-setup"
            ]
          },
          "cloudDiscoverySource": {
            "type": "string",
            "description": "Account name (AWS), Project ID (GCP), or Subscription ID (Azure) associated with this device’s discovery.\nPresent for cloud-based virtualized devices only.",
            "examples": [
              "main"
            ]
          }
        }
      },
      "ClassicDeviceType": {
        "type": "string",
        "enum": [
          "aruba_controller_ssh",
          "aruba_switch_ssh",
          "aruba_aos_cx_ssh",
          "128t_conductor_full",
          "128t_conductor",
          "128t_router",
          "a10_acos_ssh",
          "arista_eos_ssh",
          "avi_controller_ssh",
          "avi_controller_ssh_cli_user",
          "avi_controller_ssh_via_host",
          "avi_controller_https_api",
          "avi_controller_http_api",
          "bluecoat_ssh",
          "cisco_ios_ssh",
          "cisco_ios_telnet",
          "cisco_ios_xe_ssh",
          "cisco_ios_xe_telnet",
          "cisco_ios_xr_ssh",
          "cisco_nxos_ssh",
          "cisco_nxos_telnet",
          "cisco_asa_ssh",
          "cisco_asa_telnet",
          "cisco_asa_admin_ssh",
          "cisco_asa_child_ssh",
          "cisco_ftd_ssh",
          "cisco_fxos_ssh",
          "cisco_firewalls_on_firepower_ssh",
          "cisco_fmc_api",
          "cisco_nxos_aci_ssh",
          "cisco_apic_api",
          "cisco_ndo_api",
          "cisco_apic_only_ssh",
          "cisco_sg_ssh",
          "juniper_junos_ssh",
          "juniper_srx_ssh",
          "juniper_netscreen_ssh",
          "pica8_ovs_ofctl_ssh",
          "linux_ovs_ofctl_ssh",
          "f5_ssh",
          "f5_os_hypervisor_ssh",
          "checkpoint_ssh",
          "checkpoint_ssh_nonexpert",
          "checkpoint_ssh_with_manager",
          "checkpoint_mgmt_api",
          "fortinet_ssh",
          "hp_comware_ssh",
          "hp_comware_telnet",
          "hp_provision_ssh",
          "huawei_switch_ssh",
          "panos_ssh",
          "viasat_encryptor_snmp3",
          "netscaler_ssh",
          "cumulus_ssh",
          "riverbed_steelhead_ssh",
          "riverbed_interceptor_ssh",
          "cisco_ucs_ssh",
          "avaya_sr_ssh",
          "avaya_sr_telnet",
          "avaya_ers_ssh",
          "avaya_ers_telnet",
          "silver_peak_edgeconnect_ssh",
          "silver_peak_orchestrator_api",
          "prisma_sdwan_ssh",
          "prisma_sdwan_api",
          "prisma_sdwan_unified_api",
          "pensando_api",
          "forcepoint_https_api",
          "forcepoint_http_api",
          "forcepoint_ssh",
          "cisco_sdwan_ssh",
          "cisco_sdwan_vsmart_ssh",
          "bluecat_http",
          "bluecat_https",
          "bluecat_v2_http",
          "bluecat_v2_https",
          "nokia_ssh",
          "brocade_switch_ssh",
          "versa_flexvnf_ssh",
          "versa_switch_ssh",
          "cisco_encs_nfv_ssh",
          "extreme_switch_ssh",
          "mist_dashboard_api",
          "dell_os6_switch_ssh",
          "dell_os6_switch_telnet",
          "dell_os9_switch_ssh",
          "dell_os9_switch_telnet",
          "dell_os10_switch_ssh",
          "dell_os10_switch_telnet",
          "sonic_dell_enterprise_ssh",
          "gem1_api",
          "taclane_encryptor_snmp",
          "sonic_edge_core_ssh"
        ]
      },
      "PaginationMode": {
        "type": "string",
        "enum": [
          "KEEP_UNCHANGED",
          "DISABLE_PAGINATION",
          "ENABLE_PAGINATION"
        ]
      },
      "ConnectivityTestError": {
        "type": "string",
        "enum": [
          "PING_FAILED",
          "PORT_REACHABILITY_FAILED",
          "UNSUPPORTED_SSH_PROTOCOL",
          "CONNECTION_FAILED",
          "PROMPT_DISCOVERY_FAILED",
          "AUTHENTICATION_FAILED",
          "TWO_FACTOR_AUTHENTICATION_FAILED",
          "KEY_EXCHANGE_FAILED",
          "UNEXPECTED_KEY_EXCHANGE_MESSAGE",
          "CERTIFICATE_CHECK_FAILED",
          "PASSWORD_EXPIRED",
          "JUMP_SERVER_PING_FAILED",
          "JUMP_SERVER_PORT_REACHABILITY_FAILED",
          "JUMP_SERVER_CONNECTION_FAILED",
          "JUMP_SERVER_AUTHENTICATION_FAILED",
          "JUMP_SERVER_KEY_EXCHANGE_FAILED",
          "JUMP_SERVER_PASSWORD_EXPIRED",
          "PROXY_SERVER_PING_FAILED",
          "PROXY_SERVER_PORT_REACHABILITY_FAILED",
          "PROXY_SERVER_CONNECTION_FAILED",
          "PROXY_SERVER_AUTHENTICATION_FAILED",
          "SERVER_FINGERPRINT_CHECK_FAILED",
          "SESSION_LIMIT_REACHED",
          "DEVICE_TYPE_MISMATCH",
          "DEVICE_TYPE_UNDETECTED",
          "SESSION_CLOSED",
          "PRIV_PASSWORD_ERROR",
          "EXPERT_PASSWORD_ERROR",
          "DEVICE_IS_CHILD_CONTEXT",
          "GUEST_MISSING_HOST_RESULTS",
          "HOST_MISSING_GUEST_RESULTS",
          "HOST_NOT_REPORTING_ANY_GUEST",
          "GUEST_NOT_REPORTING_ANY_NAME",
          "UNSUPPORTED_VERSION",
          "AVI_SHELL_AUTH_FAILED",
          "KEY_BASED_ACCESS_TO_AVI_CONTAINER_FAILED",
          "AVI_SERVICE_ENGINE_DISCOVERED",
          "AVI_VIA_LINUX_OVER_JUMP_SERVER_UNSUPPORTED",
          "AVI_CONTROLLER_WITHOUT_HEALTHY_SERVICE_ENGINES",
          "T128_CONDUCTOR_WITHOUT_HEALTHY_ROUTERS",
          "API_CALL_FAILED",
          "CHECKPOINT_MANAGER_FOUND",
          "AUTHORIZATION_FAILED",
          "INCOMPLETE_AUTHORIZATION_CHECK",
          "CUSTOM_COMMAND_AUTHORIZATION_FAILED",
          "TACACS_SESSION_EXPIRED",
          "AZURE_SUBSCRIPTION_NOT_FOUND",
          "TIMED_OUT",
          "DEVICE_IN_BAD_STATE",
          "PROJECT_VIEW_PERMISSION_MISSING",
          "UNSUPPORTED_DEVICE_TYPE",
          "SLOW_READ_RATE",
          "TRANSIENT_SLOW_READ_RATE_DETECTED",
          "NO_SPACE_LEFT_ON_COLLECTOR",
          "NO_SPACE_LEFT_ON_COLLECTED_DEVICE",
          "VERSA_DIRECTOR_DISCOVERED",
          "DEVICE_PROTOCOL_MISMATCH",
          "API_SERVER_FAILED_TO_RESPOND",
          "UNRESOLVABLE_HOSTNAME",
          "UNSUPPORTED_SSL_CONNECTION",
          "PASSWD_DISCOVERY_ON_INSECURE_PROTOCOL",
          "INCOMPLETE_SETUP",
          "CONFIG_COLLECTION_UNAUTHORIZED",
          "FILE_TRANSFER_FAILED",
          "CANCELED",
          "OTHER"
        ]
      },
      "SourceConnectivityResult": {
        "type": "object",
        "required": [
          "startTime",
          "endTime",
          "savedAt"
        ],
        "properties": {
          "startTime": {
            "type": "string",
            "description": "When this connectivity test began, according to the Collector’s system clock.",
            "examples": [
              "2025-05-28T12:33:00.000Z"
            ]
          },
          "endTime": {
            "type": "string",
            "description": "When this connectivity test ended, according to the Collector’s system clock.",
            "examples": [
              "2025-05-28T12:33:33.333Z"
            ]
          },
          "savedAt": {
            "type": "string",
            "description": "When this connectivity test result was saved to the database, according to the server’s system\nclock.",
            "examples": [
              "2025-05-28T12:34:56.789Z"
            ]
          },
          "error": {
            "$ref": "#/components/schemas/ConnectivityTestError",
            "description": "The error encountered during the test. Present if the test failed. Absent if the test passed.",
            "examples": [
              "PING_FAILED"
            ]
          },
          "errorPhase": {
            "type": "string",
            "description": "The test phase during which `error` was encountered. Present if `error` is present.",
            "examples": [
              "CONNECTION"
            ],
            "enum": [
              "CONNECTION",
              "AUTHENTICATION",
              "TYPE_DISCOVERY",
              "SETUP",
              "AUTHORIZATION",
              "QUERY"
            ]
          },
          "discoveredType": {
            "$ref": "#/components/schemas/ClassicDeviceType",
            "description": "The device type auto-discovered during the connectivity test.",
            "examples": [
              "arista_eos_ssh"
            ]
          },
          "discoveredCliCredentialId": {
            "type": "string",
            "description": "The `id` of the working CliCredential of type `LOGIN` auto-discovered during the connectivity test. Can only\nbe present for device types collected via SSH.",
            "examples": [
              "L-3"
            ]
          },
          "discoveredCliCredential2Id": {
            "type": "string",
            "description": "The `id` of the working CliCredential of type `PRIVILEGED_MODE` (for Cisco-like and Checkpoint devices) or\n`SHELL` (for Avi controllers) auto-discovered during the connectivity test. Can only be present for device\ntypes collected via SSH or Telnet.",
            "examples": [
              "PM-2"
            ]
          },
          "discoveredCliCredential3Id": {
            "type": "string",
            "description": "The `id` of the working CliCredential of type `EXPERT_MODE` (for Checkpoint devices) auto-discovered during\nthe connectivity test. Can only be present for device types collected via SSH.",
            "examples": [
              "EM-3"
            ]
          },
          "discoveredHttpCredentialId": {
            "type": "string",
            "description": "The `id` of the working HttpCredential of type `LOGIN` or `API_KEY` auto-discovered during the connectivity\ntest. Can only be present for device types collected via HTTPS.",
            "examples": [
              "H-5"
            ]
          },
          "discoveredSnmpCredentialId": {
            "type": "string",
            "description": "The `id` of the working SnmpCredential auto-discovered during the connectivity test.",
            "examples": [
              "S-1"
            ]
          },
          "hostIps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The IP addresses to which `host` resolves if it’s a hostname. Contains just `host` itself if it’s an IP\naddress.",
            "examples": [
              [
                "10.121.7.13"
              ]
            ]
          },
          "unauthorizedCommands": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Commands that failed with an authorization (permission) error during the connectivity test.",
            "examples": [
              [
                "show config",
                "show interfaces status"
              ]
            ]
          }
        }
      },
      "Attribution": {
        "type": "object",
        "properties": {
          "createdById": {
            "type": "string",
            "description": "The ID of the user who created this entity, if known. *Note*: The referenced user account might no longer\nexist since an administrator can delete accounts.",
            "examples": [
              "456"
            ]
          },
          "createdAt": {
            "type": "string",
            "description": "When this entity was created, if known.",
            "examples": [
              "2021-12-29T16:30:45.111Z"
            ]
          },
          "createdBy": {
            "type": "string",
            "description": "The username of the user who created this entity, if known. Absent if the user account has been\ndeleted.",
            "examples": [
              "me@example.com"
            ]
          },
          "updatedById": {
            "type": "string",
            "description": "The ID of the user who most recently updated this entity, if known. *Note*: The referenced user account\nmight no longer exist since an administrator can delete accounts.",
            "examples": [
              "789"
            ]
          },
          "updatedAt": {
            "type": "string",
            "description": "When this entity was most recently updated, if known.",
            "examples": [
              "2024-10-27T21:44:51.345Z"
            ]
          },
          "updatedBy": {
            "type": "string",
            "description": "The username of the user who most recently updated this entity, if known. Absent if the user account has\nbeen deleted.",
            "examples": [
              "you@example.com"
            ]
          }
        }
      },
      "CliCredential": {
        "type": "object",
        "required": [
          "type",
          "name",
          "password"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "L-3"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/CliCredentialType",
            "examples": [
              "LOGIN"
            ]
          },
          "name": {
            "type": "string",
            "description": "For display purposes in the application",
            "examples": [
              "admin (sjc)"
            ]
          },
          "username": {
            "type": "string",
            "description": "Required for `LOGIN` and `SHELL` types",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "description": "A system-generated identifier is substituted for the actual password in responses.",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "privilegedModePasswordId": {
            "type": "string",
            "description": "Only valid for `LOGIN` type. If set, only this credential will be used on devices that require a privileged\nmode password during a connectivity test or collection. If a privileged mode password is specified both here\nand in a `ClassicDevice`, the one in the `ClassicDevice` will be used.",
            "examples": [
              "PM-6"
            ]
          },
          "privilegeLevel": {
            "type": "integer",
            "format": "int32",
            "description": "Only valid for `PRIVILEGED_MODE` type. On Checkpoint devices, this is used as the TACACS privilege level, as\nin TACP-15. If absent, the highest privilege level will be used. Has no effect for other kinds of devices.",
            "examples": [
              15
            ]
          },
          "autoAssociate": {
            "type": "boolean",
            "description": "Whether this credential can be attempted on devices not explicitly configured to use it.\nDefaults to true."
          }
        }
      },
      "CliCredentialUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "For display purposes in the application",
            "examples": [
              "admin (sjc)"
            ]
          },
          "username": {
            "type": "string",
            "description": "for `LOGIN` and `SHELL` types",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "privilegedModePasswordId": {
            "type": "string",
            "description": "Only valid for `LOGIN` type. If set, only this credential will be used on devices that require a privileged\nmode password during a connectivity test or collection. If a privileged mode password is specified both here\nand in a `ClassicDevice`, the one in the `ClassicDevice` will be used.",
            "examples": [
              "31d70f9f-a279-44ac-a621-ab3181966ad8"
            ]
          },
          "privilegeLevel": {
            "type": "integer",
            "format": "int32",
            "description": "Only valid for `PRIVILEGED_MODE` type. On Checkpoint devices, this is used as the TACACS privilege level, as\nin TACP-15. If absent, the highest privilege level will be used. Has no effect for other kinds of devices.",
            "examples": [
              15
            ]
          },
          "autoAssociate": {
            "type": "boolean",
            "description": "Only supported for `LOGIN`, `PRIVILEGED_MODE`, and `SHELL` types."
          }
        }
      },
      "HttpCredential": {
        "type": "object",
        "required": [
          "type",
          "name",
          "password"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "H-3"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/HttpCredentialType",
            "examples": [
              "LOGIN"
            ]
          },
          "name": {
            "type": "string",
            "description": "For display purposes in the application",
            "examples": [
              "admin (sjc)"
            ]
          },
          "username": {
            "type": "string",
            "description": "Required for the `LOGIN` type",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "description": "A system-generated identifier is substituted for the actual password in responses.",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "loginType": {
            "$ref": "#/components/schemas/LoginType",
            "description": "Required only for a credential of type `LOGIN` used by a Silver Peak Orchestrator",
            "examples": [
              "LOCAL"
            ]
          },
          "autoAssociate": {
            "type": "boolean",
            "description": "Defaults to true for the `LOGIN` type. Not allowed for the `API_KEY` type.",
            "examples": [
              false
            ]
          }
        }
      },
      "HttpCredentialUpdate": {
        "type": "object",
        "required": [
          "name",
          "password"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "For display purposes in the application",
            "examples": [
              "admin (sjc)"
            ]
          },
          "username": {
            "type": "string",
            "description": "Required for the `LOGIN` type",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "loginType": {
            "$ref": "#/components/schemas/LoginType",
            "description": "Required only for a credential of type `LOGIN` used by a Silver Peak Orchestrator",
            "examples": [
              "LOCAL"
            ]
          },
          "autoAssociate": {
            "type": "boolean",
            "description": "Defaults to true for the `LOGIN` type. Not allowed for the `API_KEY` type.",
            "examples": [
              false
            ]
          }
        }
      },
      "NewCliCredential": {
        "type": "object",
        "required": [
          "type",
          "name",
          "password"
        ],
        "properties": {
          "type": {
            "$ref": "#/components/schemas/CliCredentialType",
            "examples": [
              "LOGIN"
            ]
          },
          "name": {
            "type": "string",
            "description": "For display purposes in the application",
            "examples": [
              "admin (sjc)"
            ]
          },
          "username": {
            "type": "string",
            "description": "Required for `LOGIN` and `SHELL` types",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "privilegedModePasswordId": {
            "type": "string",
            "description": "Only valid for `LOGIN` type. If set, only this credential will be used on devices that require a privileged\nmode password during a connectivity test or collection. If a privileged mode password is specified both here\nand in a `ClassicDevice`, the one in the `ClassicDevice` will be used.",
            "examples": [
              "31d70f9f-a279-44ac-a621-ab3181966ad8"
            ]
          },
          "privilegeLevel": {
            "type": "integer",
            "format": "int32",
            "description": "Only valid for `PRIVILEGED_MODE` type. On Checkpoint devices, this is used as the TACACS privilege level, as\nin TACP-15. If absent, the highest privilege level will be used. Has no effect for other kinds of devices.",
            "examples": [
              15
            ]
          },
          "autoAssociate": {
            "type": "boolean",
            "description": "Whether this credential can be attempted on devices not explicitly configured to use it.\nDefaults to true."
          }
        }
      },
      "NewHttpCredential": {
        "type": "object",
        "required": [
          "type",
          "name",
          "password"
        ],
        "properties": {
          "type": {
            "$ref": "#/components/schemas/HttpCredentialType",
            "examples": [
              "LOGIN"
            ]
          },
          "name": {
            "type": "string",
            "description": "For display purposes in the application",
            "examples": [
              "admin (sjc)"
            ]
          },
          "username": {
            "type": "string",
            "description": "Required for the `LOGIN` type",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "loginType": {
            "$ref": "#/components/schemas/LoginType",
            "description": "Required only for a credential of type `LOGIN` used by a Silver Peak Orchestrator",
            "examples": [
              "LOCAL"
            ]
          },
          "autoAssociate": {
            "type": "boolean",
            "description": "Defaults to true for the `LOGIN` type. Not allowed for the `API_KEY` type.",
            "examples": [
              false
            ]
          }
        }
      },
      "StoredCliCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CliCredential"
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "StoredHttpCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/HttpCredential"
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "CliCredentialType": {
        "type": "string",
        "enum": [
          "LOGIN",
          "PRIVILEGED_MODE",
          "EXPERT_MODE",
          "SHELL"
        ]
      },
      "HttpCredentialType": {
        "type": "string",
        "enum": [
          "LOGIN",
          "API_KEY"
        ]
      },
      "LoginType": {
        "type": "string",
        "enum": [
          "LOCAL",
          "RADIUS",
          "TACACS",
          "OAUTH",
          "JWT",
          "SAML"
        ]
      },
      "ApiVersion": {
        "type": "object",
        "properties": {
          "build": {
            "type": "string",
            "examples": [
              "ee9b380"
            ]
          },
          "release": {
            "type": "string",
            "examples": [
              "21.50.1-03"
            ]
          },
          "version": {
            "type": "string",
            "examples": [
              "21.50.1"
            ]
          }
        }
      },
      "DeviceSet": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "atl-edge-fw01",
                "ny-edge-fw2"
              ]
            ]
          }
        }
      },
      "DeviceTag": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The device tag’s name. Case-insensitive. May include spaces.",
            "examples": [
              "SEC"
            ]
          },
          "color": {
            "type": "string",
            "description": "The device tag’s color in RGB hex format. Used in network topology diagrams if specified.",
            "examples": [
              "#0064a0"
            ]
          }
        }
      },
      "DeviceTagPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The device tag’s name. Case-insensitive. May include spaces.",
            "examples": [
              "SEC"
            ]
          },
          "color": {
            "type": "string",
            "description": "The device tag’s color in RGB hex format. Used in network topology diagrams if specified.",
            "examples": [
              "#0064a0"
            ]
          }
        }
      },
      "DeviceTagWithDevices": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeviceTag"
          },
          {
            "type": "object",
            "properties": {
              "devices": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The names of network devices and/or endpoints associated with this tag.",
                "examples": [
                  [
                    "atl-edge-fw01",
                    "ny-edge-fw2"
                  ]
                ]
              }
            }
          }
        ]
      },
      "DeviceTags": {
        "type": "object",
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceTag"
            }
          }
        }
      },
      "DeviceTagsWithDevices": {
        "type": "object",
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceTagWithDevices"
            }
          }
        }
      },
      "DevicesAndTags": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "atl-edge-fw01",
                "ny-edge-fw2"
              ]
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "SEC"
              ]
            ]
          }
        }
      },
      "JumpServer": {
        "type": "object",
        "required": [
          "host",
          "username"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "8c4a168e-c6ca-4978-bcc9-c0ec7f64a164"
            ]
          },
          "host": {
            "type": "string",
            "examples": [
              "10.121.7.14"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "description": "defaults to 22",
            "examples": [
              23
            ]
          },
          "username": {
            "type": "string",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "description": "Either this or `sshKey` must be provided in requests. A system-generated identifier is substituted for the\nactual password in responses.",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "sshKey": {
            "type": "string",
            "description": "SSH private key for authentication. Either this or `password` must be provided in requests. Requires\n`supportsPortForwarding` to be true. A system-generated identifier is substituted for the actual key in\nresponses.",
            "examples": [
              "-----BEGIN RSA PRIVATE KEY-----\nMIIPIQIBAzCCDtoGCSqGSIb3DQEHAa..."
            ]
          },
          "sshCert": {
            "type": "string",
            "description": "SSH user certificate for authentication. Applicable only for certificate based authentication and requires\n`sshKey` to be provided.",
            "examples": [
              "ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAA..."
            ]
          },
          "supportsPortForwarding": {
            "type": "boolean",
            "description": "defaults to true",
            "examples": [
              false
            ]
          },
          "commandFormat": {
            "$ref": "#/components/schemas/JumpServerCommandFormat",
            "description": "applicable when supportsPortForwarding is false, defaults to UNIX",
            "examples": [
              "CISCO_IOS"
            ]
          },
          "vrf": {
            "type": "string",
            "description": "VRF that this jump server should use to connect to devices. Can be set only if `commandFormat`\nis CISCO_IOS.",
            "examples": [
              "Management-vrf"
            ]
          },
          "authenticationTimeoutSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "seconds to wait for the jump server authentication response. Defaults to 20.",
            "examples": [
              20
            ]
          }
        }
      },
      "JumpServerUpdate": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "examples": [
              "10.121.7.14"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "examples": [
              23
            ]
          },
          "username": {
            "type": "string",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "sshKey": {
            "type": "string",
            "examples": [
              "-----BEGIN RSA PRIVATE KEY-----\nMIIPIQIBAzCCDtoGCSqGSIb3DQEHAa..."
            ]
          },
          "sshCert": {
            "type": "string",
            "examples": [
              "ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAA..."
            ]
          },
          "supportsPortForwarding": {
            "type": "boolean",
            "examples": [
              false
            ]
          },
          "commandFormat": {
            "$ref": "#/components/schemas/JumpServerCommandFormat",
            "examples": [
              "CISCO_IOS"
            ]
          },
          "vrf": {
            "type": "string",
            "examples": [
              "Management-vrf"
            ]
          },
          "authenticationTimeoutSeconds": {
            "type": "integer",
            "format": "int32",
            "examples": [
              20
            ]
          }
        }
      },
      "NewJumpServer": {
        "type": "object",
        "required": [
          "host",
          "username"
        ],
        "properties": {
          "host": {
            "type": "string",
            "examples": [
              "10.121.7.14"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "description": "defaults to 22",
            "examples": [
              23
            ]
          },
          "username": {
            "type": "string",
            "examples": [
              "admin"
            ]
          },
          "password": {
            "type": "string",
            "description": "Either this or `sshKey` is required",
            "examples": [
              "my-s3cr3t-p4s$w0rd"
            ]
          },
          "sshKey": {
            "type": "string",
            "description": "SSH private key for authentication. Either this or `password` is required. Requires `supportsPortForwarding`\nto be true.",
            "examples": [
              "-----BEGIN RSA PRIVATE KEY-----\nMIIPIQIBAzCCDtoGCSqGSIb3DQEHAa…"
            ]
          },
          "sshCert": {
            "type": "string",
            "description": "SSH user certificate for authentication. Applicable only for certificate based authentication and requires\n`sshKey` to be provided.",
            "examples": [
              "ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAA…"
            ]
          },
          "supportsPortForwarding": {
            "type": "boolean",
            "description": "defaults to true",
            "examples": [
              false
            ]
          },
          "commandFormat": {
            "$ref": "#/components/schemas/JumpServerCommandFormat",
            "description": "applicable when supportsPortForwarding is false, defaults to UNIX",
            "examples": [
              "CISCO_IOS"
            ]
          },
          "vrf": {
            "type": "string",
            "description": "VRF that this jump server should use to connect to devices. Can be set only if `commandFormat`\nis CISCO_IOS.",
            "examples": [
              "Management-vrf"
            ]
          },
          "authenticationTimeoutSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "seconds to wait for the jump server authentication response. Defaults to 20.",
            "examples": [
              20
            ]
          }
        }
      },
      "StoredJumpServer": {
        "allOf": [
          {
            "$ref": "#/components/schemas/JumpServer"
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "JumpServerCommandFormat": {
        "type": "string",
        "enum": [
          "UNIX",
          "CISCO_IOS",
          "JUNOS",
          "PANORAMA"
        ]
      },
      "CollectionSchedule": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Network-specific collection schedule identifier",
                "examples": [
                  "1"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/CollectionScheduleDefinition"
          }
        ]
      },
      "CollectionScheduleDefinition": {
        "type": "object",
        "required": [
          "enabled",
          "daysOfTheWeek"
        ],
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether the schedule is currently in effect",
            "examples": [
              true
            ]
          },
          "timeZone": {
            "$ref": "#/components/schemas/TimeZone",
            "description": "The time zone used to identify day boundaries and to interpret `times`, `startAt`, and `endAt`. Defaults to\nthe organization’s preferred time zone.",
            "examples": [
              "America/Los_Angeles"
            ]
          },
          "daysOfTheWeek": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "The days of the week, Sun (0), Mon (1), …, Sat (6), on which the collection schedule is active.\nNever empty.",
            "examples": [
              [
                0,
                2,
                4,
                6
              ]
            ]
          },
          "times": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Times of the day (in \"HH:mm\" format) at which network collections should start. Either `times` or\n`periodInSeconds` must be specified—not both. Never empty if present.",
            "examples": [
              [
                "01:00",
                "06:00",
                "11:00",
                "16:00",
                "21:00"
              ]
            ]
          },
          "periodInSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "How many seconds after the start of the most recent collection that the next one should begin. Either\n`times` or `periodInSeconds` must be specified—not both. Must be positive.\n\n**Note**: A Collector can only perform one network collection at a time. A scheduled collection will be\ndelayed if it cannot start on time due to an earlier collection running long.",
            "examples": [
              1800
            ]
          },
          "startAt": {
            "type": "string",
            "description": "The time of day (in \"HH:mm\" format) at which a rate-based collection schedule begins. Must be absent if\n`times` is specified. Defaults to the start of the day (00:00).",
            "examples": [
              "05:30"
            ]
          },
          "endAt": {
            "type": "string",
            "description": "The time of day (in \"HH:mm\" format) at which a rate-based collection schedule ends. Must be absent if\n`times` is specified. Defaults to the end of the day.",
            "examples": [
              "20:00"
            ]
          }
        }
      },
      "CollectionSchedules": {
        "type": "object",
        "properties": {
          "schedules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionSchedule"
            }
          }
        }
      },
      "CollectorState": {
        "type": "object",
        "required": [
          "isSet"
        ],
        "properties": {
          "isSet": {
            "type": "boolean",
            "description": "Whether the network has a Collector assigned"
          },
          "busyStatus": {
            "$ref": "#/components/schemas/CollectorStatus",
            "description": "Absent if the network has no Collector assigned"
          }
        }
      },
      "CollectorTask": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "System-assigned identifier of this task.",
            "examples": [
              "P1234"
            ]
          },
          "type": {
            "type": "string",
            "description": "The type of the task",
            "examples": [
              "NETWORK_COLLECTION"
            ]
          },
          "status": {
            "type": "string",
            "description": "The current status of the task.",
            "examples": [
              "SUCCEEDED"
            ],
            "enum": [
              "QUEUED",
              "RUNNING",
              "SUCCEEDED",
              "FAILED",
              "TIMED_OUT",
              "CANCELED"
            ]
          },
          "networkId": {
            "type": "string",
            "description": "The ID of the network this task is associated with",
            "examples": [
              "123"
            ]
          },
          "networkName": {
            "type": "string",
            "description": "The name of the network this task is associated with",
            "examples": [
              "My Network"
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional user-provided note about the task."
          },
          "createdById": {
            "type": "string",
            "description": "The ID of the user who created this entity, if known. *Note*: The referenced user account might no longer\nexist since an administrator can delete accounts.",
            "examples": [
              "456"
            ]
          },
          "createdBy": {
            "type": "string",
            "description": "The ID of the user who created this entity, if known. *Note*: The referenced user account might no longer\nexist since an administrator can delete accounts.",
            "examples": [
              "456"
            ]
          },
          "createdAt": {
            "type": "string",
            "description": "When this entity was created, if known.",
            "examples": [
              "2024-10-27T16:30:45.111Z"
            ]
          },
          "startedAt": {
            "type": "string",
            "description": "When this task started. Absent if the task hasn’t started yet.",
            "examples": [
              "2024-10-27T21:44:51.345Z"
            ]
          },
          "finishedAt": {
            "type": "string",
            "description": "When this task finished. Absent if the task hasn’t finished yet.",
            "examples": [
              "2024-10-28T00:41:31.123Z"
            ]
          },
          "canceledById": {
            "type": "string",
            "description": "The ID of the user who canceled this task, if the `status` is CANCELED.",
            "examples": [
              "456"
            ]
          },
          "canceledBy": {
            "type": "string",
            "description": "The username of the user who canceled this task, if the `status` is CANCELED. Absent if the user account has\nbeen deleted.",
            "examples": [
              "me@example.com"
            ]
          }
        }
      },
      "StartCollectionResponse": {
        "type": "object",
        "properties": {
          "taskId": {
            "type": "string",
            "description": "The system-assigned identifier of the new network collection task.",
            "examples": [
              "P1234"
            ]
          }
        }
      },
      "TimeZone": {
        "type": "string",
        "enum": [
          "UTC",
          "Africa/Accra",
          "Africa/Addis_Ababa",
          "Africa/Algiers",
          "Africa/Cairo",
          "Africa/Dar_es_Salaam",
          "Africa/Johannesburg",
          "Africa/Khartoum",
          "Africa/Kinshasa",
          "Africa/Lagos",
          "Africa/Luanda",
          "Africa/Maputo",
          "America/Argentina/Buenos_Aires",
          "America/Bogota",
          "America/Chicago",
          "America/Denver",
          "America/Lima",
          "America/Los_Angeles",
          "America/Mexico_City",
          "America/New_York",
          "America/Phoenix",
          "America/Santiago",
          "America/Sao_Paulo",
          "America/Toronto",
          "Asia/Amman",
          "Asia/Baghdad",
          "Asia/Bangkok",
          "Asia/Beirut",
          "Asia/Dhaka",
          "Asia/Ho_Chi_Minh",
          "Asia/Hong_Kong",
          "Asia/Jakarta",
          "Asia/Jerusalem",
          "Asia/Karachi",
          "Asia/Kolkata",
          "Asia/Kuala_Lumpur",
          "Asia/Manila",
          "Asia/Riyadh",
          "Asia/Seoul",
          "Asia/Shanghai",
          "Asia/Singapore",
          "Asia/Tehran",
          "Asia/Tokyo",
          "Asia/Yangon",
          "Australia/Adelaide",
          "Australia/Eucla",
          "Australia/Perth",
          "Australia/Sydney",
          "Europe/Belgrade",
          "Europe/Berlin",
          "Europe/Istanbul",
          "Europe/London",
          "Europe/Madrid",
          "Europe/Moscow",
          "Europe/Paris",
          "Europe/Rome"
        ]
      },
      "CollectorStatus": {
        "type": "string",
        "enum": [
          "OFFLINE",
          "IDLE",
          "TESTING",
          "COLLECTING",
          "COLLECTION_QUEUED",
          "DISCOVERING",
          "UPDATING"
        ]
      },
      "Device": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name that uniquely identifies the device in the network. For most devices, this is the user-assigned\n[classic device](https://docs.fwd.app/latest/api/classic-devices/) name. For a virtual context, this is the\nclassic device name plus context name. For a cloud device, this is a globally unique identifier assigned by the\ncloud provider.",
            "examples": [
              "nyc-dc01-fw02"
            ]
          },
          "displayName": {
            "type": "string",
            "description": "The device’s common name, if different from `\"name\"`. Absent for most network devices. For a cloud device,\nthis is the name shown in the cloud provider’s console.",
            "examples": [
              "nyc-dc01-fw02"
            ]
          },
          "sourceName": {
            "type": "string",
            "description": "Name of this device’s collection source (such as a\n[classic device](https://docs.fwd.app/latest/api/classic-devices/)), if different from `\"name\"`. Absent for most\nnetwork devices. For a cloud device, this is the cloud setup ID.",
            "examples": [
              "nyc-dc01-fw02"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/DeviceType",
            "examples": [
              "FIREWALL"
            ]
          },
          "vendor": {
            "$ref": "#/components/schemas/Vendor",
            "examples": [
              "F5"
            ]
          },
          "model": {
            "type": "string",
            "description": "Absent if the device model name is unknown.",
            "examples": [
              "BIG-IP Virtual Edition"
            ]
          },
          "platform": {
            "$ref": "#/components/schemas/VendorOs",
            "examples": [
              "f5"
            ]
          },
          "osVersion": {
            "type": "string",
            "description": "Absent if the OS version is unknown.",
            "examples": [
              "11.6.1"
            ]
          },
          "managementIps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Absent if no management IP addresses are known.",
            "examples": [
              [
                "10.10.10.10"
              ]
            ]
          },
          "collectionError": {
            "$ref": "#/components/schemas/DeviceCollectionError",
            "description": "Absent if there was no collection error. \"NONE\" never occurs and will soon be removed from the\nvalue list.",
            "examples": [
              "AUTHENTICATION_FAILED"
            ]
          },
          "processingError": {
            "$ref": "#/components/schemas/DeviceProcessingError",
            "description": "Absent if there was no processing error.",
            "examples": [
              "LICENSE_EXHAUSTED"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Tags assigned to the device. Present only if specifically requested.",
            "examples": [
              [
                "SEC"
              ]
            ]
          },
          "locationId": {
            "type": "string",
            "description": "The `id` of the device’s assigned Location (see\n[Network Locations](https://docs.fwd.app/latest/api/network-locations/)). Present only if specifically requested.\nDefaults to \"default\" (the Unassigned location).",
            "examples": [
              "atl"
            ]
          }
        }
      },
      "DeviceFiles": {
        "type": "object",
        "properties": {
          "files": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceFile"
            }
          }
        }
      },
      "MissingDevices": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MissingDevice"
            }
          }
        }
      },
      "DeviceType": {
        "type": "string",
        "enum": [
          "UNKNOWN",
          "ROUTER",
          "SWITCH",
          "VSWITCH",
          "FIREWALL",
          "LOADBALANCER",
          "BUNDLED_ROUTER",
          "CIRCUIT",
          "L2_VPN_SERVICE",
          "MISSING_PEER",
          "MPLS_VPN_SERVICE",
          "INTERNET_SERVICE",
          "INTRANET_SERVICE",
          "SYNTHETIC_ENCRYPTOR",
          "HYPERVISOR",
          "CONTROLLER",
          "WAN_OPTIMIZER",
          "OPENFLOW_SWITCH",
          "SD_WAN",
          "RIVERBED_INTERCEPTOR",
          "WIFI_AP",
          "ENCRYPTOR",
          "DDI",
          "NIC",
          "AWS_CLOUD",
          "AWS_SUBNET",
          "AWS_RT",
          "AWS_INTERNET_GW",
          "AWS_NAT_GW",
          "AWS_VPN_GW",
          "AWS_LB",
          "AWS_GLOBAL_ACCELERATOR",
          "AWS_DIRECT_CONNECT_GW",
          "AWS_TRANSIT_GW",
          "AWS_LOCAL_GW",
          "AWS_NETWORK_FIREWALL",
          "AWS_GATEWAY_LB",
          "AWS_SERVICE_ENDPOINT",
          "EDGE_VM",
          "AZURE_CLOUD",
          "AZURE_SUBNET",
          "AZURE_VNET",
          "AZURE_VNET_GW",
          "AZURE_FIREWALL",
          "AZURE_APP_GW",
          "AZURE_FRONTDOOR",
          "AZURE_LB",
          "AZURE_VWAN_HUB",
          "AZURE_VPN_GATEWAY",
          "AZURE_P2S_VPN_GATEWAY",
          "AZURE_EXPRESS_ROUTE_GATEWAY",
          "AZURE_VIRTUAL_APPLIANCE",
          "AZURE_EXPRESS_ROUTE_CIRCUIT",
          "GCP_CLOUD",
          "GCP_RT",
          "GCP_SUBNET",
          "GCP_LB",
          "GCP_TRAFFIC_DIRECTOR",
          "GCP_VPN_GW",
          "GCP_NAT_GW",
          "GCP_SERVICE_ATTACHMENT",
          "ALKIRA_CLOUD"
        ]
      },
      "Vendor": {
        "type": "string",
        "enum": [
          "UNKNOWN",
          "CISCO",
          "JUNIPER",
          "ARISTA",
          "PICA8",
          "F5",
          "A10",
          "CHECKPOINT",
          "HP",
          "FORTINET",
          "PALO_ALTO_NETWORKS",
          "VMWARE",
          "CITRIX",
          "CUMULUS",
          "RIVERBED",
          "LINUX_GENERIC",
          "AMAZON",
          "SYMANTEC",
          "AVI_NETWORKS",
          "MICROSOFT",
          "GOOGLE",
          "IBM",
          "AVAYA",
          "T128",
          "ARUBA",
          "VIASAT",
          "SILVER_PEAK",
          "PENSANDO",
          "FORCEPOINT",
          "BLUECAT",
          "NOKIA",
          "VERSA",
          "BROCADE",
          "EXTREME",
          "DELL",
          "HUAWEI",
          "GD",
          "ALKIRA",
          "EDGE_CORE",
          "FORWARD_CUSTOM"
        ]
      },
      "VendorOs": {
        "type": "string",
        "enum": [
          "unknown",
          "circuit",
          "l2_vpn_service",
          "missing_peer",
          "mpls_vpn_service",
          "internet_service",
          "intranet_service",
          "encryptor",
          "alkira_portal",
          "arista_eos",
          "avi_vantage",
          "bluecoat",
          "cisco_ios",
          "cisco_ios_xe",
          "cisco_ios_xr",
          "cisco_nxos",
          "cisco_asa",
          "cisco_ftd",
          "cisco_fxos",
          "cisco_nxos_aci",
          "cisco_apic",
          "cisco_sg",
          "cisco_wireless",
          "viptela",
          "juniper_junos",
          "juniper_srx",
          "juniper_netscreen",
          "linux_ovs_ofctl",
          "pica8_ovs_ofctl",
          "f5",
          "f5_os_hypervisor",
          "a10_acos",
          "checkpoint",
          "hp_provision",
          "hp_comware",
          "fortinet",
          "pan_os",
          "esxi",
          "citrix_netscaler",
          "cumulus",
          "riverbed_steelhead",
          "riverbed_interceptor",
          "128t",
          "aruba_switch",
          "aruba_aos_cx",
          "aruba_wifi_controller",
          "silver_peak_edgeconnect",
          "pensando",
          "cloud_genix",
          "forcepoint",
          "aws_cloud",
          "aws_subnet",
          "aws_rt",
          "aws_internet_gw",
          "aws_nat_gw",
          "aws_vpn_gw",
          "aws_direct_connect_gw",
          "aws_lb",
          "aws_global_accelerator",
          "aws_transit_gw",
          "aws_local_gw",
          "aws_network_firewall",
          "aws_gateway_lb",
          "aws_service_endpoint",
          "azure_cloud",
          "azure_subnet",
          "azure_vnet",
          "azure_vnet_gw",
          "azure_firewall",
          "azure_app_gw",
          "azure_frontdoor",
          "azure_lb",
          "azure_vwan_hub",
          "azure_vpn_gateway",
          "azure_p2s_vpn_gateway",
          "azure_express_route_gateway",
          "azure_virtual_appliance",
          "azure_express_route_circuit",
          "google_cloud",
          "gcp_rt",
          "gcp_subnet",
          "gcp_lb",
          "gcp_traffic_director",
          "gcp_vpn_gw",
          "gcp_nat_gw",
          "gcp_service_attachment",
          "avaya_sr",
          "avaya_ers",
          "viasat_encryptor",
          "nokia",
          "huawei_switch",
          "versa_sase",
          "versa_switch",
          "brocade_switch",
          "cisco_encs_nfv",
          "extreme_nos",
          "meraki_ms",
          "meraki_mr",
          "meraki_mx",
          "mist_ap",
          "dell_os6",
          "dell_os9",
          "dell_os10",
          "dell_sonic",
          "gd_encryptor",
          "edge_core_sonic"
        ]
      },
      "DeviceCollectionError": {
        "type": "string",
        "enum": [
          "NONE",
          "UNKNOWN",
          "CONNECTION_TIMEOUT",
          "PROMPT_DISCOVERY_FAILED",
          "CONNECTION_REFUSED",
          "AUTHENTICATION_FAILED",
          "KEY_EXCHANGE_FAILED",
          "AUTHORIZATION_FAILED",
          "TWO_FACTOR_AUTHENTICATION_FAILED",
          "AVI_SHELL_AUTH_FAILED",
          "AVI_CONTROLLER_WITHOUT_HEALTHY_SERVICE_ENGINES",
          "T128_CONDUCTOR_WITHOUT_HEALTHY_ROUTERS",
          "T128_CONFIG_ABSENT",
          "NETWORK_UNREACHABLE",
          "IO_ERROR",
          "AUTHENTICATION_FAILED_WITHOUT_COLLECTION_RETRY",
          "SESSION_CLOSED",
          "SESSION_LIMIT_REACHED",
          "STATE_COLLECTION_FAILED",
          "PASSWORD_EXPIRED",
          "JUMP_SERVER_CONNECTION_TIMEOUT",
          "JUMP_SERVER_PASSWORD_AUTH_FAILED",
          "JUMP_SERVER_PASSWORD_EXPIRED",
          "JUMP_SERVER_CONNECTION_FAILED",
          "JUMP_SERVER_KEY_EXCHANGE_FAILED",
          "PROXY_SERVER_PING_FAILED",
          "PROXY_SERVER_PORT_REACHABILITY_FAILED",
          "PROXY_SERVER_CONNECTION_FAILED",
          "PROXY_SERVER_AUTHENTICATION_FAILED",
          "PRIV_PASSWORD_ERROR",
          "EXPERT_PASSWORD_ERROR",
          "DUPLICATE_DEVICE",
          "UNSUPPORTED_VERSION",
          "DEVICE_TYPE_UNDETECTED",
          "BMP_CONNECTION_FAILED",
          "BMP_CONNECTION_TIMEOUT",
          "BMP_COLLECTION_FAILED",
          "BMP_COLLECTION_TIMEOUT",
          "BMP_COLLECTION_REFUSED",
          "BMP_NOT_CONFIGURED",
          "BMP_CONFIGURED_WITH_LOCAL_IP",
          "BMP_SESSION_ALREADY_ESTABLISHED",
          "WARN_TYPE_MISMATCH",
          "DEVICE_IS_CHILD_CONTEXT",
          "MANAGER_COLLECTOR_NOT_FOUND",
          "INCOMPLETE_SETUP",
          "COLLECTION_NOT_FOUND",
          "INFINITE_LOOP_IN_COMMAND_OUTPUT",
          "MISSING_FILE",
          "UNSUPPORTED_VENDOR",
          "COMMAND_DISABLED",
          "APIC_CONFIG_COLLECTION_FAILED",
          "UNEXPECTED_KEY_EXCHANGE_MESSAGE",
          "UNDISCOVERED_ACI_FABRIC",
          "SLOW_READ_RATE_DETECTED",
          "TRANSIENT_SLOW_READ_RATE_DETECTED",
          "COLLECTION_TIMED_OUT",
          "COLLECTION_CANCELED",
          "OPERATION_TIMED_OUT",
          "CERTIFICATE_CHECK_FAILED",
          "DEVICE_IN_BAD_STATE",
          "API_SERVER_FAILED_TO_RESPOND",
          "PROJECT_VIEW_PERMISSION_MISSING",
          "NO_SPACE_LEFT_ON_COLLECTOR",
          "NO_SPACE_LEFT_ON_COLLECTED_DEVICE",
          "UNSUPPORTED_SSL_CONNECTION",
          "SOME_OID_FAILED",
          "TACACS_SESSION_EXPIRED",
          "CONFIG_COLLECTION_UNAUTHORIZED",
          "UNRESOLVABLE_HOSTNAME",
          "FILE_TRANSFER_FAILED"
        ]
      },
      "DeviceProcessingError": {
        "type": "string",
        "enum": [
          "LICENSE_EXHAUSTED",
          "MISSING_SIGNATURE",
          "DUPLICATE",
          "PARSER_EXCEPTION",
          "MODELING_EXCEPTION",
          "UNSUPPORTED_VENDOR",
          "UNSUPPORTED_DEVICE_TYPE"
        ]
      },
      "DeviceFile": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "configuration.txt"
            ]
          },
          "bytes": {
            "type": "integer",
            "format": "int64",
            "examples": [
              1234
            ]
          },
          "command": {
            "type": "string",
            "description": "The custom (user-defined) command that was executed to generate the file. Defined only for\ncustom_cli files.",
            "examples": [
              "net show bridge macs"
            ]
          }
        }
      },
      "MissingDevice": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "A device name different from the names of all network devices already modeled",
            "examples": [
              "nyc-dc01-rtr02"
            ]
          },
          "ipAddresses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "10.10.10.10"
              ]
            ]
          },
          "type": {
            "type": "string",
            "description": "Detected device type. Absent if undetermined. Never `\"unknown\"`.",
            "examples": [
              "cisco_ios_ssh"
            ],
            "enum": [
              "a10_acos_ssh",
              "arista_eos_ssh",
              "cisco_ios_ssh",
              "cisco_ios_xe_ssh",
              "cisco_ios_xr_ssh",
              "cisco_nxos_ssh",
              "cisco_nxos_aci_ssh",
              "juniper_junos_ssh",
              "f5_ssh",
              "fortinet_ssh",
              "hp_comware_ssh",
              "hp_provision_ssh",
              "panos_ssh",
              "esxi_ssh",
              "netscaler_ssh",
              "cisco_wireless_ap",
              "forcepoint_ssh",
              "versa_flexvnf_ssh",
              "meraki_mx_api",
              "meraki_ms_api",
              "meraki_mr_api",
              "sonic_dell_enterprise_ssh",
              "unknown"
            ]
          },
          "possibleTypes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "aruba_controller_ssh",
                "aruba_switch_ssh",
                "aruba_aos_cx_ssh",
                "128t_conductor_full",
                "128t_conductor",
                "128t_router",
                "a10_acos_ssh",
                "arista_eos_ssh",
                "avi_controller_ssh",
                "avi_controller_ssh_cli_user",
                "avi_controller_ssh_via_host",
                "avi_controller_https_api",
                "avi_controller_http_api",
                "bluecoat_ssh",
                "cisco_ios_ssh",
                "cisco_ios_telnet",
                "cisco_ios_xe_ssh",
                "cisco_ios_xe_telnet",
                "cisco_ios_xr_ssh",
                "cisco_nxos_ssh",
                "cisco_nxos_telnet",
                "cisco_asa_ssh",
                "cisco_asa_telnet",
                "cisco_asa_admin_ssh",
                "cisco_asa_child_ssh",
                "cisco_ftd_ssh",
                "cisco_fxos_ssh",
                "cisco_firewalls_on_firepower_ssh",
                "cisco_fmc_api",
                "cisco_nxos_aci_ssh",
                "cisco_apic_api",
                "cisco_ndo_api",
                "cisco_apic_only_ssh",
                "cisco_sg_ssh",
                "juniper_junos_ssh",
                "juniper_srx_ssh",
                "juniper_netscreen_ssh",
                "pica8_ovs_ofctl_ssh",
                "f5_ssh",
                "f5_os_hypervisor_ssh",
                "checkpoint_ssh",
                "checkpoint_ssh_nonexpert",
                "checkpoint_ssh_with_manager",
                "checkpoint_mgmt_api",
                "fortinet_ssh",
                "hp_comware_ssh",
                "hp_comware_telnet",
                "hp_provision_ssh",
                "huawei_switch_ssh",
                "panos_ssh",
                "esxi_ssh",
                "vcenter_api",
                "velocloud_orchestrator_api",
                "viasat_encryptor_snmp3",
                "netscaler_ssh",
                "cumulus_ssh",
                "riverbed_steelhead_ssh",
                "riverbed_interceptor_ssh",
                "cisco_ucs_ssh",
                "nsxt_api",
                "nsx_api",
                "avaya_sr_ssh",
                "avaya_sr_telnet",
                "avaya_ers_ssh",
                "avaya_ers_telnet",
                "silver_peak_edgeconnect_ssh",
                "silver_peak_orchestrator_api",
                "cisco_wireless_ap",
                "prisma_sdwan_ssh",
                "prisma_sdwan_api",
                "prisma_sdwan_unified_api",
                "pensando_api",
                "cisco_sdwan_ssh",
                "cisco_sdwan_vsmart_ssh",
                "nokia_ssh",
                "brocade_switch_ssh",
                "versa_flexvnf_ssh",
                "versa_switch_ssh",
                "cisco_encs_nfv_ssh",
                "extreme_switch_ssh",
                "meraki_mx_api",
                "meraki_ms_api",
                "meraki_mr_api",
                "mist_dashboard_api",
                "mist_ap_api",
                "dell_os6_switch_ssh",
                "dell_os6_switch_telnet",
                "dell_os9_switch_ssh",
                "dell_os9_switch_telnet",
                "dell_os10_switch_ssh",
                "dell_os10_switch_telnet",
                "sonic_dell_enterprise_ssh",
                "sonic_edge_core_ssh"
              ]
            },
            "description": "Possible device types if `type` wasn’t determined. Present if and only if `type` is absent. Never contains\n`\"unknown\"`.",
            "examples": [
              [
                "cisco_ios_ssh",
                "cisco_ios_xr_ssh"
              ]
            ]
          },
          "neighbors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The names of the modeled devices from which this device was discovered.",
            "examples": [
              [
                "nyc-dc01-tor01",
                "nyc-dc01-rtr01"
              ]
            ]
          },
          "discoveryMethod": {
            "type": "string",
            "description": "The method/protocol via which this device was discovered.",
            "examples": [
              "LLDP_CDP"
            ],
            "enum": [
              "LLDP_CDP",
              "IBGP",
              "OSPF"
            ]
          }
        }
      },
      "CliEndpointProfileDef": {
        "type": "object",
        "required": [
          "type",
          "name"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "CLI"
          },
          "name": {
            "type": "string",
            "description": "Name of this profile (\"HpPrinter\", \"SamsungTV\", etc.).",
            "examples": [
              "sentry_pdu_ssh"
            ]
          },
          "detectorCommand": {
            "type": "string",
            "description": "CLI command to run to detect a network endpoint of this type. If absent, the profile can be manually\nassigned to a network endpoint, but not auto-detected.",
            "examples": [
              "version"
            ]
          },
          "detectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Patterns matching on output of `detectorCommand` to determine whether the device is of this type. Absent if\n`detectorCommand` is absent. Never empty.",
            "examples": [
              [
                "Sentry Switched PDU"
              ]
            ]
          },
          "detectorErrorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Patterns matching an error message if a device doesn’t recognize `detectorCommand`.",
            "examples": [
              [
                "Invalid command",
                "Switched PDU commands:"
              ]
            ]
          },
          "nameDetectorCommand": {
            "type": "string",
            "description": "Command to use to detect the name of a network endpoint of this type. If absent, the name cannot be\ndetected.",
            "examples": [
              "show network"
            ]
          },
          "nameDetectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Glob patterns used to extract the device name from the output of `nameDetectorCommand`. The word immediately\nafter a matched glob pattern is the desired name. If no glob patterns are specified, the first word/token in\nthe `nameDetectorCommand` output will be used.",
            "examples": [
              [
                "FQDN:*enabled"
              ]
            ]
          },
          "prompt": {
            "type": "string",
            "description": "A case-insensitive glob pattern used to identify an interactive console menu prompt. When this pattern\nmatches the end of the prompt, ignoring any trailing whitespace, the Collector will enter the configured\n`promptResponse`.",
            "examples": [
              "y/n"
            ]
          },
          "promptResponse": {
            "type": "string",
            "description": "What the Collector should enter in response to an interactive console menu prompt matching `prompt` in order\nto proceed. Required if `prompt` is set.",
            "examples": [
              "y"
            ]
          },
          "pagePrompt": {
            "type": "string",
            "description": "Case-insensitive glob pattern used to identify a new page banner. Works like `prompt`. If the device doesn’t\ngenerate paginated command output or if paging is like the “more” command, omit this property.",
            "examples": [
              "continue\\?"
            ]
          },
          "pagePromptResponse": {
            "type": "string",
            "description": "What the Collector should enter in response to an interactive pagination prompt detected via `pagePrompt` in\norder to proceed. Required if `pagePrompt` is set.",
            "examples": [
              "c"
            ]
          },
          "ptyType": {
            "type": "string",
            "description": "Device’s terminal type (\"xterm-256color\", \"vt100\", etc.).",
            "examples": [
              "vt100"
            ]
          },
          "ptyColumnSize": {
            "type": "integer",
            "format": "int32",
            "description": "Column size of the output. Defaults to 500.",
            "examples": [
              240
            ]
          },
          "clearPrompt": {
            "type": "string",
            "description": "Command to clear the prompt. Can be specified like \"ctrl-[a-z]\" or \"ctrl+[a-z]\". Defaults to\n\"ctrl+c\".",
            "examples": [
              "ctrl+z"
            ]
          },
          "responseTimeoutSec": {
            "type": "integer",
            "format": "int32",
            "description": "Timeout in seconds applied to this profile’s CLI commands run during discovery and collection.",
            "examples": [
              15
            ]
          },
          "commandSets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommandSet"
            },
            "description": "Predefined command sets to run on network endpoints with this profile. The \"UNIX\" set includes the commands\n\"ifconfig\", \"netstat -ln\", \"hostname\", and \"uname -a\".",
            "examples": [
              [
                "UNIX"
              ]
            ]
          },
          "customCommands": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Additional commands to run on network endpoints with this profile. Commands should be\nread-only.",
            "examples": [
              [
                "uptime",
                "iptables -L"
              ]
            ]
          }
        }
      },
      "CliEndpointProfilePatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of this profile (\"HpPrinter\", \"SamsungTV\", etc.). Omit to leave this property alone.",
            "examples": [
              "sentry_pdu_ssh"
            ]
          },
          "detectorCommand": {
            "type": "string",
            "description": "CLI command to run to detect a network endpoint of this type. If absent, the profile can be manually\nassigned to a network endpoint, but not auto-detected. Use `null` to clear. Omit to leave this property\nalone.",
            "examples": [
              "version"
            ]
          },
          "detectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Patterns matching on output of `detectorCommand` to determine whether the device is of this type. Absent if\n`detectorCommand` is absent. Never empty. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              [
                "Sentry Switched PDU"
              ]
            ]
          },
          "detectorErrorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Patterns matching an error message if a device doesn’t recognize `detectorCommand`. Use `null` to clear.\nOmit to leave this property alone.",
            "examples": [
              [
                "Invalid command",
                "Switched PDU commands:"
              ]
            ]
          },
          "nameDetectorCommand": {
            "type": "string",
            "description": "Command to use to detect the name of a network endpoint of this type. If absent, the name cannot be\ndetected. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "show network"
            ]
          },
          "nameDetectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Glob patterns used to extract the device name from the output of `nameDetectorCommand`. The word immediately\nafter a matched glob pattern is the desired name. If no glob patterns are specified, the first word/token in\nthe `nameDetectorCommand` output will be used. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              [
                "FQDN:*enabled"
              ]
            ]
          },
          "prompt": {
            "type": "string",
            "description": "A case-insensitive glob pattern used to identify an interactive console menu prompt. When this pattern\nmatches the end of the prompt, ignoring any trailing whitespace, the Collector will enter the configured\n`promptResponse`. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "y/n"
            ]
          },
          "promptResponse": {
            "type": "string",
            "description": "What the Collector should enter in response to an interactive console menu prompt matching `prompt` in order\nto proceed. Required if `prompt` is set. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "y"
            ]
          },
          "pagePrompt": {
            "type": "string",
            "description": "Case-insensitive glob pattern used to identify a new page banner. Works like `prompt`. If the device doesn’t\ngenerate paginated command output or if paging is like the “more” command, omit this property. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              "continue\\?"
            ]
          },
          "pagePromptResponse": {
            "type": "string",
            "description": "What the Collector should enter in response to an interactive pagination prompt detected via `pagePrompt` in\norder to proceed. Required if `pagePrompt` is set. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "c"
            ]
          },
          "ptyType": {
            "type": "string",
            "description": "Device’s terminal type (\"xterm-256color\", \"vt100\", etc.). Use `null` to clear. Omit to leave this property\nalone.",
            "examples": [
              "vt100"
            ]
          },
          "ptyColumnSize": {
            "type": "integer",
            "format": "int32",
            "description": "Column size of the output. Defaults to 500. Use `null` to clear. Omit to leave this property\nalone.",
            "examples": [
              240
            ]
          },
          "clearPrompt": {
            "type": "string",
            "description": "Command to clear the prompt. Can be specified like \"ctrl-[a-z]\" or \"ctrl+[a-z]\". Defaults to \"ctrl+c\". Use\n`null` to clear. Omit to leave this property alone.",
            "examples": [
              "ctrl+z"
            ]
          },
          "responseTimeoutSec": {
            "type": "integer",
            "format": "int32",
            "description": "Timeout in seconds applied to this profile’s CLI commands run during discovery and collection. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              15
            ]
          },
          "commandSets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommandSet"
            },
            "description": "Predefined command sets to run on network endpoints with this profile. The \"UNIX\" set includes the commands\n\"ifconfig\", \"netstat -ln\", \"hostname\", and \"uname -a\". Use `null` to clear. Omit to leave this property\nalone.",
            "examples": [
              [
                "UNIX"
              ]
            ]
          },
          "customCommands": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Additional commands to run on network endpoints with this profile. Commands should be read-only. Use `null`\nto clear. Omit to leave this property alone.",
            "examples": [
              [
                "uptime",
                "iptables -L"
              ]
            ]
          }
        }
      },
      "CliNetworkEndpoint": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "name",
              "host"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "CLI"
              },
              "name": {
                "type": "string",
                "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
                "examples": [
                  "my-endpoint"
                ]
              },
              "host": {
                "type": "string",
                "description": "IP address or hostname used to connect to the device.",
                "examples": [
                  "10.121.7.13"
                ]
              },
              "port": {
                "type": "integer",
                "format": "int32",
                "minimum": 1,
                "maximum": 65535,
                "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
                "examples": [
                  22
                ]
              },
              "protocol": {
                "type": "string",
                "description": "The collection protocol to use. Defaults to SSH.",
                "examples": [
                  "SSH"
                ],
                "enum": [
                  "SSH",
                  "TELNET"
                ]
              },
              "profileId": {
                "type": "string",
                "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified.",
                "examples": [
                  "CLI-7"
                ]
              },
              "credentialId": {
                "type": "string",
                "description": "The `id` of a CliCredential of type `LOGIN`. Credential auto-association will be attempted using credentials\nconfigured to allow it if this property is unspecified and collecting from this endpoint requires this kind\nof credential.",
                "examples": [
                  "L-3"
                ]
              },
              "jumpServerId": {
                "type": "string",
                "description": "The `id` of the JumpServer that should be used to collect from this device.",
                "examples": [
                  "J-0"
                ]
              },
              "fullCollectionLog": {
                "type": "boolean",
                "description": "Enables more detailed logging during collection. Defaults to false.",
                "examples": [
                  false
                ]
              },
              "largeRtt": {
                "type": "boolean",
                "description": "Whether the device has a large round-trip time (requires a longer response timeout).",
                "examples": [
                  false
                ]
              },
              "collect": {
                "type": "boolean",
                "description": "Whether to collect from this network endpoint. Defaults to true.",
                "examples": [
                  true
                ]
              },
              "note": {
                "type": "string",
                "description": "An optional description or note about this network endpoint.",
                "examples": [
                  "Yada yada yada"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "CliNetworkEndpointPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores. Omit to leave this property alone.",
            "examples": [
              "my-endpoint"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device. Omit to leave this property alone.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              22
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              "CLI-7"
            ]
          },
          "protocol": {
            "type": "string",
            "description": "The collection protocol to use. Defaults to SSH. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              "SSH"
            ],
            "enum": [
              "SSH",
              "TELNET"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `LOGIN`. Credential auto-association will be attempted using credentials\nconfigured to allow it if this property is unspecified and collecting from this endpoint requires this kind\nof credential. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "L-3"
            ]
          },
          "jumpServerId": {
            "type": "string",
            "description": "The `id` of the JumpServer that should be used to collect from this device. Use `null` to clear. Omit to\nleave this property alone.",
            "examples": [
              "J-0"
            ]
          },
          "fullCollectionLog": {
            "type": "boolean",
            "description": "Enables more detailed logging during collection. Defaults to false. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              true
            ]
          },
          "largeRtt": {
            "type": "boolean",
            "description": "Whether the device has a large round-trip time (requires a longer response timeout). Use `null` to clear.\nOmit to leave this property alone.",
            "examples": [
              false
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "EndpointProfile": {
        "allOf": [
          {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CliEndpointProfile"
              },
              {
                "$ref": "#/components/schemas/SnmpEndpointProfile"
              },
              {
                "$ref": "#/components/schemas/HttpEndpointProfile"
              }
            ],
            "discriminator": {
              "propertyName": "type",
              "mapping": {
                "CLI": "#/components/schemas/CliEndpointProfile",
                "SNMP": "#/components/schemas/SnmpEndpointProfile",
                "HTTP": "#/components/schemas/HttpEndpointProfile"
              }
            }
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "EndpointProfiles": {
        "type": "object",
        "required": [
          "profiles"
        ],
        "properties": {
          "profiles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EndpointProfile"
            }
          }
        }
      },
      "HttpEndpointProfileDef": {
        "type": "object",
        "required": [
          "type",
          "name",
          "https",
          "authType",
          "endpoints"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "HTTP"
          },
          "name": {
            "type": "string",
            "description": "Name of this profile (\"HpPrinter\", \"SamsungTV\", etc.)",
            "examples": [
              "nsxt_https"
            ]
          },
          "https": {
            "type": "boolean",
            "description": "Whether to use HTTPS to connect rather than HTTP.",
            "examples": [
              true
            ]
          },
          "authType": {
            "$ref": "#/components/schemas/HttpAuthStrategy",
            "description": "The type of HTTP authentication that devices of this type require for API requests.",
            "examples": [
              "BASIC_AUTH"
            ]
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "HTTP headers to send in API requests to devices of this type. These headers should not contain sensitive\ndata. Authentication should be handled separately if required using credentials assigned or discovered on a\nper-device basis. Use `authType` to specify what type of HTTP authentication this device type requires.",
            "examples": [
              {
                "accept": "application/json"
              }
            ]
          },
          "detectorUri": {
            "type": "string",
            "description": "HTTP GET URI (path and optional query string) used to detect whether a device of unknown type is this kind\nof network endpoint. If absent, the profile can be manually assigned to a network endpoint, but not\nauto-detected.",
            "examples": [
              "/login.jsp"
            ]
          },
          "detectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Case-insensitive glob patterns used on the response of a request to `detectorUri` to determine whether a\ndevice of unknown type is of this type. Absent if `detectorUri` is absent. Never empty.",
            "examples": [
              [
                "VMware NSX"
              ]
            ]
          },
          "endpoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HttpEndpoint"
            },
            "description": "HTTP GET endpoints to collect from network endpoints with this profile. Never empty.",
            "examples": [
              [
                {
                  "name": "compute_managers",
                  "path": "/api/v1/fabric/compute-managers"
                },
                {
                  "name": "logical_router_ports",
                  "path": "/api/v1/logical-router-ports",
                  "paginationModel": {
                    "type": "OFFSET",
                    "itemsArrayField": "ports",
                    "parameterName": "page",
                    "offsetIncrementExpression": {
                      "operator": "PLUS_ONE"
                    }
                  }
                }
              ]
            ]
          }
        }
      },
      "HttpEndpointProfilePatch": {
        "type": "object",
        "properties": {
          "authType": {
            "$ref": "#/components/schemas/HttpAuthStrategy",
            "description": "The type of HTTP authentication that devices of this type require for API requests. Omit to leave this\nproperty alone.",
            "examples": [
              "BASIC_AUTH"
            ]
          },
          "detectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Case-insensitive glob patterns used on the response of a request to `detectorUri` to determine whether a\ndevice of unknown type is of this type. Absent if `detectorUri` is absent. Never empty. Use `null` to clear.\nOmit to leave this property alone.",
            "examples": [
              [
                "VMware NSX"
              ]
            ]
          },
          "detectorUri": {
            "type": "string",
            "description": "HTTP GET URI (path and optional query string) used to detect whether a device of unknown type is this kind\nof network endpoint. If absent, the profile can be manually assigned to a network endpoint, but not\nauto-detected. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "/login.jsp"
            ]
          },
          "endpoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HttpEndpoint"
            },
            "description": "HTTP GET endpoints to collect from network endpoints with this profile. Never empty. Omit to leave this\nproperty alone.",
            "examples": [
              [
                {
                  "name": "compute_managers",
                  "path": "/api/v1/fabric/compute-managers"
                },
                {
                  "name": "logical_router_ports",
                  "path": "/api/v1/logical-router-ports",
                  "paginationModel": {
                    "type": "OFFSET",
                    "itemsArrayField": "ports",
                    "parameterName": "page",
                    "offsetIncrementExpression": {
                      "operator": "PLUS_ONE"
                    }
                  }
                }
              ]
            ]
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "HTTP headers to send in API requests to devices of this type. These headers should not contain sensitive\ndata. Authentication should be handled separately if required using credentials assigned or discovered on a\nper-device basis. Use `authType` to specify what type of HTTP authentication this device type requires. Use\n`null` to clear. Omit to leave this property alone.",
            "examples": [
              {
                "accept": "application/json"
              }
            ]
          },
          "https": {
            "type": "boolean",
            "description": "Whether to use HTTPS to connect rather than HTTP. Omit to leave this property alone.",
            "examples": [
              true
            ]
          },
          "name": {
            "type": "string",
            "description": "Name of this profile (\"HpPrinter\", \"SamsungTV\", etc.) Omit to leave this property alone.",
            "examples": [
              "nsxt_https"
            ]
          }
        }
      },
      "HttpNetworkEndpoint": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "name",
              "host"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "HTTP"
              },
              "name": {
                "type": "string",
                "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
                "examples": [
                  "my-endpoint"
                ]
              },
              "host": {
                "type": "string",
                "description": "IP address or hostname used to connect to the device.",
                "examples": [
                  "10.121.7.13"
                ]
              },
              "port": {
                "type": "integer",
                "format": "int32",
                "minimum": 1,
                "maximum": 65535,
                "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
                "examples": [
                  22
                ]
              },
              "profileId": {
                "type": "string",
                "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified.",
                "examples": [
                  "HTTP-4"
                ]
              },
              "credentialId": {
                "type": "string",
                "description": "The `id` of an HttpCredential. The type of the credential must match the HttpAuthStrategy of the endpoint’s\nassigned or discovered profile (see `authType` in HttpEndpointProfileDef). Credential auto-association will\nbe attempted using credentials configured to allow it if this property is unspecified and collecting from\nthis endpoint requires this kind of credential.",
                "examples": [
                  "H-5"
                ]
              },
              "disableSslValidation": {
                "type": "boolean",
                "description": "Whether to skip TLS validation. Can be useful for an endpoint whose certificate isn’t trusted. Not\nrecommended. Defaults to false.",
                "examples": [
                  false
                ]
              },
              "collect": {
                "type": "boolean",
                "description": "Whether to collect from this network endpoint. Defaults to true.",
                "examples": [
                  true
                ]
              },
              "note": {
                "type": "string",
                "description": "An optional description or note about this network endpoint.",
                "examples": [
                  "Yada yada yada"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "HttpNetworkEndpointPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores. Omit to leave this property alone.",
            "examples": [
              "my-endpoint"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device. Omit to leave this property alone.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              22
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              "HTTP-4"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of an HttpCredential. The type of the credential must match the HttpAuthStrategy of the endpoint’s\nassigned or discovered profile (see `authType` in HttpEndpointProfileDef). Credential auto-association will\nbe attempted using credentials configured to allow it if this property is unspecified and collecting from\nthis endpoint requires this kind of credential. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "H-5"
            ]
          },
          "disableSslValidation": {
            "type": "boolean",
            "description": "Whether to skip TLS validation. Can be useful for an endpoint whose certificate isn’t trusted. Not\nrecommended. Defaults to false. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              false
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "NetworkEndpoint": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "CLI",
              "SNMP",
              "HTTP"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Tags assigned to the endpoint. Present only if specifically requested."
          },
          "locationId": {
            "type": "string",
            "description": "The `id` of the endpoint’s assigned Location (see\n[Network Locations](https://docs.fwd.app/latest/api/network-locations/)). Present only if specifically requested.\nDefaults to \"default\" (the Unassigned location).",
            "examples": [
              "atl"
            ]
          },
          "testResult": {
            "$ref": "#/components/schemas/SourceConnectivityResult",
            "description": "The endpoint’s most recent connectivity test result. Present only if specifically requested. Absent if the\nendpoint’s connectivity hasn’t been tested since the last substantial edit to the endpoint."
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CliNetworkEndpoint"
          },
          {
            "$ref": "#/components/schemas/SnmpNetworkEndpoint"
          },
          {
            "$ref": "#/components/schemas/HttpNetworkEndpoint"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "CLI": "#/components/schemas/CliNetworkEndpoint",
            "SNMP": "#/components/schemas/SnmpNetworkEndpoint",
            "HTTP": "#/components/schemas/HttpNetworkEndpoint"
          }
        }
      },
      "NetworkEndpoints": {
        "type": "object",
        "required": [
          "endpoints"
        ],
        "properties": {
          "endpoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkEndpoint"
            }
          }
        }
      },
      "NetworkEndpointsPatchRequest": {
        "type": "object",
        "required": [
          "names",
          "update"
        ],
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The names of the endpoints to update",
            "examples": [
              [
                "my-endpoint-01",
                "my-endpoint-02"
              ]
            ]
          },
          "update": {
            "$ref": "#/components/schemas/NetworkEndpointsPatch",
            "description": "The property updates to apply to the specified endpoints",
            "examples": [
              {
                "collect": true,
                "note": null
              }
            ]
          }
        }
      },
      "NewCliNetworkEndpoint": {
        "type": "object",
        "required": [
          "type",
          "name",
          "host"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "CLI"
          },
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
            "examples": [
              "my-endpoint"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
            "examples": [
              22
            ]
          },
          "protocol": {
            "type": "string",
            "description": "The collection protocol to use. Defaults to SSH.",
            "examples": [
              "SSH"
            ],
            "enum": [
              "SSH",
              "TELNET"
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified.",
            "examples": [
              "CLI-7"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `LOGIN`. Credential auto-association will be attempted using credentials\nconfigured to allow it if this property is unspecified and collecting from this endpoint requires this kind\nof credential.",
            "examples": [
              "L-3"
            ]
          },
          "jumpServerId": {
            "type": "string",
            "description": "The `id` of the JumpServer that should be used to collect from this device.",
            "examples": [
              "J-0"
            ]
          },
          "fullCollectionLog": {
            "type": "boolean",
            "description": "Enables more detailed logging during collection. Defaults to false.",
            "examples": [
              false
            ]
          },
          "largeRtt": {
            "type": "boolean",
            "description": "Whether the device has a large round-trip time (requires a longer response timeout).",
            "examples": [
              false
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "NewHttpNetworkEndpoint": {
        "type": "object",
        "required": [
          "type",
          "name",
          "host"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "HTTP"
          },
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
            "examples": [
              "my-endpoint"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
            "examples": [
              22
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified.",
            "examples": [
              "HTTP-4"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of an HttpCredential. The type of the credential must match the HttpAuthStrategy of the endpoint’s\nassigned or discovered profile (see `authType` in HttpEndpointProfileDef). Credential auto-association will\nbe attempted using credentials configured to allow it if this property is unspecified and collecting from\nthis endpoint requires this kind of credential.",
            "examples": [
              "H-5"
            ]
          },
          "disableSslValidation": {
            "type": "boolean",
            "description": "Whether to skip TLS validation. Can be useful for an endpoint whose certificate isn’t trusted. Not\nrecommended. Defaults to false.",
            "examples": [
              false
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "NewSnmpNetworkEndpoint": {
        "type": "object",
        "required": [
          "type",
          "name",
          "host"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "SNMP"
          },
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
            "examples": [
              "my-endpoint"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
            "examples": [
              22
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified.",
            "examples": [
              "SNMP-5"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of an SnmpCredential. Credential auto-association will be attempted using credentials configured to\nallow it if this property is unspecified and collecting from this endpoint requires this kind of credential.",
            "examples": [
              "S-1"
            ]
          },
          "fullCollectionLog": {
            "type": "boolean",
            "description": "Enables more detailed logging during collection. Defaults to false.",
            "examples": [
              false
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "SnmpEndpointProfileDef": {
        "type": "object",
        "required": [
          "type",
          "name"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "SNMP"
          },
          "name": {
            "type": "string",
            "description": "Name of this profile (\"HpPrinter\", \"SamsungTV\", etc.).",
            "examples": [
              "esxi_snmp"
            ]
          },
          "detectorOid": {
            "type": "string",
            "description": "OID to collect to detect a network endpoint of this type. If absent, the profile can be manually assigned to\na network endpoint, but not auto-detected.",
            "examples": [
              "1.3.6.1.2.1.1.1.0"
            ]
          },
          "detectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Patterns matching on output of `detectorOid` to determine whether the device is of this type. Absent if\n`detectorOid` is absent. Never empty.",
            "examples": [
              [
                "ESXi"
              ]
            ]
          },
          "nameDetectorOid": {
            "type": "string",
            "description": "OID to collect to detect the name of a network endpoint of this type. If absent, the name cannot be\ndetected.",
            "examples": [
              "1.3.6.1.2.1.1.5"
            ]
          },
          "nameDetectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Glob patterns used to extract the device name from the collected value for `nameDetectorOid`. The word\nimmediately after a matched glob pattern is the desired name. If no glob patterns are specified, the first\nword/token in the `nameDetectorOid` value will be used.",
            "examples": [
              [
                "FQDN:*enabled"
              ]
            ]
          },
          "responseTimeoutSec": {
            "type": "integer",
            "format": "int32",
            "description": "Timeout in seconds for retrieving the value of one of this profile’s OIDs during discovery or collection.\nDefaults to 5.",
            "examples": [
              10
            ]
          },
          "oidSets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OidSet"
            },
            "description": "Predefined OID sets to collect from network endpoints with this profile. The \"STANDARD\" set includes OIDs\nfor system name, system description, TCP info, UDP info, host address, and interface info.",
            "examples": [
              [
                "STANDARD"
              ]
            ]
          },
          "customOids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomOid"
            },
            "description": "Additional OIDs to collect from network endpoints with this profile. The output of each OID is saved to a\nfile with the associated name.",
            "examples": [
              [
                {
                  "name": "system_desc",
                  "oid": "1.3.6.1.2.1.1.1"
                },
                {
                  "name": "hostname",
                  "oid": "1.3.6.1.2.1.1.5"
                }
              ]
            ]
          }
        }
      },
      "SnmpEndpointProfilePatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of this profile (\"HpPrinter\", \"SamsungTV\", etc.). Omit to leave this property alone.",
            "examples": [
              "esxi_snmp"
            ]
          },
          "detectorOid": {
            "type": "string",
            "description": "OID to collect to detect a network endpoint of this type. If absent, the profile can be manually assigned to\na network endpoint, but not auto-detected. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "1.3.6.1.2.1.1.1.0"
            ]
          },
          "detectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Patterns matching on output of `detectorOid` to determine whether the device is of this type. Absent if\n`detectorOid` is absent. Never empty. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              [
                "ESXi"
              ]
            ]
          },
          "nameDetectorOid": {
            "type": "string",
            "description": "OID to collect to detect the name of a network endpoint of this type. If absent, the name cannot be\ndetected. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "1.3.6.1.2.1.1.5"
            ]
          },
          "nameDetectorPatterns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Glob patterns used to extract the device name from the collected value for `nameDetectorOid`. The word\nimmediately after a matched glob pattern is the desired name. If no glob patterns are specified, the first\nword/token in the `nameDetectorOid` value will be used. Use `null` to clear. Omit to leave this property\nalone.",
            "examples": [
              [
                "FQDN:*enabled"
              ]
            ]
          },
          "responseTimeoutSec": {
            "type": "integer",
            "format": "int32",
            "description": "Timeout in seconds for retrieving the value of one of this profile’s OIDs during discovery or collection.\nDefaults to 5. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              10
            ]
          },
          "oidSets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OidSet"
            },
            "description": "Predefined OID sets to collect from network endpoints with this profile. The \"STANDARD\" set includes OIDs\nfor system name, system description, TCP info, UDP info, host address, and interface info. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              [
                "STANDARD"
              ]
            ]
          },
          "customOids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomOid"
            },
            "description": "Additional OIDs to collect from network endpoints with this profile. The output of each OID is saved to a\nfile with the associated name. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              [
                {
                  "name": "system_desc",
                  "oid": "1.3.6.1.2.1.1.1"
                },
                {
                  "name": "hostname",
                  "oid": "1.3.6.1.2.1.1.5"
                }
              ]
            ]
          }
        }
      },
      "SnmpNetworkEndpoint": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "type",
              "name",
              "host"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "SNMP"
              },
              "name": {
                "type": "string",
                "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores.",
                "examples": [
                  "my-endpoint"
                ]
              },
              "host": {
                "type": "string",
                "description": "IP address or hostname used to connect to the device.",
                "examples": [
                  "10.121.7.13"
                ]
              },
              "port": {
                "type": "integer",
                "format": "int32",
                "minimum": 1,
                "maximum": 65535,
                "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc.",
                "examples": [
                  22
                ]
              },
              "profileId": {
                "type": "string",
                "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified.",
                "examples": [
                  "SNMP-5"
                ]
              },
              "credentialId": {
                "type": "string",
                "description": "The `id` of an SnmpCredential. Credential auto-association will be attempted using credentials configured to\nallow it if this property is unspecified and collecting from this endpoint requires this kind of credential.",
                "examples": [
                  "S-1"
                ]
              },
              "fullCollectionLog": {
                "type": "boolean",
                "description": "Enables more detailed logging during collection. Defaults to false.",
                "examples": [
                  false
                ]
              },
              "collect": {
                "type": "boolean",
                "description": "Whether to collect from this network endpoint. Defaults to true.",
                "examples": [
                  true
                ]
              },
              "note": {
                "type": "string",
                "description": "An optional description or note about this network endpoint.",
                "examples": [
                  "Yada yada yada"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/Attribution"
          }
        ]
      },
      "SnmpNetworkEndpointPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "A name that’s unique (ignoring case) among all of the network’s collection source names. May consist of\nletters, digits, dots, hyphens, and underscores. Omit to leave this property alone.",
            "examples": [
              "my-endpoint"
            ]
          },
          "host": {
            "type": "string",
            "description": "IP address or hostname used to connect to the device. Omit to leave this property alone.",
            "examples": [
              "10.121.7.13"
            ]
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 65535,
            "description": "Port used to connect to the device. The default value depends on the collection protocol: 22 for SSH, 443\nfor HTTPS, etc. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              22
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              "SNMP-5"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of an SnmpCredential. Credential auto-association will be attempted using credentials configured to\nallow it if this property is unspecified and collecting from this endpoint requires this kind of credential.\nUse `null` to clear. Omit to leave this property alone.",
            "examples": [
              "S-1"
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "CliEndpointProfile": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "System-assigned identifier of this endpoint profile. Always begins with \"CLI-\".",
                "examples": [
                  "CLI-7"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/CliEndpointProfileDef"
          }
        ]
      },
      "SnmpEndpointProfile": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "System-assigned identifier of this endpoint profile. Always begins with \"SNMP-\".",
                "examples": [
                  "SNMP-5"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/SnmpEndpointProfileDef"
          }
        ]
      },
      "HttpEndpointProfile": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "System-assigned identifier of this endpoint profile. Always begins with \"HTTP-\".",
                "examples": [
                  "HTTP-4"
                ]
              }
            }
          },
          {
            "$ref": "#/components/schemas/HttpEndpointProfileDef"
          }
        ]
      },
      "CommandSet": {
        "type": "string",
        "const": "UNIX"
      },
      "OidSet": {
        "type": "string",
        "const": "STANDARD"
      },
      "CustomOid": {
        "type": "object",
        "required": [
          "name",
          "oid"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "A concise name for the OID’s value. Used in the name of the file the Collector creates when it retrieves the\nOID’s value from a device. Can contain only letters, digits, underscores, and hyphens.",
            "examples": [
              "system_desc"
            ]
          },
          "oid": {
            "type": "string",
            "description": "A numeric object identifier (OID) from the Management Information Base (MIB) for the Simple Network\nManagement Protocol (SNMP).",
            "examples": [
              "1.3.6.1.2.1.1.1"
            ]
          }
        }
      },
      "HttpAuthStrategy": {
        "type": "string",
        "enum": [
          "NONE",
          "BASIC_AUTH"
        ]
      },
      "OffsetBasedPagination": {
        "type": "object",
        "required": [
          "type",
          "itemsArrayField",
          "parameterName",
          "offsetIncrementExpression"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "OFFSET"
          },
          "itemsArrayField": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\npaginated data array.",
            "examples": [
              [
                "items"
              ]
            ]
          },
          "parameterName": {
            "type": "string",
            "description": "The name of the URL query parameter to populate with the offset value that increases with each\nrequest.",
            "examples": [
              "skip"
            ]
          },
          "offsetIncrementExpression": {
            "$ref": "#/components/schemas/OffsetIncrementExpression",
            "description": "What to add to the previous request’s offset value to get the next request’s offset value. The first\nrequest’s offset value is always zero.",
            "examples": [
              {
                "operator": "LENGTH",
                "path": [
                  "items"
                ]
              }
            ]
          },
          "maxPages": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum number of pages to collect. Defaults to 1000.",
            "examples": [
              100
            ]
          }
        }
      },
      "UrlCursorBasedPagination": {
        "type": "object",
        "required": [
          "type",
          "itemsArrayField",
          "urlField"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "URL_CURSOR"
          },
          "itemsArrayField": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\npaginated data array.",
            "examples": [
              [
                "items"
              ]
            ]
          },
          "urlField": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\nnext page’s URL.",
            "examples": [
              [
                "pagingInfo",
                "nextPageUrl"
              ]
            ]
          },
          "maxPages": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum number of pages to collect. Defaults to 1000.",
            "examples": [
              100
            ]
          }
        }
      },
      "ParameterCursorBasedPagination": {
        "type": "object",
        "required": [
          "type",
          "itemsArrayField",
          "parameterName",
          "parameterField"
        ],
        "properties": {
          "type": {
            "type": "string",
            "const": "PARAMETER_CURSOR"
          },
          "itemsArrayField": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\npaginated data array.",
            "examples": [
              [
                "items"
              ]
            ]
          },
          "parameterName": {
            "type": "string",
            "description": "The name of the URL query parameter to populate with the cursor value from the previous\nresponse.",
            "examples": [
              "pagingCursor"
            ]
          },
          "parameterField": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\nnext page’s cursor value.",
            "examples": [
              [
                "pagingInfo",
                "nextPageCursor"
              ]
            ]
          },
          "maxPages": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum number of pages to collect. Defaults to 1000.",
            "examples": [
              100
            ]
          }
        }
      },
      "OffsetIncrementExpression": {
        "type": "object",
        "required": [
          "operator"
        ],
        "properties": {
          "operator": {
            "type": "string",
            "description": "\"IDENTITY\" means to add the number at `path` in the previous request’s response to the previous request’s\noffset value. \"LENGTH\" means to add the length of the array at `path` in the previous request’s response to\nthe previous request’s offset value. \"PLUS_ONE\" means to simply add one to the previous request’s offset\nvalue.",
            "examples": [
              "LENGTH"
            ],
            "enum": [
              "IDENTITY",
              "LENGTH",
              "PLUS_ONE"
            ]
          },
          "path": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\nvalue or array needed to calculate the next offset value. Required if `operator` is \"IDENTITY\" or \"LENGTH\";\nabsent otherwise.",
            "examples": [
              [
                "items"
              ]
            ]
          }
        }
      },
      "PaginationModel": {
        "type": "object",
        "required": [
          "type",
          "itemsArrayField"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "OFFSET",
              "URL_CURSOR",
              "PARAMETER_CURSOR"
            ]
          },
          "itemsArrayField": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "JSON property name(s) that must be accessed, starting from the top level of the HTTP response, to reach the\npaginated data array.",
            "examples": [
              [
                "items"
              ]
            ]
          },
          "maxPages": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum number of pages to collect. Defaults to 1000.",
            "examples": [
              100
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/OffsetBasedPagination"
          },
          {
            "$ref": "#/components/schemas/UrlCursorBasedPagination"
          },
          {
            "$ref": "#/components/schemas/ParameterCursorBasedPagination"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "OFFSET": "#/components/schemas/OffsetBasedPagination",
            "URL_CURSOR": "#/components/schemas/UrlCursorBasedPagination",
            "PARAMETER_CURSOR": "#/components/schemas/ParameterCursorBasedPagination"
          }
        }
      },
      "HttpEndpoint": {
        "type": "object",
        "required": [
          "name",
          "path"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "A concise name for this HTTP endpoint. Used in the name of the file(s) the Collector creates to store the\nresponse(s) it receives from a device. Can contain only letters, digits, underscores, hyphens, and dots.",
            "examples": [
              "compute_managers"
            ]
          },
          "path": {
            "type": "string",
            "description": "The URL path for this HTTP endpoint. Must start with \"/\". May include a query string.",
            "examples": [
              "/api/v1/fabric/compute-managers"
            ]
          },
          "paginationModel": {
            "$ref": "#/components/schemas/PaginationModel",
            "description": "Instructions for fetching this HTTP endpoint’s dataset in parts (pages) using a sequence of requests. Can\nonly be used if this endpoint’s response format is JSON. Absent if this endpoint doesn’t require pagination.",
            "examples": [
              {
                "type": "OFFSET",
                "itemsArrayField": [
                  "managers"
                ],
                "parameterName": "page",
                "offsetIncrementExpression": {
                  "operator": "PLUS_ONE"
                }
              }
            ]
          }
        }
      },
      "ConnectionType": {
        "type": "string",
        "enum": [
          "CLI",
          "SNMP",
          "HTTP"
        ]
      },
      "Protocol": {
        "type": "string",
        "enum": [
          "HTTP",
          "HTTPS",
          "SSH",
          "TELNET",
          "SNMP"
        ]
      },
      "NetworkEndpointsPatch": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/ConnectionType",
            "description": "The desired connection type for the specified network endpoints. Omit to leave this property\nalone.",
            "examples": [
              "CLI"
            ]
          },
          "profileId": {
            "type": "string",
            "description": "ID of the endpoint profile to use. Auto-detected during connectivity testing if unspecified. Use `null` to\nclear. Omit to leave this property alone.",
            "examples": [
              "CLI-7"
            ]
          },
          "protocol": {
            "$ref": "#/components/schemas/Protocol",
            "description": "The collection protocol to use. Defaults to SSH. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              "SSH"
            ]
          },
          "credentialId": {
            "type": "string",
            "description": "The `id` of a CliCredential of type `LOGIN`. Credential auto-association will be attempted using credentials\nconfigured to allow it if this property is unspecified and collecting from this endpoint requires this kind\nof credential. Use `null` to clear. Omit to leave this property alone.",
            "examples": [
              "L-3"
            ]
          },
          "jumpServerId": {
            "type": "string",
            "description": "The `id` of the JumpServer that should be used to collect from this device. Use `null` to clear. Omit to\nleave this property alone.",
            "examples": [
              "J-0"
            ]
          },
          "collect": {
            "type": "boolean",
            "description": "Whether to collect from this network endpoint. Defaults to true. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              true
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional description or note about this network endpoint. Use `null` to clear. Omit to leave this\nproperty alone.",
            "examples": [
              "Yada yada yada"
            ]
          }
        }
      },
      "DeviceCluster": {
        "type": "object",
        "required": [
          "name",
          "devices"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "atl-edge"
            ]
          },
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "atl-edge-fw01",
                "atl-edge-fw02",
                "atl-isp-edge01",
                "atl-isp-edge02"
              ]
            ]
          }
        }
      },
      "DeviceClusterUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "atl-edge"
            ]
          },
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "atl-edge-fw01",
                "atl-edge-fw02",
                "atl-isp-edge01",
                "atl-isp-edge02"
              ]
            ]
          }
        }
      },
      "Location": {
        "type": "object",
        "required": [
          "id",
          "name",
          "lat",
          "lng"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "dyt-a"
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Dayton DC"
            ]
          },
          "lat": {
            "type": "number",
            "format": "double",
            "description": "A latitude (geographic coordinate), specified as an angle from -90 to +90 degrees",
            "examples": [
              39.8113
            ]
          },
          "lng": {
            "type": "number",
            "format": "double",
            "description": "A longitude (geographic coordinate), specified as an angle from -180 to +180 degrees",
            "examples": [
              -84.2722
            ]
          },
          "city": {
            "type": "string",
            "description": "Name of the closest city (for display purposes only). Required if `adminDivision` or `country`\nis specified.",
            "examples": [
              "Dayton"
            ]
          },
          "adminDivision": {
            "type": "string",
            "description": "Name of the administrative division (district, province, region, state, territory, etc.) that `city` is in\n(for display purposes only)",
            "examples": [
              "Ohio"
            ]
          },
          "country": {
            "type": "string",
            "description": "Name of the country that `city` is located in (for display purposes only). Required if `city`\nis specified.",
            "examples": [
              "United States"
            ]
          }
        }
      },
      "LocationBulkPatch": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identifier of the location to update. Required if `name` is absent.",
            "examples": [
              "dyt-a"
            ]
          },
          "name": {
            "type": "string",
            "description": "Name of the location to update or create. Required if `id` is absent.",
            "examples": [
              "Dayton DC"
            ]
          },
          "lat": {
            "type": "number",
            "format": "double",
            "description": "A latitude (geographic coordinate), specified as an angle from -90 to +90 degrees",
            "examples": [
              39.8113
            ]
          },
          "lng": {
            "type": "number",
            "format": "double",
            "description": "A longitude (geographic coordinate), specified as an angle from -180 to +180 degrees",
            "examples": [
              -84.2722
            ]
          },
          "city": {
            "type": "string",
            "description": "Name of the closest city (for display purposes only)",
            "examples": [
              "Dayton"
            ]
          },
          "adminDivision": {
            "type": "string",
            "description": "Name of the administrative division (district, province, region, state, territory, etc.) that `city` is in\n(for display purposes only)",
            "examples": [
              "Ohio"
            ]
          },
          "country": {
            "type": "string",
            "description": "Name of the country that `city` is located in (for display purposes only)",
            "examples": [
              "United States"
            ]
          }
        }
      },
      "LocationPatch": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "dyt-a"
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Dayton DC"
            ]
          },
          "lat": {
            "type": "number",
            "format": "double",
            "description": "A latitude (geographic coordinate), specified as an angle from -90 to +90 degrees",
            "examples": [
              39.8113
            ]
          },
          "lng": {
            "type": "number",
            "format": "double",
            "description": "A longitude (geographic coordinate), specified as an angle from -180 to +180 degrees",
            "examples": [
              -84.2722
            ]
          },
          "city": {
            "type": "string",
            "description": "Name of the closest city (for display purposes only)",
            "examples": [
              "Dayton"
            ]
          },
          "adminDivision": {
            "type": "string",
            "description": "Name of the administrative division (district, province, region, state, territory, etc.) that `city` is in\n(for display purposes only)",
            "examples": [
              "Ohio"
            ]
          },
          "country": {
            "type": "string",
            "description": "Name of the country that `city` is located in (for display purposes only)",
            "examples": [
              "United States"
            ]
          }
        }
      },
      "NewLocation": {
        "type": "object",
        "required": [
          "name",
          "lat",
          "lng"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "If absent or null, a numeric identifier will be assigned",
            "examples": [
              "dyt-a"
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Dayton DC"
            ]
          },
          "lat": {
            "type": "number",
            "format": "double",
            "description": "A latitude (geographic coordinate), specified as an angle from -90 to +90 degrees",
            "examples": [
              39.8113
            ]
          },
          "lng": {
            "type": "number",
            "format": "double",
            "description": "A longitude (geographic coordinate), specified as an angle from -180 to +180 degrees",
            "examples": [
              -84.2722
            ]
          },
          "city": {
            "type": "string",
            "description": "Name of the closest city (for display purposes only). Required if `adminDivision` or `country`\nis specified.",
            "examples": [
              "Dayton"
            ]
          },
          "adminDivision": {
            "type": "string",
            "description": "Name of the administrative division (district, province, region, state, territory, etc.) that `city` is in\n(for display purposes only)",
            "examples": [
              "Ohio"
            ]
          },
          "country": {
            "type": "string",
            "description": "Name of the country that `city` is located in (for display purposes only). Required if `city`\nis specified.",
            "examples": [
              "United States"
            ]
          }
        }
      },
      "NetworkSnapshots": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Network"
          },
          {
            "type": "object",
            "required": [
              "snapshots"
            ],
            "properties": {
              "snapshots": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SnapshotInfo"
                }
              }
            }
          }
        ]
      },
      "SnapshotExportParams": {
        "type": "object",
        "properties": {
          "includeDevices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Must be absent if `\"excludeDevices\"` is specified.",
            "examples": [
              [
                "device-1",
                "device-2",
                "pa*"
              ]
            ]
          },
          "excludeDevices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Must be absent if `\"includeDevices\"` is specified.",
            "examples": [
              [
                "device-6",
                "device-7",
                "pa*"
              ]
            ]
          },
          "obfuscationKey": {
            "type": "string",
            "description": "If specified, sensitive data will be\n[obfuscated](https://docs.fwd.app/latest/application/settings/system/obfuscate-snapshot/).",
            "examples": [
              "a-sEcr3t-kEy-th4t-i$-h4rd-to-guE$$"
            ]
          },
          "obfuscateNames": {
            "type": "boolean",
            "description": "default: `false`. If specified, `\"obfuscationKey\"` must also be specified.",
            "examples": [
              false
            ]
          }
        }
      },
      "SnapshotInfo": {
        "type": "object",
        "properties": {
          "createdAt": {
            "type": "string",
            "examples": [
              "2019-09-20T17:40:34.567Z"
            ]
          },
          "creationDateMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `createdAt` instead.",
            "examples": [
              1569001234567
            ]
          },
          "id": {
            "type": "string"
          },
          "isDraft": {
            "type": "boolean",
            "examples": [
              false
            ]
          },
          "note": {
            "type": "string"
          },
          "parentSnapshotId": {
            "type": "string"
          },
          "processedAt": {
            "type": "string",
            "examples": [
              "2019-09-20T18:17:36.789Z"
            ]
          },
          "processedAtMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `processedAt` instead.",
            "examples": [
              1569003456789
            ]
          },
          "processingTrigger": {
            "type": "string",
            "enum": [
              "UNKNOWN",
              "COLLECTION",
              "IMPORT",
              "REPROCESS",
              "FORK"
            ]
          },
          "restoredAt": {
            "type": "string",
            "examples": [
              "2019-09-20T17:40:34.567Z"
            ]
          },
          "restoredAtMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `restoredAt` instead.",
            "examples": [
              1569001234567
            ]
          },
          "state": {
            "$ref": "#/components/schemas/SnapshotState"
          },
          "favoritedBy": {
            "type": "string",
            "description": "The username of the user who most recently marked this Snapshot as a favorite if it's currently a favorite\nand the user account hasn’t been deleted.",
            "examples": [
              "mary"
            ]
          },
          "favoritedByUserId": {
            "type": "string",
            "description": "The id of the user who most recently marked this Snapshot as a favorite if it’s currently a\nfavorite.",
            "examples": [
              "1234"
            ]
          },
          "favoritedAt": {
            "type": "string",
            "description": "When this Snapshot was most recently marked as a favorite if it’s currently a favorite. A favorite Snapshot\nwill never be automatically deleted, regardless of its network’s Snapshot retention policy.",
            "examples": [
              "2019-09-30T19:48:59.481Z"
            ]
          },
          "favoritedAtMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `favoritedAt` instead.",
            "examples": [
              1569872939481
            ]
          }
        }
      },
      "SnapshotMetrics": {
        "type": "object",
        "properties": {
          "collectionConcurrency": {
            "type": "integer",
            "format": "int32",
            "examples": [
              16
            ]
          },
          "collectionDuration": {
            "type": "integer",
            "format": "int64",
            "examples": [
              1234
            ]
          },
          "createdAt": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "creationDateMillis": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `createdAt` instead.",
            "examples": [
              1649277285118
            ]
          },
          "deviceCollectionFailures": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Possible device error types during collection\n*UNKNOWN*: Unknown error\n*CONNECTION_TIMEOUT*: Connection to device timed out\n*CONNECTION_REFUSED*: Connection to device refused\n*AUTHENTICATION_FAILED*: Authentication failed\n*KEY_EXCHANGE_FAILED*: Key exchange failed\n*AUTHORIZATION_FAILED*: Authorization failed\n*AVI_SHELL_AUTH_FAILED*: Avi authentication failed\n*AVI_CONTROLLER_WITHOUT_HEALTHY_SERVICE_ENGINES*: No Avi Service Engines found\n*NETWORK_UNREACHABLE*: Network not reachable\n*IO_ERROR*: I/O error\n*SESSION_CLOSED*: Session closed unexpectedly\n*STATE_COLLECTION_FAILED*: State collection failed\n*JUMP_SERVER_CONNECTION_TIMEOUT*: Jump server timed out\n*JUMP_SERVER_PASSWORD_AUTH_FAILED*: Jump server auth failed\n*JUMP_SERVER_CONNECTION_FAILED*: Jump server connection refused\n*JUMP_SERVER_KEY_EXCHANGE_FAILED*: Jump server key exchange failed\n*PROXY_SERVER_PING_FAILED*: Proxy ping failed\n*PROXY_SERVER_PORT_REACHABILITY_FAILED*: Proxy port not reachable\n*PROXY_SERVER_CONNECTION_FAILED*: Proxy connection refused\n*PROXY_SERVER_AUTHENTICATION_FAILED*: Proxy authentication failed\n*PRIV_PASSWORD_ERROR*: Privileged password failed\n*UNSUPPORTED_VERSION*: Unsupported version\n*DEVICE_TYPE_UNDETECTED*: Undetected device type\n*WARN_TYPE_MISMATCH*: Device type mismatch\n*DEVICE_IS_CHILD_CONTEXT*: Parent context required\n*MANAGER_COLLECTOR_NOT_FOUND*: Collector manager error\n*INCOMPLETE_SETUP*: Incomplete setup\n*COLLECTION_NOT_FOUND*: Collection not found\n*INFINITE_LOOP_IN_COMMAND_OUTPUT*: Collection stuck in loop\n*MISSING_FILE*: File is missing\n*UNSUPPORTED_VENDOR*: Vendor not supported\n*COMMAND_DISABLED*: Required command is disabled\n*APIC_CONFIG_COLLECTION_FAILED*: APIC config collection failed\n*UNEXPECTED_KEY_EXCHANGE_MESSAGE*: Unexpected Key-Exchange message\n*UNDISCOVERED_ACI_FABRIC*: ACI fabric node was not discovered by APIC\n*SLOW_READ_RATE_DETECTED*: Read rate from the remote peer is too low\n*COLLECTION_TIMED_OUT*: Collection timed out\n*COLLECTION_CANCELED*: Collection canceled by user\n*OPERATION_TIMED_OUT*: Operation timed out\n*CERTIFICATE_CHECK_FAILED*: Certificate cannot be verified"
          },
          "deviceProcessingFailures": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Possible error types during processing\n*LICENSE_EXHAUSTED*: License limit exceeded\n*MISSING_SIGNATURE*: Missing signature\n*DUPLICATE*: Duplicate device\n*PARSER_EXCEPTION*: Couldn't be parsed\n*UNSUPPORTED_VENDOR*: Vendor not supported"
          },
          "endpointCollectionFailures": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Possible device error types during collection\n*UNKNOWN*: Unknown error\n*CONNECTION_TIMEOUT*: Connection to device timed out\n*CONNECTION_REFUSED*: Connection to device refused\n*AUTHENTICATION_FAILED*: Authentication failed\n*KEY_EXCHANGE_FAILED*: Key exchange failed\n*AUTHORIZATION_FAILED*: Authorization failed\n*AVI_SHELL_AUTH_FAILED*: Avi authentication failed\n*AVI_CONTROLLER_WITHOUT_HEALTHY_SERVICE_ENGINES*: No Avi Service Engines found\n*NETWORK_UNREACHABLE*: Network not reachable\n*IO_ERROR*: I/O error\n*SESSION_CLOSED*: Session closed unexpectedly\n*STATE_COLLECTION_FAILED*: State collection failed\n*JUMP_SERVER_CONNECTION_TIMEOUT*: Jump server timed out\n*JUMP_SERVER_PASSWORD_AUTH_FAILED*: Jump server auth failed\n*JUMP_SERVER_CONNECTION_FAILED*: Jump server connection refused\n*JUMP_SERVER_KEY_EXCHANGE_FAILED*: Jump server key exchange failed\n*PROXY_SERVER_PING_FAILED*: Proxy ping failed\n*PROXY_SERVER_PORT_REACHABILITY_FAILED*: Proxy port not reachable\n*PROXY_SERVER_CONNECTION_FAILED*: Proxy connection refused\n*PROXY_SERVER_AUTHENTICATION_FAILED*: Proxy authentication failed\n*PRIV_PASSWORD_ERROR*: Privileged password failed\n*UNSUPPORTED_VERSION*: Unsupported version\n*DEVICE_TYPE_UNDETECTED*: Undetected device type\n*WARN_TYPE_MISMATCH*: Device type mismatch\n*DEVICE_IS_CHILD_CONTEXT*: Parent context required\n*MANAGER_COLLECTOR_NOT_FOUND*: Collector manager error\n*INCOMPLETE_SETUP*: Incomplete setup\n*COLLECTION_NOT_FOUND*: Collection not found\n*INFINITE_LOOP_IN_COMMAND_OUTPUT*: Collection stuck in loop\n*MISSING_FILE*: File is missing\n*UNSUPPORTED_VENDOR*: Vendor not supported\n*COMMAND_DISABLED*: Required command is disabled\n*APIC_CONFIG_COLLECTION_FAILED*: APIC config collection failed\n*UNEXPECTED_KEY_EXCHANGE_MESSAGE*: Unexpected Key-Exchange message\n*UNDISCOVERED_ACI_FABRIC*: ACI fabric node was not discovered by APIC\n*SLOW_READ_RATE_DETECTED*: Read rate from the remote peer is too low\n*COLLECTION_TIMED_OUT*: Collection timed out\n*COLLECTION_CANCELED*: Collection canceled by user\n*OPERATION_TIMED_OUT*: Operation timed out\n*CERTIFICATE_CHECK_FAILED*: Certificate cannot be verified"
          },
          "endpointProcessingFailures": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Possible error types during processing\n*LICENSE_EXHAUSTED*: License limit exceeded\n*MISSING_SIGNATURE*: Missing signature\n*DUPLICATE*: Duplicate device\n*PARSER_EXCEPTION*: Couldn't be parsed\n*UNSUPPORTED_VENDOR*: Vendor not supported"
          },
          "hostComputationStatus": {
            "$ref": "#/components/schemas/ComputationStatus",
            "description": "Host computation status",
            "examples": [
              "SUCCESS"
            ]
          },
          "ipLocationIndexingStatus": {
            "$ref": "#/components/schemas/ComputationStatus",
            "description": "IP location indexing status",
            "examples": [
              "SUCCESS"
            ]
          },
          "jumpServerCollectionConcurrency": {
            "type": "integer",
            "format": "int32"
          },
          "l2IndexingStatus": {
            "$ref": "#/components/schemas/ComputationStatus",
            "description": "L2 elements (vlans, LAN segments etc.) indexing status",
            "examples": [
              "SUCCESS"
            ]
          },
          "numCollectionFailureDevices": {
            "type": "integer",
            "format": "int32"
          },
          "numCollectionFailureEndpoints": {
            "type": "integer",
            "format": "int32"
          },
          "numProcessingFailureDevices": {
            "type": "integer",
            "format": "int32"
          },
          "numProcessingFailureEndpoints": {
            "type": "integer",
            "format": "int32"
          },
          "numSuccessfulDevices": {
            "type": "integer",
            "format": "int32",
            "examples": [
              401
            ]
          },
          "numSuccessfulEndpoints": {
            "type": "integer",
            "format": "int32",
            "examples": [
              234
            ]
          },
          "pathSearchIndexingStatus": {
            "$ref": "#/components/schemas/ComputationStatus",
            "description": "End-to-end path indexing status",
            "examples": [
              "SUCCESS"
            ]
          },
          "processingDuration": {
            "type": "integer",
            "format": "int64",
            "examples": [
              5678
            ]
          },
          "searchIndexingStatus": {
            "$ref": "#/components/schemas/ComputationStatus",
            "description": "Object search indexing status",
            "examples": [
              "SUCCESS"
            ]
          },
          "snapshotId": {
            "type": "string"
          },
          "snapshotState": {
            "$ref": "#/components/schemas/SnapshotState",
            "description": "Current state of the Snapshot",
            "examples": [
              "PROCESSING"
            ]
          }
        }
      },
      "SnapshotState": {
        "type": "string",
        "enum": [
          "UNPACKING",
          "UNPROCESSED",
          "PROCESSING",
          "PROCESSED",
          "FAILED",
          "CANCELED",
          "TIMED_OUT",
          "ARCHIVED",
          "RESTORING",
          "RESTORE_FAILED"
        ]
      },
      "Network": {
        "type": "object",
        "required": [
          "id",
          "name",
          "orgId"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "parentId": {
            "type": "string",
            "description": "The network from which this Workspace network was created. Absent if this network is not a\nWorkspace."
          },
          "name": {
            "type": "string",
            "examples": [
              "My Network"
            ]
          },
          "orgId": {
            "type": "string"
          },
          "creator": {
            "type": "string",
            "description": "The username of the user who created the network, or null if the account was deleted",
            "examples": [
              "mary"
            ]
          },
          "creatorId": {
            "type": "string",
            "description": "The id of the user who created the network, or null if the account was deleted",
            "examples": [
              "123"
            ]
          },
          "created": {
            "type": "string",
            "examples": [
              "2022-04-06T20:34:45.118Z"
            ]
          },
          "createdAt": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated for removal in release 26.4. Use `created` instead.",
            "examples": [
              1649277285118
            ]
          },
          "note": {
            "type": "string",
            "description": "An optional network description."
          },
          "retentionDays": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 365,
            "description": "The number of days without any use of this network after which it will be automatically deleted. Absent for\nparent networks and permanent Workspace networks."
          },
          "secondsToExpiry": {
            "type": "integer",
            "format": "int64",
            "description": "Number of seconds without use before the network expires. Present for temporary Workspace\nnetworks only."
          }
        }
      },
      "ComputationStatus": {
        "type": "string",
        "enum": [
          "UNKNOWN",
          "FAILURE",
          "SUCCESS",
          "CANCELED"
        ]
      },
      "LinkOverrides": {
        "type": "object",
        "properties": {
          "absent": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          },
          "present": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          }
        }
      },
      "LinkOverridesEdit": {
        "type": "object",
        "properties": {
          "absentAdditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          },
          "absentRemovals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          },
          "presentAdditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          },
          "presentRemovals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          }
        }
      },
      "TopologyLink": {
        "type": "object",
        "properties": {
          "sourcePort": {
            "type": "string"
          },
          "targetPort": {
            "type": "string"
          }
        }
      },
      "Link": {
        "type": "object",
        "properties": {
          "port1": {
            "type": "string"
          },
          "port2": {
            "type": "string"
          }
        }
      },
      "CreateWorkspaceNetworkRequest": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "My Network - Workspace A"
            ]
          },
          "note": {
            "type": "string",
            "examples": [
              "For change window 2021-10-30-ABC"
            ]
          },
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of the [classic devices](https://docs.fwd.app/latest/api/classic-devices/) to include. Can be omitted or\nempty if `cloudAccounts` or `vcenters` is nonempty.",
            "examples": [
              [
                "nyc-dc01-tor01",
                "nyc-dc01-rtr01"
              ]
            ]
          },
          "cloudAccounts": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of the cloud accounts\n[AWS](https://docs.fwd.app/latest/application/sources/configure_collection/cloud/aws_setup/),\n[GCP](https://docs.fwd.app/latest/application/sources/configure_collection/cloud/gcp_setup/), or\n[Azure](https://docs.fwd.app/latest/application/sources/configure_collection/cloud/azure_setup/) to\ninclude. Can be omitted or empty if `devices` or `vcenters` is nonempty.",
            "examples": [
              [
                "my-aws-account",
                "my-gcp-account",
                "my-azure-account"
              ]
            ]
          },
          "vcenters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of the\n[vCenters](https://docs.fwd.app/latest/application/sources/configure_collection/VMware_account/#adding-a-vcenter-source)\nto include. Can be omitted or empty if `devices` or `cloudAccounts` is nonempty.",
            "examples": [
              [
                "vcenter-01"
              ]
            ]
          },
          "omissions": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "CUSTOM_COMMANDS",
                "NQE_CHECKS",
                "PREDEFINED_CHECKS",
                "INTENT_CHECKS"
              ]
            },
            "description": "What to omit (not copy) from the parent network",
            "examples": [
              [
                "CUSTOM_COMMANDS",
                "NQE_CHECKS"
              ]
            ]
          },
          "retentionDays": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 365,
            "description": "Number of days of inactivity after which the Workspace network will be deleted. If omitted, the value\ndefaults to 7. If specified as null, this network will be considered permanent."
          }
        }
      },
      "NetworkUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "retentionDays": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "NqeDiffRequest": {
        "type": "object",
        "required": [
          "queryId"
        ],
        "properties": {
          "queryId": {
            "type": "string",
            "description": "The query identifier of the query to run, referenced by its NQE Library Query ID.",
            "examples": [
              "FQ_ac651cb2901b067fe7dbfb511613ab44776d8029"
            ]
          },
          "commitId": {
            "type": "string",
            "description": "Version of the query identified by `queryId` to run. Omit to run the latest version. Required if the query\nidentified by `queryId` has been deleted.",
            "examples": [
              "84f84b0c0a0a1805ddff0ca5451c2c55c58605e5"
            ]
          },
          "options": {
            "$ref": "#/components/schemas/NqeQueryOptions"
          }
        }
      },
      "NqeDiffResult": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NqeDiffEntry"
            },
            "description": "The NQE query diff's rows, as a list of objects. Each object represents either an added row, a deleted row,\nor a modified row. In the case of a modified row, the before and after rows are matched up by their values\non the key columns for the before and after tables. In particular, the key columns are the smallest set of\nleft-most columns that uniquely identify rows within the before table and the after table."
          },
          "totalNumRows": {
            "type": "integer",
            "format": "int32",
            "description": "The number of diff rows that would be present if there were no limit. If there are column filters, then it is the\nnumber of rows that satisfy the column filters (if there were no limit)."
          }
        }
      },
      "NqeErrorInfo": {
        "type": "object",
        "required": [
          "httpMethod",
          "apiUrl",
          "message"
        ],
        "properties": {
          "completionType": {
            "type": "string",
            "enum": [
              "FINISHED",
              "CANCELED",
              "TIMED_OUT"
            ]
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NqeQueryError"
            }
          },
          "snapshotId": {
            "type": "string",
            "description": "The ID of the Snapshot the query was run against.",
            "examples": [
              "101"
            ]
          },
          "httpMethod": {
            "type": "string",
            "examples": [
              "GET"
            ],
            "enum": [
              "GET",
              "HEAD",
              "POST",
              "PUT",
              "PATCH",
              "DELETE"
            ]
          },
          "apiUrl": {
            "type": "string",
            "examples": [
              "/api/version"
            ]
          },
          "message": {
            "type": "string",
            "description": "A description of the error"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "NqeQuery": {
        "type": "object",
        "properties": {
          "queryId": {
            "type": "string",
            "description": "The ID of the query",
            "examples": [
              "FQ_ac651cb2901b067fe7dbfb511613ab44776d8029"
            ]
          },
          "repository": {
            "type": "string",
            "examples": [
              "ORG"
            ],
            "enum": [
              "FWD",
              "ORG"
            ]
          },
          "path": {
            "type": "string",
            "description": "The unique path of the query, including its name, in the latest commit",
            "examples": [
              "/L2/MtuConsistency"
            ]
          },
          "intent": {
            "type": "string",
            "description": "The intent of the query in the latest commit"
          }
        }
      },
      "NqeQueryRunRequest": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "The source code of the query to run. Used to directly run a query. Exactly one of `queryId` or `query` must be\nprovided.",
            "examples": [
              "foreach d in network.devices select { Name: d.name }"
            ]
          },
          "queryId": {
            "type": "string",
            "description": "The Query ID of a committed query in NQE Library. Used to run a query identified by its Query ID. Exactly one of\n`queryId` or `query` must be provided. This identifier can be found in the information callout in the Queries pane\nor the Versions view dropdown.",
            "examples": [
              "FQ_ac651cb2901b067fe7dbfb511613ab44776d8029"
            ]
          },
          "commitId": {
            "type": "string",
            "description": "A Commit ID of the query identified by the `queryId` property. Used to run a specific version of a committed\nquery. Omit to run the latest version. Required if the query identified by `queryId` has been deleted. This\nidentifier can be found in the information callout in the Queries pane or the Versions view dropdown.",
            "examples": [
              "84f84b0c0a0a1805ddff0ca5451c2c55c58605e5"
            ]
          },
          "queryOptions": {
            "$ref": "#/components/schemas/NqeQueryOptions",
            "description": "(optional) Options to refine and display the results."
          },
          "parameters": {
            "type": "object",
            "description": "Values for each parameter declared in the query. Can be omitted if the query has no declared parameters. The\nparameter values are specified as a JSON object, with one property per parameter, where the property name matches\nthe parameter name. The property value is the JSON representation of the parameter value. The JSON representation\nof a parameter value depends on the type of the value. For values of type `String`, `IpAddress`, `IpSubnet`, and\n`MacAddress`, the JSON representation is a JSON string. For values of type `Number`, the value is an integral JSON\nnumber. For values of type `Boolean`, the JSON representation is true or false. For values of type `List<T>`, the\nJSON representation is an array of JSON values, each of which is a JSON representation for type `T`. For record\nvalues, the JSON representation is a JSON object with corresponding properties whose values are JSON\nrepresentations corresponding to the properties' types. For enumerations, the JSON representation is a JSON string\nwith the enum constant name. For `oneOf` values that contain data, the JSON representation is a JSON object with\ntwo properties, `alternative` and `value`, where the `alternative` property contains the alternative's name (a\nstring) and the `value` property is a JSON representation of the data associated with this alternative.",
            "examples": [
              {
                "mtuThreshold": 123,
                "ntpServers": [
                  "10.22.2.3",
                  "192.33.4.1"
                ]
              }
            ]
          }
        }
      },
      "NqeRunResult": {
        "type": "object",
        "properties": {
          "snapshotId": {
            "type": "string",
            "description": "The ID of the Snapshot that the query was run against.",
            "examples": [
              "101"
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NqeRecord"
            },
            "description": "The query's results, as a list of objects. Each object corresponds to a row returned by the query, and is an\nobject with properties of simple values, where a simple value is either a basic value or a list of basic values. A\nbasic value is either a number, boolean, string, or null.",
            "examples": [
              [
                {
                  "boolField": true,
                  "numField": 1,
                  "nullField": null,
                  "stringField": "string",
                  "listField": [
                    1,
                    2,
                    3
                  ]
                }
              ]
            ]
          },
          "totalNumItems": {
            "type": "integer",
            "format": "int64",
            "description": "The total number of items in the query's results. This number could be different than the length of `items` if a\nfilter is used or if the total size of the rows would exceed the maximum page size of 400MB."
          }
        }
      },
      "SortOrder": {
        "type": "object",
        "required": [
          "columnName"
        ],
        "properties": {
          "columnName": {
            "type": "string",
            "description": "The name of a column to sort on.",
            "examples": [
              "Name"
            ]
          },
          "order": {
            "type": "string",
            "description": "(optional) Either `ASC` or `DESC` to sort ascending or descending, respectively. Defaults to `ASC`.",
            "examples": [
              "ASC"
            ],
            "enum": [
              "ASC",
              "DESC"
            ]
          }
        }
      },
      "DefaultColumnFilter": {
        "type": "object",
        "required": [
          "columnName"
        ],
        "properties": {
          "columnName": {
            "type": "string",
            "description": "The name of a column to filter on.",
            "examples": [
              "Name"
            ]
          },
          "operator": {
            "type": "string",
            "const": "DEFAULT"
          },
          "value": {
            "type": "string",
            "description": "A value (in its string representation) to match on.",
            "examples": [
              "ATL"
            ]
          }
        }
      },
      "BetweenColumnFilter": {
        "type": "object",
        "required": [
          "columnName",
          "operator"
        ],
        "properties": {
          "columnName": {
            "type": "string",
            "description": "The name of a column to filter on.",
            "examples": [
              "Name"
            ]
          },
          "lowerBound": {
            "type": "string",
            "description": "A value (in its string representation) to limit on inclusively from below. Required if 'upperBound' is\nomitted.",
            "examples": [
              "2023-07-30T08:27:16Z"
            ]
          },
          "operator": {
            "type": "string",
            "const": "IS_BETWEEN"
          },
          "upperBound": {
            "type": "string",
            "description": "A value (in its string representation) to limit on inclusively from above. Required if 'lowerBound' is\nomitted.",
            "examples": [
              "2025-07-30T08:27:16Z"
            ]
          }
        }
      },
      "ColumnFilter": {
        "type": "object",
        "required": [
          "operator"
        ],
        "properties": {
          "operator": {
            "type": "string",
            "enum": [
              "DEFAULT",
              "IS_BETWEEN"
            ]
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/DefaultColumnFilter"
          },
          {
            "$ref": "#/components/schemas/BetweenColumnFilter"
          }
        ],
        "discriminator": {
          "propertyName": "operator",
          "mapping": {
            "DEFAULT": "#/components/schemas/DefaultColumnFilter",
            "IS_BETWEEN": "#/components/schemas/BetweenColumnFilter"
          }
        }
      },
      "NqeQueryOptions": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "format": "int32",
            "description": "(optional) The number of initial rows to skip. Defaults to 0. Cannot be negative.",
            "examples": [
              20
            ]
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "description": "(optional) The maximum number of rows to return. Defaults to 1,000. Must be positive.\nCannot exceed 10,000.",
            "examples": [
              100
            ]
          },
          "sortBy": {
            "$ref": "#/components/schemas/SortOrder",
            "description": "(optional) Specifies how results should be sorted."
          },
          "columnFilters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ColumnFilter"
            },
            "description": "(optional) A collection of conditions on column values for filtering the results. A row matches the array of\n`columnFilters` if the row matches all of the `columnFilters`, in which case it is kept in the results.",
            "examples": [
              [
                {
                  "columnName": "Name",
                  "value": "MyDeviceName"
                }
              ]
            ]
          },
          "itemFormat": {
            "type": "string",
            "description": "(optional) Specifies how each row in the results should be rendered.\n\nIf set to `JSON`, then complex values are rendered as JSON arrays and records.\nIf set to `LEGACY`, then complex values in the row are rendered as strings.\n\nA complex value is one that is not a scalar (such as a number, string, enum value, date, etc.) and is not a list\nof scalar values.\n\n**Note:** The `LEGACY` format is deprecated and will be removed in release 26.9.",
            "examples": [
              "JSON"
            ],
            "default": "JSON",
            "enum": [
              "JSON",
              "LEGACY"
            ]
          }
        }
      },
      "CellValue": {
        "type": "object"
      },
      "NqeRecord": {
        "type": "object",
        "properties": {
          "fields": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CellValue"
            }
          }
        }
      },
      "TextPosition": {
        "type": "object",
        "properties": {
          "character": {
            "type": "integer",
            "format": "int32",
            "description": "Position on the line (by number of characters, starting at 0)"
          },
          "line": {
            "type": "integer",
            "format": "int32",
            "description": "Line number (starting at 0)"
          }
        }
      },
      "TextRegion": {
        "type": "object",
        "properties": {
          "start": {
            "$ref": "#/components/schemas/TextPosition",
            "description": "The region's starting position (starting at (0, 0))."
          },
          "end": {
            "$ref": "#/components/schemas/TextPosition",
            "description": "The region's ending position."
          }
        }
      },
      "NqeQueryError": {
        "type": "object",
        "properties": {
          "location": {
            "$ref": "#/components/schemas/TextRegion",
            "description": "The region in the original query that caused the error."
          },
          "message": {
            "type": "string",
            "description": "The error's message."
          }
        }
      },
      "NqeDiffEntry": {
        "type": "object",
        "properties": {
          "after": {
            "$ref": "#/components/schemas/NqeRecord",
            "description": "The row returned by the query against the 'after' snapshot. Not present if `type` is `DELETED`."
          },
          "before": {
            "$ref": "#/components/schemas/NqeRecord",
            "description": "The row returned by the query against the 'before' snapshot. Not present if `type` is `ADDED`."
          },
          "type": {
            "type": "string",
            "description": "Describes the type of difference between `before` and `after`:\n* If `MODIFIED`, then both `before` and `after` will be present, but will differ in at least one property;\n* If `ADDED`, then only `after` will be present;\n* If `DELETED`, then only `before` will be present.",
            "enum": [
              "ADDED",
              "DELETED",
              "MODIFIED"
            ]
          }
        },
        "description": "Represents a diff entry between two records returned by the same NQE query."
      },
      "L7Application": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        }
      },
      "PathSearchBulkRequest": {
        "type": "object",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PathSearchQuery"
            }
          },
          "intent": {
            "$ref": "#/components/schemas/SearchIntent",
            "description": "Specifies the intent for the search. Default PREFER_DELIVERED.\n*PREFER_VIOLATIONS*: Prefer paths that result in the traffic not getting delivered, e.g. drops, blackholes,\nloops. An example usage is while trying to evaluate if the specified traffic always gets delivered to the\ndestination along all path choices.\n*PREFER_DELIVERED*: Prefer paths that result in the traffic getting delivered. An example usage is while\ntrying to evaluate if traffic gets delivered to the destination along any path choice.\n*VIOLATIONS_ONLY*: Search for paths where traffic is not delivered to the destination.",
            "examples": [
              "PREFER_DELIVERED"
            ],
            "default": "PREFER_DELIVERED"
          },
          "maxCandidates": {
            "type": "integer",
            "format": "int32",
            "description": "the limit on the number of search results computed, before applying any ranking criteria. Permitted range =\n1 to 10,000. Default 5,000.",
            "examples": [
              5000
            ]
          },
          "maxResults": {
            "type": "integer",
            "format": "int32",
            "description": "the limit on the number of search results returned by the API. First, the platform computes up to\nmaxCandidates results that match the search criteria. Then they are sorted by various ranking criteria. A\nkey ranking factor is path length, preferring longer paths (greatest reach) in the network over shorter\nones. Finally, the API limits the number of returned search results to maxResults. Permitted range = 1 to\nmaxCandidates. Default 1.",
            "examples": [
              1
            ]
          },
          "maxReturnPathResults": {
            "type": "integer",
            "format": "int32",
            "description": "the limit on the number of return path search results. Permitted range = 0 to 10,000. Default 0. Multicast\n(*, G) and (S, G) queries will always return 0 return path results regardless of this value.",
            "examples": [
              0
            ]
          },
          "maxSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "the timeout duration per search query. Permitted range = 1 to 300. Default 30.",
            "examples": [
              30
            ]
          },
          "maxOverallSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "the overall timeout duration. Permitted range = 1 to 7,200. Default equal to the timeout duration for a\nsingle query.",
            "examples": [
              300
            ]
          },
          "includeTags": {
            "type": "boolean",
            "description": "If true, the response will include device tags for each hop.",
            "examples": [
              false
            ]
          },
          "includeNetworkFunctions": {
            "type": "boolean",
            "description": "If true, the response includes detailed forwarding info for each hop.\nNote: Setting this to true increases the API response time.",
            "examples": [
              false
            ]
          }
        }
      },
      "PathSearchResponse": {
        "type": "object",
        "properties": {
          "srcIpLocationType": {
            "type": "string",
            "description": "Specifies the location discovery method for source IP.\nThe enum values are ordered from most precise to least precise discovery method.\n*INTERFACE*: The IP is a configured IP address of one or more device interfaces.\n*HOST*: The IP corresponds to discovered host(s).\n*SNAT* : The IP is used as the post-translated IP of a Source NAT function in the network and is assumed to\nbe located on the gateway device(s) performing this translation.\n*CO_LOCATED*: The IP is configured on a gateway device as a /32 or /128 route whose next hop is a known\nhost.\n*INTERFACE_ATTACHED_SUBNET*: The IP falls within the attached subnet of L3 interface(s).\n*INTERNET*: The IP is in the public internet and was located at the network's Internet Node. This discovery\nmethod is only applicable when an Internet Node is configured in the network.\n*ROUTE*: The IP was located based on injected routes in the network.\n*MULTICAST*: The IP is a multicast group address. This discovery method is used to locate the rendezvous\npoints of the multicast group and use their IP addresses as IP source.",
            "enum": [
              "INTERFACE",
              "HOST",
              "SNAT",
              "CO_LOCATED",
              "INTERFACE_ATTACHED_SUBNET",
              "INTERNET",
              "ROUTE",
              "MULTICAST"
            ]
          },
          "dstIpLocationType": {
            "type": "string",
            "description": "Specifies the location discovery method for destination IP.\nThe enum values are ordered from most precise to least precise discovery method.\n*INTERFACE*: The IP is a configured IP address of one or more device interfaces.\n*HOST*: The IP corresponds to discovered host(s).\n*DNAT*: The IP gets DNAT'd in the network. The IP may either correspond directly to a VIP on a load balancer\nor a DNAT'd IP on other devices such as routers. This discovery method is only used to locate destination IP\naddresses. DNAT’d IP addresses are recursively resolved to determine where traffic to a given destination IP\nmust be delivered in the network.\n*CO_LOCATED*: The IP is configured on a gateway device as a /32 or /128 route whose next hop is a known\nhost.\n*INTERFACE_ATTACHED_SUBNET*: The IP falls within the attached subnet of L3 interface(s).\n*INTERNET*: The IP is in the public internet and was located at the network's Internet Node. This discovery\nmethod is only applicable when an Internet Node is configured in the network.\n*ROUTE*: The IP was located based on injected routes in the network.\n*MULTICAST*: The IP is a multicast group address.",
            "enum": [
              "INTERFACE",
              "HOST",
              "DNAT",
              "CO_LOCATED",
              "INTERFACE_ATTACHED_SUBNET",
              "INTERNET",
              "ROUTE",
              "MULTICAST"
            ]
          },
          "info": {
            "$ref": "#/components/schemas/PathInfo"
          },
          "returnPathInfo": {
            "$ref": "#/components/schemas/PathInfo"
          },
          "timedOut": {
            "type": "boolean"
          },
          "queryUrl": {
            "type": "string",
            "description": "A Forward application URL at which this path search can be explored or refined interactively"
          },
          "unrecognizedValues": {
            "$ref": "#/components/schemas/UnrecognizedValues",
            "description": "L7 values from the request that were unrecognized by the system"
          }
        }
      },
      "SearchIntent": {
        "type": "string",
        "enum": [
          "PREFER_VIOLATIONS",
          "PREFER_DELIVERED",
          "VIOLATIONS_ONLY"
        ]
      },
      "AclFunction": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "the name of the ACL that is applied to traffic"
          },
          "context": {
            "type": "string",
            "description": "the context in which the ACL function is applied",
            "enum": [
              "INPUT",
              "OUTPUT"
            ]
          },
          "action": {
            "type": "string",
            "description": "the action taken by the ACL function",
            "enum": [
              "PERMIT",
              "DENY"
            ]
          }
        }
      },
      "InterfaceFunctionL2Info": {
        "type": "object",
        "properties": {
          "interfaceName": {
            "type": "string"
          }
        }
      },
      "InterfaceFunctionL3Info": {
        "type": "object",
        "properties": {
          "interfaceName": {
            "type": "string"
          },
          "vrf": {
            "type": "string",
            "description": "Null if the interface does not belong to any VRF"
          }
        }
      },
      "InterfaceFunction": {
        "type": "object",
        "properties": {
          "l2": {
            "$ref": "#/components/schemas/InterfaceFunctionL2Info"
          },
          "l3": {
            "$ref": "#/components/schemas/InterfaceFunctionL3Info"
          },
          "securityZone": {
            "type": "string"
          }
        }
      },
      "NetworkFunctions": {
        "type": "object",
        "properties": {
          "acl": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AclFunction"
            }
          },
          "egress": {
            "$ref": "#/components/schemas/InterfaceFunction"
          },
          "ingress": {
            "$ref": "#/components/schemas/InterfaceFunction"
          }
        },
        "description": "Detailed forwarding info"
      },
      "PathHop": {
        "type": "object",
        "properties": {
          "deviceName": {
            "type": "string"
          },
          "displayName": {
            "type": "string",
            "description": "Alternate device name that might be more recognizable but isn’t necessarily unique in the network. For cloud\ndevices, this is the name configured in the cloud provider’s console."
          },
          "deviceType": {
            "$ref": "#/components/schemas/DeviceType"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "present only if device tags are specifically requested"
          },
          "parseError": {
            "type": "boolean",
            "description": "`true` indicates that this device’s behavior model might not be reliable"
          },
          "ingressInterface": {
            "type": "string",
            "description": "the physical interface name, where traffic entered the device"
          },
          "egressInterface": {
            "type": "string",
            "description": "the physical interface name, where traffic exited the device.\nAbsent if this is the last hop and traffic did not exit the device."
          },
          "behaviors": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "L2",
                "L3",
                "NAT",
                "PBR",
                "ACL_PERMIT",
                "ACL_DENY"
              ]
            },
            "description": "Specifies the forwarding behaviors experienced by traffic at the device.\n*L2*: Forwarded at layer 2.\n*L3*: Routed at layer 3.\n*NAT*: NAT transformations applied.\n*PBR*: Forwarded using Policy-Based Routing.\n*ACL_PERMIT*: ACLs were applied to traffic at the device and the traffic was permitted.\n*ACL_DENY*: ACLs were applied to traffic at the device and the traffic was dropped."
          },
          "networkFunctions": {
            "$ref": "#/components/schemas/NetworkFunctions"
          },
          "backfilledFrom": {
            "type": "string",
            "description": "the collection instant from which the device was backfilled"
          }
        }
      },
      "Path": {
        "type": "object",
        "properties": {
          "forwardingOutcome": {
            "type": "string",
            "description": "Specifies the traffic forwarding outcome along a path.\n*DELIVERED*: Traffic was delivered to destination IP’s discovered location(s).\n*DELIVERED_TO_INCORRECT_LOCATION*: Traffic was delivered out of some edge ports. However, traffic did not\nreach the expected delivery locations based on destination IP’s discovered locations. One scenario where\nthis occurs is when a device in the middle of the actual path from source IP to destination IP is not\nconfigured for collection in the Forward platform. For example, suppose the actual device path is A -> B ->\nC, and only devices A and C are part of the snapshot in the Forward platform. In this case, the path would\nshow traffic exiting device A at some edge port, but since destination IP is discovered to reside at device\nC, traffic is delivered to an incorrect location.\n*BLACKHOLE*: Traffic was implicitly dropped at the last hop, since the device had no matching rule. For\nexample, if a router does not have a default route, traffic to any IP that is not in the routing table gets\nblackholed.\n*DROPPED*: Traffic was explicitly dropped at the last hop, e.g. by a null route.\n*INADMISSIBLE*: Traffic was not admitted into the network. The first hop interface does not accept the\ntraffic, e.g. incoming traffic had a vlan tag 10 while the ingress interface is an access interface that\nonly permits traffic with vlan tag 20.\n*UNREACHABLE*: ARP/NDP resolution failed along the path resulting in traffic not getting delivered to the\nintended destination.\n*LOOP*: Traffic entered a forwarding loop.",
            "enum": [
              "DELIVERED",
              "DELIVERED_TO_INCORRECT_LOCATION",
              "DROPPED",
              "LOOP",
              "INADMISSIBLE",
              "BLACKHOLE",
              "UNREACHABLE"
            ]
          },
          "securityOutcome": {
            "type": "string",
            "description": "Specifies whether traffic is denied by ACL rules at any hop along the path.\n*PERMITTED*: All ACLs along the path permitted traffic to flow through.\n*DENIED*: Traffic was dropped by ACLs at some hop along the path. Note that the ACL drop may not always\noccur at the last hop since search results are computed in permit all mode.",
            "enum": [
              "PERMITTED",
              "DENIED"
            ]
          },
          "hops": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PathHop"
            }
          }
        }
      },
      "TotalHits": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Specifies the type of total hits.\n*LOWER_BOUND*: There may be additional hits that were not included in the results either because the\nrequested number of hits were found, or the request timed out.\n*EXACT*: There are exactly this many hits.",
            "enum": [
              "LOWER_BOUND",
              "EXACT"
            ]
          },
          "value": {
            "type": "integer",
            "format": "int64"
          }
        },
        "description": "Number of ways in which traffic matching the search criteria is forwarded in the network. Multiple ECMP path\nchoices for traffic lead to separate results. In addition, depending on the scope of query terms, there\nmight be multiple results along a single path. For example a search without IP protocol or destination port\nrestrictions can result in multiple results along a single device path if there are different ACLs that\npermit or deny traffic to different destination ports."
      },
      "PathInfo": {
        "type": "object",
        "properties": {
          "paths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Path"
            }
          },
          "totalHits": {
            "$ref": "#/components/schemas/TotalHits"
          }
        }
      },
      "UnrecognizedValues": {
        "type": "object",
        "properties": {
          "appId": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "userGroupId": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "userId": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PathSearchQuery": {
        "type": "object",
        "required": [
          "dstIp"
        ],
        "properties": {
          "from": {
            "type": "string",
            "description": "the device from which the traffic originates. If this is specified, then the srcIp will be considered as a\npacket header only, else, the srcIp will be resolved to specific location(s) and used as the source in the\npath search. Either the source device or srcIp must be specified."
          },
          "srcIp": {
            "type": "string",
            "description": "the source IP address or subnet of packets entering the network. For multicast (*, G) paths, set srcIp = G\n(multicast group address).",
            "examples": [
              "10.10.10.10"
            ]
          },
          "dstIp": {
            "type": "string",
            "description": "the destination IP address or subnet of packets entering the network. For multicast (*, G) paths, set dstIp\n= G (multicast group address).",
            "examples": [
              "10.10.10.64/28"
            ]
          },
          "ipProto": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 255,
            "description": "the IP protocol",
            "examples": [
              6
            ]
          },
          "srcPort": {
            "type": "string",
            "description": "the L4 source port, like \"80\" or a range \"8080-8088\"",
            "examples": [
              "80"
            ]
          },
          "dstPort": {
            "type": "string",
            "description": "the L4 destination port, like \"80\" or a range \"8080-8088\"",
            "examples": [
              "8080-8088"
            ]
          },
          "icmpType": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 255,
            "description": "the ICMP type. Implies ipProto = 1."
          },
          "fin": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 1,
            "description": "the FIN (finish) bit (0 or 1). Implies ipProto = 6.",
            "examples": [
              1
            ]
          },
          "syn": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 1,
            "description": "the SYN (synchronize) bit (0 or 1). Implies ipProto = 6.",
            "examples": [
              1
            ]
          },
          "rst": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 1,
            "description": "the RST (reset) bit (0 or 1). Implies ipProto = 6.",
            "examples": [
              1
            ]
          },
          "psh": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 1,
            "description": "the PSH (push) bit (0 or 1). Implies ipProto = 6.",
            "examples": [
              1
            ]
          },
          "ack": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 1,
            "description": "the ACK (acknowledgment) bit (0 or 1). Implies ipProto = 6.",
            "examples": [
              1
            ]
          },
          "urg": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "maximum": 1,
            "description": "the URG (urgent) bit (0 or 1). Implies ipProto = 6.",
            "examples": [
              1
            ]
          },
          "appId": {
            "type": "string",
            "description": "the L7 app-id or \"unidentified\" to exclude paths that traverse firewall policies with app-id matches. If the\nsystem doesn't recognize the provided value, it handles the value the same as \"unidentified\" and includes\nthe value in the `unrecognizedValues` response field. The applications that are recognized by the model can\nbe obtained using GET /api/l7-applications.",
            "examples": [
              "ssh"
            ]
          },
          "userId": {
            "type": "string",
            "description": "the L7 user-id or \"unidentified\" to exclude paths that traverse firewall policies with user-id matches. If\nthe system doesn't recognize the provided value, it handles the value the same as \"unidentified\" and\nincludes the value in the `unrecognizedValues` response field. See [Path Analysis with Layer 7\nUser-Group](https://docs.fwd.app/latest/application/search/path-analysis/layer7_ugroup/) for more info.",
            "examples": [
              "user1"
            ]
          },
          "userGroupId": {
            "type": "string",
            "description": "the L7 user-group-id. If the system doesn't recognize the provided value, the search returns 0 results as\nthere are no paths that traverse firewall policies with that user-group-id match, and the value is included\nin the `unrecognizedValues` response field. See [Path Analysis with Layer 7\nUser-Group](https://docs.fwd.app/latest/application/search/path-analysis/layer7_ugroup/) for more info.",
            "examples": [
              "group1"
            ]
          },
          "url": {
            "type": "string",
            "description": "the L7 URL that traffic of interest is trying to access. Prefix wildcards are supported for subdomains.\nSuffix wildcards are supported for top-level domains and URL paths. See [Path Analysis with Layer 7\nURL](https://docs.fwd.app/latest/application/search/path-analysis/layer7_url/) for more policy patterns supported\nin the model.",
            "examples": [
              "*.example.com"
            ]
          }
        }
      },
      "Encryptor": {
        "type": "object",
        "required": [
          "name",
          "siteConnection",
          "tunnels"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "encryptor"
            ]
          },
          "siteConnection": {
            "$ref": "#/components/schemas/EncryptorConnection",
            "description": "A connection to a high site"
          },
          "underlayConnection": {
            "$ref": "#/components/schemas/EncryptorConnection",
            "description": "A connection to the underlay network (a low site)"
          },
          "tunnels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EncryptorTunnel"
            },
            "description": "Tunnels to other encryptor devices. A tunnel source address is modeled as residing on this device and the\ndestination addresses on another encryptor device. A source address may be reused on an encryptor. Each\ndestination address must match the source address of the tunnel on another encryptor, and vice-versa"
          },
          "subnets": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Subnets to route to the high site, in addition to the source addresses of tunnels on the `siteConnection`\ngateway device"
          }
        }
      },
      "EncryptorList": {
        "type": "object",
        "required": [
          "encryptors"
        ],
        "properties": {
          "encryptors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Encryptor"
            }
          }
        }
      },
      "EncryptorPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "siteConnection": {
            "$ref": "#/components/schemas/EncryptorConnection"
          },
          "underlayConnection": {
            "$ref": "#/components/schemas/EncryptorConnection"
          },
          "tunnels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EncryptorTunnel"
            },
            "description": "If specified, this list will **replace** all existing tunnels on the encryptor."
          },
          "subnets": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "If specified, this set will **replace** all existing subnets on the encryptor."
          }
        }
      },
      "InternetNode": {
        "type": "object",
        "required": [
          "name",
          "connections"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "inet"
            ]
          },
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3SyntheticWanConnection"
            }
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SyntheticNatEntry"
            }
          },
          "subnetsToExclude": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Public subnets that should not be located at this device."
          }
        }
      },
      "InternetNodePatch": {
        "type": "object",
        "properties": {
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3SyntheticWanConnection"
            },
            "description": "If specified, this list will **replace** all existing connections on the internet node."
          },
          "name": {
            "type": "string"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SyntheticNatEntry"
            },
            "description": "If specified, this list will **replace** all existing translations on the internet node."
          },
          "subnetsToExclude": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "If specified, this list will **replace** all existing excluded subnets on the internet node."
          }
        }
      },
      "IntranetNode": {
        "type": "object",
        "required": [
          "name",
          "connections"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "inet"
            ]
          },
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3SyntheticWanConnection"
            }
          }
        }
      },
      "IntranetNodeList": {
        "type": "object",
        "required": [
          "intranetNodes"
        ],
        "properties": {
          "intranetNodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntranetNode"
            }
          }
        }
      },
      "IntranetNodePatch": {
        "type": "object",
        "properties": {
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3SyntheticWanConnection"
            },
            "description": "If specified, this list will **replace** all existing connections on the intranet node."
          },
          "name": {
            "type": "string"
          }
        }
      },
      "L2Vpn": {
        "type": "object",
        "required": [
          "name",
          "connections"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "l2vpn"
            ]
          },
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L2VpnConnection"
            }
          }
        }
      },
      "L2VpnConnection": {
        "type": "object",
        "required": [
          "device",
          "port"
        ],
        "properties": {
          "device": {
            "type": "string",
            "description": "The customer edge device."
          },
          "port": {
            "type": "string",
            "description": "The physical edge port on the customer edge device.",
            "examples": [
              "eth1/1"
            ]
          },
          "vlan": {
            "type": "integer",
            "format": "int32",
            "examples": [
              100
            ]
          },
          "name": {
            "type": "string",
            "description": "An optional name for this connection, which will be used as the interface name created on the synthetic\ndevice that links to the customer edge device."
          }
        }
      },
      "L2VpnList": {
        "type": "object",
        "required": [
          "l2Vpns"
        ],
        "properties": {
          "l2Vpns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L2Vpn"
            }
          }
        }
      },
      "L2VpnPatch": {
        "type": "object",
        "properties": {
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L2VpnConnection"
            },
            "description": "If specified, this list will **replace** all existing connections on the L2 VPN node."
          },
          "name": {
            "type": "string"
          }
        }
      },
      "L3SyntheticWanConnection": {
        "type": "object",
        "required": [
          "uplinkPort"
        ],
        "properties": {
          "uplinkPort": {
            "$ref": "#/components/schemas/DevicePort",
            "description": "The physical uplink port on the edge device.",
            "examples": [
              {
                "device": "nyc-rtr-01",
                "port": "eth1/1"
              }
            ]
          },
          "gatewayPort": {
            "$ref": "#/components/schemas/DevicePort",
            "description": "The virtual gateway port, if different than `uplinkPort`.",
            "examples": [
              {
                "device": "nyc-rtr-01",
                "port": "vlan100"
              }
            ]
          },
          "vlan": {
            "type": "integer",
            "format": "int32",
            "description": "The VLAN of traffic from `uplinkPort`, if tagged.",
            "examples": [
              100
            ]
          },
          "name": {
            "type": "string",
            "description": "An optional name for this connection, which will be used as the interface name created on the synthetic\ndevice that links to the physical edge port."
          },
          "vrf": {
            "type": "string",
            "description": "An optional name for the VRF on the synthetic device under which this connection resides."
          },
          "site": {
            "type": "string",
            "description": "An optional name for the site in which this connection's gateway device resides. A site is a collection of\ndevices that redistribute routes learned from the synthetic device to each other. Grouping connections\ntogether into a single site enables more accurate site subnet autodiscovery when using `IP_ROUTES` or\n`BGP_ROUTES`."
          },
          "subnets": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Advertised subnets. Routes for these subnets are created on the synthetic device if received by another CE.\nRequired (and must not be empty) if `subnetAutoDiscovery` is `NONE`.",
            "examples": [
              [
                "123.223.47.0/24"
              ]
            ]
          },
          "subnetAutoDiscovery": {
            "$ref": "#/components/schemas/AutoDiscoverySource",
            "description": "The types of routes from which advertised subnets are automatically inferred in the gateway device’s routing\ntable. Defaults to `NONE`. If `INTERFACE_ADDRESSES`, the gateway port’s IP address is used. If `IP_ROUTES`,\nsubnets are inferred from the gateway device’s RIB. If `BGP_ROUTES`, subnets are inferred from the gateway\ndevice’s Adj-RIB-Out.\n\nNote: If not `NONE`, routes are created on the synthetic device for both autodiscovered subnets, as well any\nsubnets specified in `subnets`, that are received by another CE.\n\nNote: Using `BGP_ROUTES` will automatically enable collection of Adj-RIB-Out from the gateway device in\nfuture network collections.",
            "examples": [
              "NONE"
            ]
          },
          "peerIps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "IP addresses of BGP peers to which this connection’s site subnets are advertised. If empty, routes\nadvertised to all BGP peers are examined.\n\nNote: This set is only used if `subnetAutoDiscovery` is `BGP_ROUTES`.",
            "examples": [
              [
                "1.1.1.1"
              ]
            ]
          },
          "backdoorLinkPorts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DevicePort"
            },
            "description": "L3 interfaces that provide backdoor connectivity between sites."
          },
          "advertisesDefaultRoute": {
            "type": "boolean",
            "description": "Whether the CE advertises the default route. Defaults to `false`.\n\nNote: This property is only used if `subnetAutoDiscovery` is `IP_ROUTES`, which should be the case when BGP\ncollection is not enabled on the CE. If the Adj-RIB-Out is not collected, the RIB is examined and a default\nroute forwarded out `gatewayPort` is skipped if this property is false."
          }
        }
      },
      "L3Vpn": {
        "type": "object",
        "required": [
          "name",
          "connections"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "l3vpn"
            ]
          },
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3SyntheticWanConnection"
            }
          }
        }
      },
      "L3VpnList": {
        "type": "object",
        "required": [
          "l3Vpns"
        ],
        "properties": {
          "l3Vpns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3Vpn"
            }
          }
        }
      },
      "L3VpnPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L3SyntheticWanConnection"
            },
            "description": "If specified, this list will **replace** all existing connections on the L3 VPN node."
          }
        }
      },
      "SyntheticConnections": {
        "type": "object",
        "properties": {
          "connections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SyntheticConnection"
            }
          }
        }
      },
      "WanCircuit": {
        "type": "object",
        "required": [
          "name",
          "connection1",
          "connection2"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "wan-circuit-01"
            ]
          },
          "connection1": {
            "$ref": "#/components/schemas/WanCircuitConnection"
          },
          "connection2": {
            "$ref": "#/components/schemas/WanCircuitConnection"
          }
        }
      },
      "WanCircuitList": {
        "type": "object",
        "properties": {
          "wanCircuits": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WanCircuit"
            }
          }
        }
      },
      "WanCircuitPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "wan-circuit-01"
            ]
          },
          "connection1": {
            "$ref": "#/components/schemas/WanCircuitConnection"
          },
          "connection2": {
            "$ref": "#/components/schemas/WanCircuitConnection"
          }
        }
      },
      "DevicePort": {
        "type": "object",
        "properties": {
          "device": {
            "type": "string"
          },
          "port": {
            "type": "string"
          }
        }
      },
      "EncryptorConnection": {
        "type": "object",
        "required": [
          "uplinkPort"
        ],
        "properties": {
          "uplinkPort": {
            "$ref": "#/components/schemas/DevicePort",
            "description": "The physical uplink port on the edge device.",
            "examples": [
              {
                "device": "nyc-rtr-01",
                "port": "eth1/1"
              }
            ]
          },
          "gatewayPort": {
            "$ref": "#/components/schemas/DevicePort",
            "description": "The virtual gateway port, if different than `uplinkPort`.",
            "examples": [
              {
                "device": "nyc-rtr-01",
                "port": "vlan100"
              }
            ]
          },
          "vlan": {
            "type": "integer",
            "format": "int32",
            "description": "The VLAN of traffic from `uplinkPort`, if tagged.",
            "examples": [
              100
            ]
          },
          "name": {
            "type": "string",
            "description": "An optional name for this connection, which will be used as the interface name created on the synthetic\ndevice that links to the physical edge port."
          }
        }
      },
      "EncryptorTunnel": {
        "type": "object",
        "required": [
          "source",
          "destination"
        ],
        "properties": {
          "source": {
            "type": "string",
            "description": "Source IP address of an encryptor tunnel",
            "examples": [
              "1.1.1.1"
            ]
          },
          "destination": {
            "type": "string",
            "description": "Destination IP address of an encryptor tunnel",
            "examples": [
              "2.2.2.2"
            ]
          }
        }
      },
      "AutoDiscoverySource": {
        "type": "string",
        "enum": [
          "NONE",
          "IP_ROUTES",
          "BGP_ROUTES",
          "INTERFACE_ADDRESSES"
        ]
      },
      "SyntheticNatEntry": {
        "type": "object",
        "required": [
          "insideAddress",
          "outsideAddress"
        ],
        "properties": {
          "insideAddress": {
            "type": "string",
            "examples": [
              "10.0.0.1"
            ]
          },
          "outsideAddress": {
            "type": "string",
            "description": "A public (non-RFC1918) address",
            "examples": [
              "1.1.1.1"
            ]
          }
        }
      },
      "SyntheticConnection": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        }
      },
      "WanCircuitConnection": {
        "type": "object",
        "required": [
          "device",
          "port"
        ],
        "properties": {
          "device": {
            "type": "string",
            "description": "A customer edge device name"
          },
          "port": {
            "type": "string",
            "description": "The name of the connected port on `device`"
          },
          "vlan": {
            "type": "integer",
            "format": "int32",
            "description": "The VLAN of traffic from `port`, if tagged",
            "examples": [
              100
            ]
          },
          "name": {
            "type": "string",
            "description": "An optional name for this connection, which will be used as the interface name created on the synthetic\ndevice that links to the edge device."
          }
        }
      },
      "NewUser": {
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "properties": {
          "email": {
            "type": "string",
            "examples": [
              "me@example.com"
            ]
          },
          "username": {
            "type": "string",
            "description": "Defaults to the value of `email`",
            "examples": [
              "me@example.com"
            ]
          },
          "password": {
            "type": "string",
            "examples": [
              "zF4H+K;5]qE~%9G=nbAk"
            ]
          },
          "isSupport": {
            "type": "boolean",
            "description": "Defaults to `false`",
            "examples": [
              false
            ]
          },
          "enabled": {
            "type": "boolean",
            "description": "Defaults to `true`",
            "examples": [
              true
            ]
          }
        }
      },
      "User": {
        "type": "object",
        "required": [
          "id",
          "username",
          "enabled",
          "authSource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "A system-generated identifier that can be used in API requests to manage this account",
            "examples": [
              "55555"
            ]
          },
          "username": {
            "type": "string",
            "description": "The identifier used to authenticate (log in) with this account",
            "examples": [
              "me@example.com"
            ]
          },
          "email": {
            "type": "string",
            "description": "The email address at which this user wishes to receive system-generated emails",
            "examples": [
              "me@example.com"
            ]
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether authentication (login and API use) is currently permitted for this user account"
          },
          "authSource": {
            "type": "string",
            "description": "How this user authenticates. `LOCAL` accounts exist only in the Forward Platform.",
            "examples": [
              "SAML"
            ],
            "enum": [
              "LOCAL",
              "TACACS",
              "SAML",
              "LDAP"
            ]
          },
          "externalGroups": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The names of any LDAP or SSO (SAML) groups to which this account belongs. Updated each time this user\nauthenticates.",
            "examples": [
              [
                "netops"
              ]
            ]
          },
          "isSupport": {
            "type": "boolean",
            "description": "Whether this account belongs to Forward Networks support staff. `true` excludes the account from statistics\nshown on the Engagement dashboard."
          },
          "lastActive": {
            "type": "string",
            "description": "The approximate time of the most recent authenticated request from this account",
            "examples": [
              "2024-12-31T23:59:59.789Z"
            ]
          }
        }
      },
      "UserPatch": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "examples": [
              "me@example.com"
            ]
          },
          "username": {
            "type": "string",
            "description": "Changes the username of a user whose `authSource` is \"LOCAL\"",
            "examples": [
              "me@example.com"
            ]
          },
          "password": {
            "type": "string",
            "description": "Assigns a new temporary password to a user whose `authSource` is \"LOCAL\". The user will be prompted to\nchoose a new password when they log in with this password.",
            "examples": [
              "zF4H+K;5]qE~%9G=nbAk"
            ]
          },
          "isSupport": {
            "type": "boolean",
            "examples": [
              false
            ]
          },
          "enabled": {
            "type": "boolean",
            "examples": [
              true
            ]
          }
        }
      },
      "Users": {
        "type": "object",
        "properties": {
          "users": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/User"
            }
          }
        }
      },
      "OsVulnerabilityAnalysis": {
        "type": "object",
        "required": [
          "vulnerabilities",
          "offset",
          "total",
          "indexCreatedAt"
        ],
        "properties": {
          "vulnerabilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OsVulnerability"
            }
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "description": "The number of vulnerabilities dropped from the front of `vulnerabilities` due to paging.",
            "examples": [
              200
            ]
          },
          "total": {
            "type": "integer",
            "format": "int32",
            "description": "The total number of vulnerabilities available in the analysis. This number can be larger than `offset` plus\nthe length of `vulnerabilities` if some have been dropped from the back of `vulnerabilities` due to paging.",
            "examples": [
              1234
            ]
          },
          "indexCreatedAt": {
            "type": "string",
            "description": "When the CVE index used for analysis was created (epoch milliseconds)",
            "examples": [
              "2025-06-01T12:34:56.789Z"
            ]
          },
          "indexUploadedAt": {
            "type": "string",
            "description": "When the CVE index used for analysis was uploaded to the server (epoch milliseconds)",
            "examples": [
              "2025-06-03T04:05:06.007Z"
            ]
          },
          "indexUploadedBy": {
            "type": "string",
            "description": "The id of the `User` who uploaded the CVE index used for analysis",
            "examples": [
              "345"
            ]
          }
        }
      },
      "VulnerabilityAnalysis": {
        "type": "object",
        "properties": {
          "vulnerabilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Vulnerability"
            },
            "description": "Information about the CVEs that might impact devices in the network."
          },
          "indexCreatedAt": {
            "type": "string",
            "description": "When the CVE index used for analysis was created.",
            "examples": [
              "2025-06-01T12:34:56.789Z"
            ]
          },
          "indexUploadedAt": {
            "type": "string",
            "description": "When the CVE index used for analysis was uploaded to the server.",
            "examples": [
              "2025-06-03T04:05:06.007Z"
            ]
          },
          "indexUploadedBy": {
            "type": "string",
            "description": "The username of the User who uploaded the CVE index used for analysis, if known. Absent if the user account has\nbeen deleted.",
            "examples": [
              "me@example.com"
            ]
          },
          "indexUploadedById": {
            "type": "string",
            "description": "The ID of the User who uploaded the CVE index used for analysis.",
            "examples": [
              "345"
            ]
          }
        }
      },
      "VulnerabilityWithDevices": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CveInfo"
          },
          {
            "type": "object",
            "properties": {
              "osInfos": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CveOsInfoWithDevices"
                },
                "description": "OS-specific information about this CVE. Includes a detection result for each device running an affected\noperating system version."
              }
            }
          }
        ]
      },
      "VulnerabilityVendor": {
        "type": "string",
        "enum": [
          "CISCO",
          "JUNIPER",
          "ARISTA",
          "PICA8",
          "F5",
          "A10",
          "CHECKPOINT",
          "HP",
          "FORTINET",
          "PALO_ALTO_NETWORKS",
          "VMWARE",
          "CITRIX",
          "CUMULUS",
          "RIVERBED",
          "LINUX_GENERIC",
          "SYMANTEC",
          "AVI_NETWORKS",
          "AVAYA",
          "T128",
          "ARUBA",
          "VIASAT",
          "SILVER_PEAK",
          "PENSANDO",
          "FORCEPOINT",
          "NOKIA",
          "VERSA",
          "BROCADE",
          "EXTREME",
          "DELL",
          "HUAWEI",
          "GD",
          "EDGE_CORE"
        ]
      },
      "VulnerabilityVendorOs": {
        "type": "string",
        "enum": [
          "arista_eos",
          "avi_vantage",
          "bluecoat",
          "cisco_ios",
          "cisco_ios_xe",
          "cisco_ios_xr",
          "cisco_nxos",
          "cisco_asa",
          "cisco_ftd",
          "cisco_fxos",
          "cisco_nxos_aci",
          "cisco_apic",
          "cisco_sg",
          "cisco_wireless",
          "viptela",
          "juniper_junos",
          "juniper_srx",
          "juniper_netscreen",
          "linux_ovs_ofctl",
          "pica8_ovs_ofctl",
          "f5",
          "f5_os_hypervisor",
          "a10_acos",
          "checkpoint",
          "hp_provision",
          "hp_comware",
          "fortinet",
          "pan_os",
          "esxi",
          "citrix_netscaler",
          "cumulus",
          "riverbed_steelhead",
          "riverbed_interceptor",
          "128t",
          "aruba_switch",
          "aruba_aos_cx",
          "aruba_wifi_controller",
          "silver_peak_edgeconnect",
          "pensando",
          "cloud_genix",
          "forcepoint",
          "avaya_sr",
          "avaya_ers",
          "viasat_encryptor",
          "nokia",
          "huawei_switch",
          "versa_sase",
          "versa_switch",
          "brocade_switch",
          "cisco_encs_nfv",
          "extreme_nos",
          "meraki_ms",
          "meraki_mr",
          "meraki_mx",
          "mist_ap",
          "dell_os6",
          "dell_os9",
          "dell_os10",
          "dell_sonic",
          "gd_encryptor",
          "edge_core_sonic"
        ]
      },
      "VulnerabilityDetectionResult": {
        "type": "object",
        "required": [
          "device",
          "vulnerable"
        ],
        "properties": {
          "device": {
            "type": "string",
            "examples": [
              "dev01"
            ]
          },
          "vulnerable": {
            "type": "boolean",
            "description": "Absent if an error prevented analysis from completing",
            "examples": [
              false
            ]
          },
          "fileLines": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LineRange"
              }
            },
            "description": "Relevant source file lines for the device and CVE",
            "examples": [
              {
                "dev01,configuration.txt": [
                  {
                    "start": 117,
                    "end": 119
                  }
                ]
              }
            ]
          }
        }
      },
      "OsVulnerability": {
        "type": "object",
        "required": [
          "id",
          "severity",
          "vendor",
          "os",
          "osVersions",
          "dependsOnConfig",
          "detectionMethod"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The Common Vulnerabilities and Exposures ([CVE](https://www.cve.org)) ID assigned to this vulnerability in\nthe National Vulnerability Database ([NVD](https://nvd.nist.gov))",
            "examples": [
              "CVE-2019-0201"
            ]
          },
          "description": {
            "type": "string",
            "examples": [
              "An issue is present in Apache ZooKeeper 1.0.0 to 3.4.13 and 3.5.0-alpha to 3.5.4-beta. ZooKeeper’s getACL()\ncommand…"
            ]
          },
          "severity": {
            "type": "string",
            "examples": [
              "MEDIUM"
            ],
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ]
          },
          "url": {
            "type": "string",
            "description": "URL of this vulnerability’s vendor advisory, if available, or else the URL of the best source of information\nabout the vulnerability that’s currently available",
            "examples": [
              "https://www.a10networks.com/blog/cve-2016-0270-gcm-nonce-vulnerability"
            ]
          },
          "publishedDate": {
            "type": "string",
            "examples": [
              "2023-12-31"
            ]
          },
          "v2Score": {
            "type": "number",
            "format": "double",
            "description": "Score assigned by the Common Vulnerability Scoring System ([CVSS](https://nvd.nist.gov/vuln-metrics/cvss))\nv2.0 standard",
            "examples": [
              6.1
            ]
          },
          "v3Score": {
            "type": "number",
            "format": "double",
            "description": "Score assigned by the Common Vulnerability Scoring System ([CVSS](https://nvd.nist.gov/vuln-metrics/cvss))\nv3.x standard",
            "examples": [
              9.8
            ]
          },
          "v4Score": {
            "type": "number",
            "format": "double",
            "description": "Score assigned by the Common Vulnerability Scoring System\n([CVSS](https://www.first.org/cvss/v4.0/specification-document)) v4.0 standard",
            "examples": [
              8.4
            ]
          },
          "knownExploitSource": {
            "type": "string",
            "description": "`CISA` if the vulnerability is in the Cybersecurity and Infrastructure Security Agency’s Known Exploited\nVulnerabilities ([KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)) catalog. `VENDOR` if\nthe vendor advisory (the page at `url`) indicates that the vulnerability has a known exploit. Absent\notherwise.",
            "examples": [
              "CISA"
            ],
            "enum": [
              "CISA",
              "VENDOR"
            ]
          },
          "weaknesses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Common Weakness Enumeration ([CWE](https://cwe.mitre.org/about/new_to_cwe.html)) IDs associated with this\nCVE",
            "examples": [
              [
                "CWE-123"
              ]
            ]
          },
          "vendor": {
            "$ref": "#/components/schemas/VulnerabilityVendor",
            "examples": [
              "ARISTA"
            ]
          },
          "os": {
            "$ref": "#/components/schemas/VulnerabilityVendorOs",
            "examples": [
              "arista_eos"
            ]
          },
          "osVersions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "4.15.0F"
              ]
            ]
          },
          "dependsOnConfig": {
            "type": "boolean",
            "description": "Whether the CVE depends on configuration for this OS. Null if unknown.",
            "examples": [
              true
            ]
          },
          "detectionMethod": {
            "type": "string",
            "description": "How the set of possibly matching devices was constructed. `CONFIG` means that the analysis was more thorough\nthan using just the OS version. The `CONFIG` method yields fewer false positives.",
            "examples": [
              "OS_VERSION"
            ],
            "enum": [
              "OS_VERSION",
              "CONFIG"
            ]
          },
          "devices": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Possibly impacted devices. Present when `detectionMethod` is \"OS_VERSION\".",
            "examples": [
              [
                "dev01",
                "dev02"
              ]
            ]
          },
          "deviceResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VulnerabilityDetectionResult"
            },
            "description": "Results of device configuration analysis for this vulnerability. Present when `detectionMethod`\nis \"CONFIG\"."
          }
        }
      },
      "CveInfo": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The Common Vulnerabilities and Exposures ([CVE](https://www.cve.org)) ID assigned to this vulnerability in\nthe National Vulnerability Database ([NVD](https://nvd.nist.gov)).",
            "examples": [
              "CVE-2019-0201"
            ]
          },
          "description": {
            "type": "string",
            "description": "This vulnerability’s description in the [NVD](https://nvd.nist.gov).",
            "examples": [
              "An issue is present in Apache ZooKeeper 1.0.0 to 3.4.13 and 3.5.0-alpha to 3.5.4-beta. ZooKeeper’s getACL()\ncommand…"
            ]
          },
          "hasCisaKevEntry": {
            "type": "boolean",
            "description": "Whether CISA’s [KEV Catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) mentions a known\nexploit for this CVE."
          },
          "weaknesses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Common Weakness Enumeration ([CWE](https://cwe.mitre.org/about/new_to_cwe.html)) IDs associated with this\nCVE.",
            "examples": [
              [
                "CWE-345",
                "CWE-765"
              ]
            ]
          }
        }
      },
      "CveOsInfo": {
        "type": "object",
        "properties": {
          "vendor": {
            "$ref": "#/components/schemas/Vendor"
          },
          "os": {
            "$ref": "#/components/schemas/VendorOs"
          },
          "severity": {
            "type": "string",
            "description": "Severity based on one of this vulnerability’s CVSS scores according to the [Qualitative Severity\nRatings](https://nvd.nist.gov/vuln-metrics/cvss#:~:text=Qualitative%20Severity%20Ratings) table. The priority\norder of scores is `v4Score`, then `v3Score`, then `v2Score`. \"NONE\" if no CVSS score is available for this\nvulnerability.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ]
          },
          "v2Score": {
            "type": "number",
            "format": "double",
            "description": "Score assigned by the Common Vulnerability Scoring System ([CVSS](https://nvd.nist.gov/vuln-metrics/cvss))\nv2.0 standard.",
            "examples": [
              6.1
            ]
          },
          "v3Score": {
            "type": "number",
            "format": "double",
            "description": "Score assigned by the Common Vulnerability Scoring System ([CVSS](https://nvd.nist.gov/vuln-metrics/cvss))\nv3.x standard.",
            "examples": [
              9.8
            ]
          },
          "v4Score": {
            "type": "number",
            "format": "double",
            "description": "Score assigned by the Common Vulnerability Scoring System\n([CVSS](https://www.first.org/cvss/v4.0/specification-document)) v4.0 standard.",
            "examples": [
              8.4
            ]
          },
          "url": {
            "type": "string",
            "description": "URL of this vulnerability’s vendor advisory, if available, or else the URL of the best source of information\nabout the vulnerability that’s currently available.",
            "examples": [
              "https://www.a10networks.com/blog/cve-2016-0270-gcm-nonce-vulnerability"
            ]
          },
          "publishDate": {
            "type": "string",
            "description": "Publication date of the information at `url` if known.",
            "examples": [
              "2023-12-31"
            ]
          },
          "advisoryMentionsExploit": {
            "type": "boolean",
            "description": "Whether the vendor advisory at `url` says there’s a known exploit. Included only if true."
          },
          "configDependent": {
            "type": "boolean",
            "description": "Whether this vulnerability depends on a device’s configuration for this OS. Absent if unknown."
          },
          "configAnalysis": {
            "type": "string",
            "description": "Present and can be any allowed value if `configDependent` is true. Absent if `configDependent` is false.\nCan be either \"UNSUPPORTED\" or absent if `configDependent` is absent (unknown).",
            "enum": [
              "UNSUPPORTED",
              "IN_PROGRESS",
              "SUPPORTED"
            ]
          }
        }
      },
      "DetectionResult": {
        "type": "string",
        "enum": [
          "VULNERABLE",
          "OS_VULNERABLE",
          "UNIMPLEMENTED",
          "UNCONFIRMED",
          "NOT_VULNERABLE"
        ]
      },
      "DetectionResultDeviceCount": {
        "type": "object",
        "properties": {
          "result": {
            "$ref": "#/components/schemas/DetectionResult",
            "examples": [
              "VULNERABLE"
            ]
          },
          "deviceCount": {
            "type": "integer",
            "format": "int32",
            "examples": [
              80
            ]
          }
        }
      },
      "CveOsInfoWithDeviceCounts": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CveOsInfo"
          },
          {
            "type": "object",
            "properties": {
              "osVersions": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The OS versions of the devices in the network that are potentially affected by this CVE.",
                "examples": [
                  [
                    "4.15.0F"
                  ]
                ]
              },
              "deviceCount": {
                "type": "integer",
                "format": "int32",
                "description": "Total number of devices in the network that are running an affected version of this OS and thus are\npotentially affected by this CVE.",
                "examples": [
                  200
                ]
              },
              "resultCounts": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DetectionResultDeviceCount"
                },
                "description": "The number of devices in the network that are potentially affected by this CVE broken down by detection\nresult. These counts add up to `deviceCount`.",
                "examples": [
                  [
                    {
                      "result": "VULNERABLE",
                      "deviceCount": 80
                    },
                    {
                      "result": "NOT_VULNERABLE",
                      "deviceCount": 120
                    }
                  ]
                ]
              },
              "locationIds": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The IDs of the locations of the devices in the network that are potentially affected by this CVE.",
                "examples": [
                  [
                    "atl",
                    "nyc-b"
                  ]
                ]
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Tags associated with any devices in the network that are potentially affected by this CVE. Absent if the\ndevices have no tags.",
                "examples": [
                  [
                    "SEC"
                  ]
                ]
              }
            }
          }
        ]
      },
      "Vulnerability": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CveInfo"
          },
          {
            "type": "object",
            "properties": {
              "osInfos": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CveOsInfoWithDeviceCounts"
                },
                "description": "OS-specific information about this CVE. Includes a summary of analysis results for devices with each affected\noperating system."
              }
            }
          }
        ]
      },
      "VulnerabilityDevice": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name that uniquely identifies the device in the network. For most devices, this is the user-assigned\n[classic device](https://docs.fwd.app/latest/api/classic-devices/) name. For a virtual context, this is the\nclassic device name plus context name. For a cloud device, this is a globally unique identifier assigned by the\ncloud provider.",
            "examples": [
              "nyc-dc01-fw02"
            ]
          },
          "osVersion": {
            "type": "string",
            "description": "The device’s operating system version in the network Snapshot.",
            "examples": [
              "4.15.0F"
            ]
          },
          "model": {
            "type": "string",
            "description": "The device’s model name.",
            "examples": [
              "BIG-IP Virtual Edition"
            ]
          },
          "managementIps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The device’s management IP addresses.",
            "examples": [
              [
                "10.10.10.10"
              ]
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Tags assigned to the device. Absent if the device has none.",
            "examples": [
              [
                "SEC"
              ]
            ]
          },
          "locationId": {
            "type": "string",
            "description": "The `id` of the device’s assigned [location](https://docs.fwd.app/latest/api/network-locations/).",
            "examples": [
              "nyc"
            ]
          },
          "internetAddressable": {
            "type": "boolean",
            "description": "Whether the device can receive internet traffic."
          },
          "status": {
            "type": "string",
            "description": "The device’s vulnerability status for the CVE.",
            "examples": [
              "VULNERABLE"
            ],
            "enum": [
              "VULNERABLE",
              "POTENTIALLY_VULNERABLE",
              "NOT_VULNERABLE"
            ]
          },
          "result": {
            "$ref": "#/components/schemas/DetectionResult",
            "description": "The device’s [detection result](https://docs.fwd.app/latest/application/security/vulnerability/#detection-results)\nfor the CVE.",
            "examples": [
              "VULNERABLE"
            ]
          },
          "fileRanges": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/LineRange"
              }
            },
            "description": "Relevant line ranges in the device’s configuration. Property names in this object are filenames. Use\n[Get device data file content](https://docs.fwd.app/latest/api/network-devices/get-device-file-content/) to\nobtain a referenced file.",
            "examples": [
              {
                "nyc-dc01-fw02,configuration.txt": [
                  {
                    "start": 286,
                    "end": 291
                  }
                ]
              }
            ]
          }
        }
      },
      "CveOsInfoWithDevices": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CveOsInfo"
          },
          {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "description": "The CVE description published at `url`.",
                "examples": [
                  "Back in February we were contacted by Hanno Böck who had discovered an issue with how certain..."
                ]
              },
              "devices": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/VulnerabilityDevice"
                },
                "description": "Devices in the network that are running an affected version of this OS and thus are potentially affected by\nthis CVE. A detection result is included for each device. Relevant lines of device configuration are\nincluded for each device as well when possible."
              }
            }
          }
        ]
      }
    },
    "securitySchemes": {
      "api_token": {
        "type": "http",
        "scheme": "basic"
      }
    },
    "parameters": {
      "SnapshotId": {
        "name": "snapshotId",
        "in": "query",
        "description": "An optional Snapshot id. If omitted, the network’s latest processed Snapshot is used.",
        "schema": {
          "type": "string"
        }
      }
    }
  }
}