openapi: 3.1.0
info:
  title: 'Forward Networks: Classic Devices API'
  summary: Specify the network devices to collect from and model
  description: |-
    A _classic device_ is a conventional traffic-forwarding network device such as a router, switch, or firewall.
    Defining one requires choosing a unique name for it and providing its hostname or IP address (`host`) so the
    network’s Collector can connect to it and gather the configuration and state needed to model its behavior.

    A classic device can include a `type`, a [jump server](https://docs.fwd.app/latest/api/jump-servers/) ID if one is
    needed to reach the device, [credential](https://docs.fwd.app/latest/api/credentials/) IDs for authentication, and
    optional settings for fine-tuning the collection process. The Collector will attempt to automatically determine a
    classic device’s correct type and credentials (from those that have been defined) if they’re unspecified.
  contact:
    email: support@forwardnetworks.com
  license:
    name: MIT
    url: https://spdx.org/licenses/MIT
  version: ${apiVersion}
servers:
  - url: /api
security:
  - api_token: []
tags:
  - name: Classic Devices
    description: Specify the network devices to collect from and model
paths:
  /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'
    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'
    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
        to 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: {}
  /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: {}
  /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: {}
  /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: {}
  /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'
  /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: {}
  /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'
    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'
    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
        change.
      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'
    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: {}
components:
  schemas:
    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
                letters, 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
                for 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
                auto-association will be attempted using credentials configured to allow it if this property is unspecified
                and 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
                Avi controllers). On Checkpoint, this credential is used for TACACS privilege escalation. Credential
                auto-association will be attempted using credentials configured to allow it if this property is unspecified
                and 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
                `PRIVILEGED_MODE` credential for `cliCredential2Id`. Credential auto-association will be attempted using
                credentials configured to allow it if this property is unspecified and collecting from this device requires
                this 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
                HTTP. Credential auto-association will be attempted using credentials configured to allow it if this
                property 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
                true. Credential auto-association will be attempted using credentials configured to allow it if this
                property 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
                `DISABLE_PAGINATION`. Per-command pagination (such as appending `| more`) may be used if set to
                `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.
                Relevant 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
                `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
                can prevent spurious connectivity test failures if the device’s SSH server is configured with a connection
                rate limit.
              examples:
                - 10
            useFileTransferForLargeOutput:
              type: boolean
              description: |-
                Whether to use file transfer instead of printing large command output directly to the shell. This is
                currently only supported for Juniper devices when executing routing table commands. The primary purpose is
                to avoid printing large outputs directly to the shell, which on Juniper devices can interfere with packet
                forwarding performance. Instead, the command output is written to a temporary file on the device and then
                transferred over a separate connection. After the transfer is complete, the temporary file is deleted to
                prevent 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
                set, 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
                required to model a [synthetic device](https://docs.fwd.app/latest/api/synthetic-devices/) connected to this
                device.
              examples:
                - false
            bgpTableType:
              type: string
              description: |-
                The BGP route types to collect. Honored only if `collectedBgpAdvertisements` is true. Defaults
                to `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.
                Defaults 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
                `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
                the prompt, ignoring any trailing whitespace, the Collector will enter the configured `promptResponse`.
                Relevant 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.
                Relevant 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
                (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
                (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
                default 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
                default 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
                only.
              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
                only.
              examples:
                - my-aws-setup
            cloudDiscoverySource:
              type: string
              description: |-
                Account name (AWS), Project ID (GCP), or Subscription ID (Azure) associated with this device’s discovery.
                Present 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
                [Network Locations](https://docs.fwd.app/latest/api/network-locations/)). Present only if specifically
                requested. 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
                device’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
            letters, 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
            alone.
          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
            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
            for 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
            auto-association will be attempted using credentials configured to allow it if this property is unspecified
            and collecting from this device requires this kind of credential. Use `null` to clear. Omit to leave the
            property 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
            Avi controllers). On Checkpoint, this credential is used for TACACS privilege escalation. Credential
            auto-association will be attempted using credentials configured to allow it if this property is unspecified
            and collecting from this device requires this kind of credential. Use `null` to clear. Omit to leave the
            property 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
            `PRIVILEGED_MODE` credential for `cliCredential2Id`. Credential auto-association will be attempted using
            credentials configured to allow it if this property is unspecified and collecting from this device requires
            this 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
            HTTP. Credential auto-association will be attempted using credentials configured to allow it if this
            property is unspecified and collecting from this device requires this kind of credential. Use `null` to
            clear. 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
            true. Credential auto-association will be attempted using credentials configured to allow it if this
            property is unspecified and collecting from this device requires this kind of credential. Use `null` to
            clear. 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
            leave 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
            to 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
            property 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
            `DISABLE_PAGINATION`. Per-command pagination (such as appending `| more`) may be used if set to
            `ENABLE_PAGINATION` for a device that doesn’t have a per-session pagination mode setting. Use `null` to
            clear. 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.
            Relevant 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.
            Omit 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
            `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
            can prevent spurious connectivity test failures if the device’s SSH server is configured with a connection
            rate 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
            currently only supported for Juniper devices when executing routing table commands. The primary purpose is
            to avoid printing large outputs directly to the shell, which on Juniper devices can interfere with packet
            forwarding performance. Instead, the command output is written to a temporary file on the device and then
            transferred over a separate connection. After the transfer is complete, the temporary file is deleted to
            prevent 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
            set, 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
            the 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
            required to model a [synthetic device](https://docs.fwd.app/latest/api/synthetic-devices/) connected to this
            device. 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`.
            Use `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.
            Defaults 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
            `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
            the prompt, ignoring any trailing whitespace, the Collector will enter the configured `promptResponse`.
            Relevant 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.
            Relevant for devices collected via SSH or Telnet. Required if `prompt` is set. Use `null` to clear. Omit to
            leave 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
            property alone.
          examples:
            - false
        note:
          type: string
          description: |-
            An optional description or note about the device. Use `null` to clear. Omit to leave the
            property alone.
        enableSnmpCollection:
          type: boolean
          description: |-
            Whether to collect performance data (counters) via SNMP. Defaults to false. Use `null` to clear. Omit to
            leave 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
            to 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.
            Omit 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
            `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
            `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.
            Omit 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
            clear. 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
            `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.
            Use `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
            letters, 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
            for 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
            auto-association will be attempted using credentials configured to allow it if this property is unspecified
            and 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
            Avi controllers). On Checkpoint, this credential is used for TACACS privilege escalation. Credential
            auto-association will be attempted using credentials configured to allow it if this property is unspecified
            and 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
            `PRIVILEGED_MODE` credential for `cliCredential2Id`. Credential auto-association will be attempted using
            credentials configured to allow it if this property is unspecified and collecting from this device requires
            this 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
            HTTP. Credential auto-association will be attempted using credentials configured to allow it if this
            property 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
            true. Credential auto-association will be attempted using credentials configured to allow it if this
            property 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
            `DISABLE_PAGINATION`. Per-command pagination (such as appending `| more`) may be used if set to
            `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.
            Relevant 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
            `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
            can prevent spurious connectivity test failures if the device’s SSH server is configured with a connection
            rate limit.
          examples:
            - 10
        useFileTransferForLargeOutput:
          type: boolean
          description: |-
            Whether to use file transfer instead of printing large command output directly to the shell. This is
            currently only supported for Juniper devices when executing routing table commands. The primary purpose is
            to avoid printing large outputs directly to the shell, which on Juniper devices can interfere with packet
            forwarding performance. Instead, the command output is written to a temporary file on the device and then
            transferred over a separate connection. After the transfer is complete, the temporary file is deleted to
            prevent 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
            set, 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
            required to model a [synthetic device](https://docs.fwd.app/latest/api/synthetic-devices/) connected to this
            device.
          examples:
            - false
        bgpTableType:
          type: string
          description: |-
            The BGP route types to collect. Honored only if `collectedBgpAdvertisements` is true. Defaults
            to `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.
            Defaults 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
            `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
            the prompt, ignoring any trailing whitespace, the Collector will enter the configured `promptResponse`.
            Relevant 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.
            Relevant 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
            (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
            (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
            default 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
            default 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
            only.
          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
            only.
          examples:
            - my-aws-setup
        cloudDiscoverySource:
          type: string
          description: |-
            Account name (AWS), Project ID (GCP), or Subscription ID (Azure) associated with this device’s discovery.
            Present 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
            clock.
          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
            be 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
            `SHELL` (for Avi controllers) auto-discovered during the connectivity test. Can only be present for device
            types 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
            the 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
            test. 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
            address.
          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
            exist 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
            deleted.
          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
            might 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
            been deleted.
          examples:
            - you@example.com
  securitySchemes:
    api_token:
      type: http
      scheme: basic
