Mist Sites Stats - Discovered Switches API
API Calls to retrieve statistics about the Discovered Switches at the Site level
API Calls to retrieve statistics about the Discovered Switches at the Site level
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/mist-sites-stats-discovered-switches-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
email: tmunzer@juniper.net
name: Thomas Munzer
description: '> Version: **2606.1.1**
>
> Date: **July 10, 2026**
<div class="notification"> NOTE:<br>Some important API changes will be introduced. Please make sure to read the <a href="https://www.juniper.net/documentation/us/en/software/mist/api/http/guides/important-api-changes">announcements</a> </div>
---
## Additional Documentation
* [Mist Automation Guide](https://www.juniper.net/documentation/us/en/software/mist/automation-integration/index.html)
* [Mist Location SDK](https://www.juniper.net/documentation/us/en/software/mist/location-services/topics/concept/mist-how-get-mist-sdk.html)
* [Mist Product Updates](https://www.juniper.net/documentation/us/en/software/mist/product-updates/)
## Helpful Resources
* [API Sandbox and Exercises](https://api-class.mist.com/)
* [Postman Collection, Runners and Webhook Samples](https://www.postman.com/juniper-mist/workspace/mist-systems-s-public-workspace)
* [Python Script Examples](https://github.com/tmunzer/mist_library)
* [API Demo Apps](https://apps.mist-lab.fr/)
* [Juniper Blog](https://blogs.juniper.net/)
## Mist Web Browser Extension:
* Google Chrome, Microsoft Edge and other Chromium-based browser: [Chrome Web Store](https://chromewebstore.google.com/detail/mist-extension/ejhpdcljeamillfhdihkkmoakanpbplh)
* Firefox: [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/mist-extension/)
---'
license:
name: MIT
url: https://raw.githubusercontent.com/tmunzer/Mist-OAS3.0/main/LICENSE
title: Mist Sites Stats - Discovered Switches API
version: 2606.1.1
x-logo:
altText: Juniper-MistAI
backgroundColor: '#FFFFFF'
url: https://www.mist.com/wp-content/uploads/logo.png
servers:
- description: Mist Global 01
url: https://api.mist.com
- description: Mist Global 02
url: https://api.gc1.mist.com
- description: Mist Global 03
url: https://api.ac2.mist.com
- description: Mist Global 04
url: https://api.gc2.mist.com
- description: Mist Global 05
url: https://api.gc4.mist.com
- description: Mist EMEA 01
url: https://api.eu.mist.com
- description: Mist EMEA 02
url: https://api.gc3.mist.com
- description: Mist EMEA 03
url: https://api.ac6.mist.com
- description: Mist EMEA 04
url: https://api.gc6.mist.com
- description: Mist APAC 01
url: https://api.ac5.mist.com
- description: Mist APAC 02
url: https://api.gc5.mist.com
- description: Mist APAC 03
url: https://api.gc7.mist.com
security:
- apiToken: []
- csrfToken: []
tags:
- description: API Calls to retrieve statistics about the Discovered Switches at the Site level
name: Sites Stats - Discovered Switches
paths:
/api/v1/sites/{site_id}/stats/discovered_switch_metrics/search:
parameters:
- $ref: '#/components/parameters/site_id'
get:
description: Search Discovered Switch Metrics
operationId: searchSiteDiscoveredSwitchesMetrics
parameters:
- description: 'Filter results by scope. enum: `site`, `switch`'
in: query
name: scope
schema:
$ref: '#/components/schemas/discovered_switches_metric_scope'
- description: 'Metric type. enum: `inactive_wired_vlans`, `poe_compliance`, `switch_ap_affinity`, `version_compliance`'
in: query
name: type
schema:
$ref: '#/components/schemas/discovered_switch_metric_type'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/end'
- $ref: '#/components/parameters/duration'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/search_after'
responses:
'200':
$ref: '#/components/responses/DiscoveredSwitchMetrics'
'400':
$ref: '#/components/responses/HTTP400'
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: searchSiteDiscoveredSwitchesMetrics
tags:
- Sites Stats - Discovered Switches
/api/v1/sites/{site_id}/stats/discovered_switches/count:
parameters:
- $ref: '#/components/parameters/site_id'
get:
description: Count Discovered Switches
operationId: countSiteDiscoveredSwitches
parameters:
- description: 'Field used to group this count response. enum: `mgmt_addr`, `model`, `system_name`, `version`'
in: query
name: distinct
schema:
$ref: '#/components/schemas/site_discovered_switches_count_distinct'
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/end'
- $ref: '#/components/parameters/duration'
- $ref: '#/components/parameters/limit'
responses:
'200':
$ref: '#/components/responses/Count'
'400':
$ref: '#/components/responses/HTTP400'
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: countSiteDiscoveredSwitches
tags:
- Sites Stats - Discovered Switches
/api/v1/sites/{site_id}/stats/discovered_switches/metrics:
parameters:
- $ref: '#/components/parameters/site_id'
get:
description: Discovered switches related metrics, lists related switch system names & details if not compliant
operationId: listSiteDiscoveredSwitchesMetrics
parameters:
- description: 'Configurable # ap per switch threshold, default 12'
in: query
name: threshold
schema:
examples:
- '12'
type: string
- description: System name for switch level metrics, optional
in: query
name: system_name
schema:
examples:
- switch1.example.com
type: string
responses:
'200':
$ref: '#/components/responses/DiscoveredSwitchesMetrics'
'400':
$ref: '#/components/responses/HTTP400'
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: listSiteDiscoveredSwitchesMetrics
tags:
- Sites Stats - Discovered Switches
/api/v1/sites/{site_id}/stats/discovered_switches/search:
parameters:
- $ref: '#/components/parameters/site_id'
get:
description: Search Discovered Switches
operationId: searchSiteDiscoveredSwitches
parameters:
- description: Filter results by whether the device is adopted
in: query
name: adopted
schema:
examples:
- true
type: boolean
- description: Filter discovered switch results by system name
in: query
name: system_name
schema:
examples:
- switch1.example.com
type: string
- description: Filter results by hostname
in: query
name: hostname
schema:
examples:
- switch1
type: string
- description: Filter results by vendor
in: query
name: vendor
schema:
examples:
- Cisco
type: string
- description: Filter results by device model
in: query
name: model
schema:
examples:
- WS-C3850-24P
type: string
- description: Filter results by software version
in: query
name: version
schema:
examples:
- 1.0.0
type: string
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/end'
- $ref: '#/components/parameters/duration'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/search_after'
responses:
'200':
$ref: '#/components/responses/DiscoveredSwitches'
'400':
$ref: '#/components/responses/HTTP400'
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: searchSiteDiscoveredSwitches
tags:
- Sites Stats - Discovered Switches
components:
schemas:
dswitches_compliance_major_version:
additionalProperties: false
description: Version-compliance grouping for one discovered switch model
properties:
major_count:
description: Number of major software versions observed for this switch model
type: number
model:
description: Switch model represented by this version-compliance grouping
type: string
system_names:
$ref: '#/components/schemas/strings'
description: Discovered switch system names included in this version-compliance grouping
required:
- model
- major_count
type: object
response_discovered_switches_results:
description: Discovered switch records returned by a search response
items:
$ref: '#/components/schemas/discovered_switch'
type: array
uniqueItems: true
dswitches_metrics_inactive_wired_vlans:
additionalProperties: false
description: Inactive wired VLAN metric for APs connected to discovered switches
properties:
details:
additionalProperties: true
description: Metric-specific details for inactive wired VLAN findings
type: object
score:
description: Compliance score for the inactive wired VLAN metric
type: number
required:
- score
- details
type: object
response_http403:
additionalProperties: false
description: Standard HTTP 403 permission error response
properties:
detail:
description: Human-readable explanation of the permission error
examples:
- You do not have permission to perform this action.
type: string
type: object
ap_redundancy:
additionalProperties: false
description: AP switch redundancy coverage summary
properties:
modules:
$ref: '#/components/schemas/ap_redundancy_modules'
description: Per-module AP redundancy counts keyed by switch node ID
num_aps:
description: Total number of APs considered for switch redundancy
examples:
- 15
type: integer
num_aps_with_switch_redundancy:
description: Number of APs that have switch redundancy coverage
examples:
- 8
type: integer
type: object
org_id:
description: Unique identifier of a Mist organization
examples:
- a97c1b22-a4e9-411e-9bfd-d8695a0f9e61
format: uuid
readOnly: true
type: string
discovered_switch_aps:
description: AP attachments observed on a discovered switch
items:
$ref: '#/components/schemas/discovered_switch_ap'
type: array
uniqueItems: true
response_http400:
additionalProperties: false
description: Standard HTTP 400 bad request error response
properties:
detail:
description: Human-readable explanation of the bad request error
examples:
- 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
type: string
type: object
response_dswitches_metrics:
additionalProperties: false
description: Metrics summary returned for discovered switch compliance checks
properties:
inactive_wired_vlans:
$ref: '#/components/schemas/dswitches_metrics_inactive_wired_vlans'
description: Metric for inactive wired VLANs on discovered switches
poe_compliance:
$ref: '#/components/schemas/dswitches_metrics_poe_compliance'
description: Metric for PoE compliance across APs connected to discovered switches
switch_ap_affinity:
$ref: '#/components/schemas/dswitches_metrics_switch_ap_affinity'
description: Metric comparing AP counts against the switch affinity threshold
version_compliance:
$ref: '#/components/schemas/dswitches_metrics_version_compliance'
description: Metric for discovered switch software version compliance
required:
- version_compliance
- switch_ap_affinity
- inactive_wired_vlans
- poe_compliance
type: object
response_count:
additionalProperties: false
description: Distinct count response for time-bounded search results
properties:
distinct:
description: Field used to group the count results
type: string
end:
description: Search window end timestamp for the count request, in epoch seconds
type: integer
limit:
description: Maximum number of distinct count results requested
type: integer
results:
$ref: '#/components/schemas/count_results'
description: Count results grouped by the distinct field
start:
description: Search window start timestamp for the count request, in epoch seconds
type: integer
total:
description: Number of distinct result buckets returned
type: integer
required:
- distinct
- end
- limit
- results
- start
- total
type: object
dswitches_metrics_version_compliance:
additionalProperties: false
description: Version compliance metric for discovered switches
properties:
details:
$ref: '#/components/schemas/dswitches_metrics_version_compliance_details'
description: Version grouping details used to calculate the compliance score
score:
description: Compliance score for the discovered-switch version metric
type: number
required:
- score
- details
type: object
discovered_switch_metric_ap:
additionalProperties: false
description: AP attachment details included in a discovered switch metric
properties:
hostname:
description: AP hostname included in the discovered switch metric
type: string
mac:
description: AP MAC address included in the discovered switch metric
type: string
poe_status:
description: Whether the upstream switch port provides PoE for this AP
type: boolean
port:
description: Switch port name connected to this AP
type: string
port_id:
description: LLDP port identifier for this AP uplink
type: string
power_draw:
description: Power draw reported for this AP connection
type: integer
when:
description: Timestamp when this AP attachment metric was observed
type: string
type: object
site_discovered_switches_count_distinct:
default: system_name
description: 'enum: `mgmt_addr`, `model`, `system_name`, `version`'
enum:
- mgmt_addr
- model
- system_name
- version
type: string
response_discovered_switch_metrics_results:
description: Discovered switch metric records returned by a search response
items:
$ref: '#/components/schemas/discovered_switch_metric'
type: array
dswitches_compliance_major_versions:
description: Version-compliance groupings by discovered switch model
items:
$ref: '#/components/schemas/dswitches_compliance_major_version'
type: array
uniqueItems: true
ap_redundancy_modules:
additionalProperties:
$ref: '#/components/schemas/ap_redundancy_module'
description: Property key is the node id
type: object
discovered_switch:
additionalProperties: false
description: Switch discovered from AP uplink LLDP data and site switch discovery
properties:
adopted:
description: Whether the discovered switch has been adopted into Mist management
type: boolean
ap_redundancy:
$ref: '#/components/schemas/ap_redundancy'
description: AP switch redundancy summary for APs connected through the discovered switch
aps:
$ref: '#/components/schemas/discovered_switch_aps'
description: Connected APs observed on ports of the discovered switch
chassis_id:
$ref: '#/components/schemas/strings'
description: LLDP chassis identifier reported by the discovered switch
for_site:
description: Whether the discovered switch is associated with the requested site
readOnly: true
type: boolean
mgmt_addr:
description: Management IP address advertised by the discovered switch
type: string
model:
description: Switch model reported for the discovered switch
type: string
org_id:
$ref: '#/components/schemas/org_id'
description: Organization that contains the discovered switch record
site_id:
$ref: '#/components/schemas/site_id'
description: Site where the switch was discovered
system_desc:
description: LLDP system description advertised by the discovered switch
type: string
system_name:
description: LLDP system name advertised by the discovered switch
type: string
timestamp:
$ref: '#/components/schemas/timestamp'
description: Time when the discovered switch data was observed
vendor:
description: Switch vendor reported for the discovered switch
type: string
version:
description: Software version reported for the discovered switch
type: string
type: object
dswitches_metrics_switch_ap_affinity:
additionalProperties: false
description: Switch/AP affinity metric for discovered switches
properties:
details:
$ref: '#/components/schemas/dswitches_metrics_switch_ap_affinity_details'
description: Switch names and threshold used to calculate the affinity score
score:
description: Compliance score for the switch/AP affinity metric
type: number
required:
- score
- details
type: object
discovered_switch_metric:
additionalProperties: false
description: Time-series metric result for discovered switch health or compliance
properties:
adopted:
description: Whether the discovered switch in this metric has been adopted into Mist management
type: boolean
aps:
$ref: '#/components/schemas/discovered_switch_metric_aps'
description: AP attachment details included with this discovered switch metric
chassis_id:
$ref: '#/components/schemas/discovered_switch_metric_chassis_id'
description: LLDP chassis identifiers associated with this metric result
hostname:
description: Switch hostname associated with this metric result
examples:
- SW-HLAB-ea2e00
type: string
mgmt_addr:
description: Management IP address associated with this metric result
examples:
- 10.10.20.42
type: string
model:
description: Switch model associated with this metric result
type: string
org_id:
$ref: '#/components/schemas/org_id'
description: Organization that contains the discovered switch metric
scope:
description: Aggregation scope for the discovered switch metric result
examples:
- site
type: string
score:
description: Compliance or health score for the discovered switch metric
examples:
- 100
type: integer
site_id:
$ref: '#/components/schemas/site_id'
description: Site associated with the discovered switch metric
system_desc:
description: LLDP system description associated with this metric result
examples:
- 'Juniper Networks, Inc. ex4100-f-12p Ethernet Switch, kernel JUNOS 22.4R3.25, Build date: 2024-02-10 00:49:09 UTC Copyright (c) 1996-2024 Juniper Networks, Inc.'
type: string
system_name:
description: LLDP system name associated with this metric result
examples:
- SW-HLAB-ea2e00
type: string
timestamp:
$ref: '#/components/schemas/timestamp'
description: Time bucket for the discovered switch metric result
type:
description: Metric category represented by this discovered switch metric
examples:
- inactive_wired_vlans
type: string
vendor:
description: Switch vendor associated with this metric result
type: string
version:
description: Software version associated with this metric result
type: string
type: object
strings:
description: Unique string values returned or accepted by this schema
items:
type: string
type: array
uniqueItems: true
count_results:
description: List of count result rows
items:
$ref: '#/components/schemas/count_result'
type: array
uniqueItems: true
timestamp:
description: Epoch timestamp, in seconds
format: double
readOnly: true
type: number
dswitches_metrics_switch_ap_affinity_details:
additionalProperties: false
description: Detail values used by the switch/AP affinity metric
properties:
system_name:
$ref: '#/components/schemas/strings'
description: Discovered switch system names reported for the affinity metric
threshold:
description: APs-per-switch threshold used for the affinity metric
type: number
required:
- threshold
- system_name
type: object
count_result:
additionalProperties:
type: string
description: Count result row with the matching distinct field values
properties:
count:
description: Number of matching items for the distinct value or values in this result
type: integer
required:
- count
type: object
response_discovered_switch_metrics:
additionalProperties: false
description: Paginated response for discovered switch metric search results
properties:
end:
description: Epoch timestamp, in seconds, for the end of the metric search window
type: number
limit:
description: Maximum number of discovered switch metric records returned in this page
type: integer
next:
description: Pagination cursor or URL for retrieving the next page of discovered switch metric records
type: string
results:
$ref: '#/components/schemas/response_discovered_switch_metrics_results'
description: Discovered switch metric records matching the search filters
start:
description: Epoch timestamp, in seconds, for the start of the metric search window
type: number
total:
description: Number of discovered switch metric records matching the search filters across all pages
type: integer
required:
- results
- start
- end
- limit
- total
type: object
response_http404:
additionalProperties: false
description: Standard HTTP 404 not found error response
properties:
id:
description: Missing resource identifier, when the API includes one
type: string
type: object
dswitches_metrics_version_compliance_details:
additionalProperties: false
description: Detail values used by the discovered-switch version compliance metric
properties:
major_versions:
$ref: '#/components/schemas/dswitches_compliance_major_versions'
description: Per-model major version groupings used for version compliance
total_switch_count:
description: Number of discovered switches evaluated for version compliance
type: integer
required:
- major_versions
- total_switch_count
type: object
ap_redundancy_module:
additionalProperties: false
description: AP switch redundancy counts for one VC member
properties:
num_aps:
description: Total number of APs connected through this VC member
examples:
- 15
type: integer
num_aps_with_switch_redundancy:
description: Number of APs on this VC member with switch redundancy coverage
examples:
- 8
type: integer
type: object
response_http429:
additionalProperties: false
description: Standard HTTP 429 rate limit error response
properties:
detail:
description: Human-readable explanation of the rate limit error
examples:
- Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
type: string
type: object
response_discovered_switches:
additionalProperties: false
description: Paginated response for discovered switch search results
properties:
end:
description: Epoch timestamp, in seconds, for the end of the discovered switch search window
type: number
limit:
description: Maximum number of discovered switch records returned in this page
type: integer
next:
description: Pagination cursor or URL for retrieving the next page of discovered switch records
type: string
results:
$ref: '#/components/schemas/response_discovered_switches_results'
description: Discovered switch records matching the search filters
start:
description: Epoch timestamp, in seconds, for the start of the discovered switch search window
type: number
total:
description: Number of discovered switch records matching the search filters across all pages
type: integer
required:
- end
- limit
- results
- start
- total
type: object
response_http401:
additionalProperties: false
description: Standard HTTP 401 authentication error response
properties:
detail:
description: Human-readable explanation of the authentication error
examples:
- Authentication credentials were not provided.
type: string
type: object
discovered_switches_metric_scope:
default: site
description: 'Scope level used when querying discovered switch metrics. enum: `site`, `switch`'
enum:
- site
- switch
type: string
site_id:
description: Unique identifier of a Mist site
examples:
- 441a1214-6928-442a-8e92-e1d34b8ec6a6
format: uuid
readOnly: true
type: string
integers:
description: List of integer values
items:
type: integer
type: array
discovered_switch_metric_chassis_id:
description: LLDP chassis identifiers associated with a discovered switch metric
items:
type: string
type: array
discovered_switch_metric_type:
description: 'enum: `inactive_wired_vlans`, `poe_compliance`, `switch_ap_affinity`, `version_compliance`'
enum:
- inactive_wired_vlans
- poe_compliance
- switch_ap_affinity
- version_compliance
type: string
discovered_switch_metric_aps:
description: AP attachment details included in discovered switch metrics
items:
$ref: '#/components/schemas/discovered_switch_metric_ap'
type: array
dswitches_metrics_poe_compliance:
additionalProperties: false
description: PoE compliance metric for APs connected to discovered switches
properties:
details:
$ref: '#/components/schemas/dswitches_metrics_poe_compliance_details'
description: Counts and power totals used to calculate the PoE compliance score
score:
description: Compliance score for the PoE compliance metric
type: number
required:
- score
- details
type: object
discovered_switch_ap:
additionalProperties: false
description: AP attachment details observed on a discovered switch
properties:
hostname:
description: AP hostname observed on the discovered switch
type: string
inactive_wired_vlans:
$ref: '#/components/schemas/integers'
description: Inactive wired VLAN IDs reported for the AP attachment
mac:
description: AP MAC address observed on the discovered switch
type: string
poe_status:
description: Whether the upstream switch port provides PoE for the AP
type: boolean
port:
description: Switch port name connected to the AP
type: string
port_id:
description: LLDP port identifier for the AP uplink
type: string
power_draw:
description: Power draw reported for the AP connection
type: number
when:
description: Timestamp when this AP attachment was last observed
type: string
type: object
dswitches_metrics_poe_compliance_details:
additionalProperties: false
description: Detail values used by the discovered-switch PoE compliance metric
properties:
total_aps:
description: Number of APs evaluated for PoE compliance
type: integer
total_power:
description: Aggregate AP PoE power demand across evaluated APs, in mW
type: number
required:
- total_power
- total_aps
type: object
parameters:
site_id:
in: path
name: site_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
start:
description: Lower bound of the time range, as an epoch timestamp in seconds or a relative value such as `-1d` or `-1w`
in: query
name: start
schema:
type: string
end:
description: Upper bound of the time range, as an epoch timestamp in seconds or a relative value such as `-1d`, `-2h`, or `now`
in: query
name: end
schema:
type: string
sort:
description: On which field the list should be sorted, -prefix represents DESC order
in: query
name: sort
schema:
default: timestamp
examples:
- -site_id
type: string
search_after:
description: Pagination cursor for retrieving subsequent pages of results. This value is automatically populated by Mist in the `next` URL from the previous response and should not be manually constructed.
in: query
name: search_after
schema:
type: string
limit:
description: Maximum number of results to return per page
in: query
name: limit
schema:
default: 100
minimum: 0
type: integer
duration:
description: Time range duration for the query, using relative units such as `10m`, `7d`, or `2w`
in: query
name: duration
schema:
default: 1d
examples:
- 10m
type: string
responses:
HTTP401:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP401Example'
schema:
$ref: '#/components/schemas/response_http401'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP401Example'
schema:
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mist/refs/heads/main/openapi/mist-sites-stats-discovered-switches-api-openapi.yml