openapi: 3.2.0
info:
title: Open API Spec to get Site Analytics API
description: 'These APIs return site level analytics data based on critical KPIs (Key Performanc Indicator). The KPIs are: Onboarding Attemts, Onboarding Duration, Roaming Attempts, Roaming Duration, Coverage and Connection Speed'
contact:
name: Cisco TAC World Wide
url: https://www.cisco.com/c/en/us/support/web/tsd-cisco-worldwide-contacts.html
email: tac@cisco.com
license:
name: Cisco Catalyst Center License
url: https://www.cisco.com/c/en/us/products/collateral/software/dna-software-ebook-cte.html
version: 1.0.0
x-provenance:
method: harvested
authored_by: Cisco Catalyst Center
harvested_by: API Evangelist
harvested_on: '2026-08-19'
first_party: true
provider_published: true
source_host: developer.cisco.com
note: 27 Cisco-published OpenAPI 3.0 Assurance documents (185 operations). Ownership confirmed from the tac@cisco.com contact, the Cisco EULA terms-of-service URL and the Cisco Catalyst Center license block carried in each document.
x-evidence:
- type: source
url: https://developer.cisco.com/docs/catalyst-center/
- type: source
url: https://developer.cisco.com/dnacenter/
servers:
- url: https://developer.cisco.com
tags:
- name: siteAnalytics
paths:
/dna/data/api/v1/siteKpiSummaries:
get:
tags:
- siteAnalytics
summary: Get site analytics for the child sites of given parent site and other query parameters.
description: "Returns site analytics for all child sites of given parent site. If no parent site is provided, then this API returns analytics for all children of Global site. Data is also filtered based on set of filters specified in query parameters. If there is no start and/or end time, then end time will be defaulted to current time and start time will be defaulted to 24-hours ago from end time.\n\n\n**The process for using this API is as follows**:\n\n1). Make request to API to generate intended data.\n\n2). The success response will be a 202 HTTP code, with information regarding the generated taskId for this submitted request and the URL to poll the status of this task.\n\n\n Example: \"/dna/data/api/v1/assuranceTasks/bcbb2a8c-deae-4a3e-9459-0eb1dc12c191\"\n\n\n3). Once the task is completed, the response data will be retrievable using the same API, by providing the `taskId` query parameter:\n\nExample: GET /dna/data/api/v1/siteKpiSummaries?taskId=bcbb2a8c-deae-4a3e-9459-0eb1dc12c191. \n\nWhen a taskId is provided, it is the ONLY query parameter that should be provided."
operationId: readSiteKpiSummaries
parameters:
- name: X-CALLER-ID
in: header
description: 'Caller ID is used to trace the origin of API calls and their associated queries executed on the database. It''s an optional header parameter that can be added to an API request.
'
required: false
schema:
type: string
default: unknown
example: ui:client360
- name: taskId
in: query
description: 'used to retrieve asynchronously processed & stored data. When this parameter is used, the rest of the request params will be ignored.
'
schema:
type: string
- name: startTime
in: query
description: 'Start time from which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive.
'
schema:
type: integer
format: int64
example: 1705348800000
- name: endTime
in: query
description: 'End time to which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive.
'
required: false
schema:
type: integer
format: int64
example: 1705435200000
- name: siteHierarchy
in: query
description: 'The full hierarchical breakdown of the site tree starting from Global site name and ending with the specific site name. The Root site is named "Global" (Ex. `Global/AreaName/BuildingName/FloorName`)
This field supports wildcard asterisk (`*`) character search support. E.g. `*/San*, */San, /San*`
Examples:
`?siteHierarchy=Global/AreaName/BuildingName/FloorName` (single siteHierarchy requested)
`?siteHierarchy=Global/AreaName/BuildingName/FloorName&siteHierarchy=Global/AreaName2/BuildingName2/FloorName2` (multiple siteHierarchies requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: siteHierarchyId
in: query
description: 'The full hierarchy breakdown of the site tree in id form starting from Global site UUID and ending with the specific site UUID. (Ex. `globalUuid/areaUuid/buildingUuid/floorUuid`)
This field supports wildcard asterisk (`*`) character search support. E.g. `*uuid*, *uuid, uuid*`
Examples:
`?siteHierarchyId=globalUuid/areaUuid/buildingUuid/floorUuid `(single siteHierarchyId requested)
`?siteHierarchyId=globalUuid/areaUuid/buildingUuid/floorUuid&siteHierarchyId=globalUuid/areaUuid2/buildingUuid2/floorUuid2` (multiple siteHierarchyIds requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: siteId
in: query
description: 'The UUID of the site. (Ex. `flooruuid`)
Examples:
`?siteId=id1` (single id requested)
`?siteId=id1&siteId=id2&siteId=id3` (multiple ids requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: siteType
in: query
description: 'The type of the site. A site can be an area, building, or floor.
Default when not provided will be `[floor,building,area]`
Examples:
`?siteType=area` (single siteType requested)
`?siteType=area&siteType=building&siteType=floor` (multiple siteTypes requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
default: floor,building,area
- name: ssid
in: query
description: 'SSID is the name of wireless network to which client connects to. It is also referred to as WLAN ID - Wireless Local Area Network Identifier.
Examples:
`ssid=Alpha` (single ssid requested)
`ssid=Alpha&ssid=Guest` (multiple ssid requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: band
in: query
description: 'WiFi frequency band that client or Access Point operates. Band value is represented in Giga Hertz - GHz
Examples:
`band=5` (single band requested)
`band=2.4&band=6` (multiple band requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
enum:
- '2.4'
- '5'
- '6'
- name: failureCategory
in: query
description: 'Category of failure when a client fails to meet the threshold.
Examples:
`failureCategory=AUTH` (single failure category requested)
`failureCategory=AUTH&failureCategory=DHCP` (multiple failure categories requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: failureReason
in: query
description: 'Reason for failure when a client fails to meet the threshold.
Examples:
`failureReason=MOBILITY_FAILURE` (single ssid requested)
`failureReason=REASON_IPLEARN_CONNECT_TIMEOUT&failureReason=ST_EAP_TIMEOUT` (multiple ssid requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: view
in: query
description: "The name of the View. Each view represents a specific data set. Please refer to the `SiteAnalyticsView` Model for supported views. View is predefined set of attributes supported by the API. Only the attributes related to the given view will be part of the API response along with default attributes. If multiple views are provided, then response will contain attributes from all those views. If no views are specified, all attributes will be returned.\n\n| View Name | Included Attributes |\n| --- | --- |\n| `coverage` | coverageAverage, coverageSuccessPercentage, coverageSuccessCount, coverageTotalCount, coverageFailureCount, coverageClientCount, coverageImpactedEntities, coverageFailureImpactedEntities, coverageFailureMetrics |\n| `onboardingAttempts` | onboardingAttemptsSuccessPercentage, onboardingAttemptsSuccessCount, onboardingAttemptsTotalCount, onboardingAttemptsFailureCount, onboardingAttemptsClientCount, onboardingAttemptsImpactedEntities, onboardingAttemptsFailureImpactedEntities, onboardingAttemptsFailureMetrics |\n| `onboardingDuration` | onboardingDurationAverage, onboardingDurationSuccessPercentage, onboardingDurationSuccessCount, onboardingDurationTotalCount, onboardingDurationFailureCount, onboardingDurationClientCount, onboardingDurationImpactedEntities, onboardingDurationFailureImpactedEntities, onboardingDurationFailureMetrics |\n| `roamingAttempts` | roamingAttemptsSuccessPercentage, roamingAttemptsSuccessCount, roamingAttemptsTotalCount, roamingAttemptsFailureCount, roamingAttemptsClientCount, roamingAttemptsImpactedEntities, roamingAttemptsFailureImpactedEntities, roamingAttemptsFailureMetrics | \n| `roamingDuration` | roamingDurationAverage, roamingDurationSuccessPercentage, roamingDurationSuccessCount, roamingDurationTotalCount, roamingDurationFailureCount, roamingDurationClientCount, roamingDurationImpactedEntities, roamingDurationFailureImpactedEntities, roamingDurationFailureMetrics |\n| `connectionSpeed` | connectionSpeedAverage, connectionSpeedSuccessPercentage, connectionSpeedSuccessCount, connectionSpeedTotalCount, connectionSpeedFailureCount, connectionSpeedClientCount, connectionSpeedImpactedEntities, connectionSpeedFailureImpactedEntities, connectionSpeedFailureMetrics |\nExamples: `view=connectionSpeed` (single view requested) `view=roamingDuration&view=roamingAttempts` (multiple views requested) \n"
required: false
style: form
explode: true
schema:
maxItems: 5
minItems: 1
type: array
items:
type: string
enum:
- coverage
- onboardingAttempts
- onboardingDuration
- roamingAttempts
- roamingDuration
- connectionSpeed
- name: attribute
in: query
description: 'List of attributes related to site analytics. If these are provided, then only those attributes will be part of response along with the default attributes.
Examples: `attribute=coverageAverage` (single attribute requested) `attribute=coverageFailureMetrics&attribute=coverageTotalCount` (multiple attributes requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
enum:
- coverageAverage
- coverageSuccessPercentage
- coverageSuccessCount
- coverageTotalCount
- coverageFailureCount
- coverageClientCount
- coverageImpactedEntities
- coverageFailureImpactedEntities
- coverageFailureMetrics
- onboardingAttemptsSuccessPercentage
- onboardingAttemptsSuccessCount
- onboardingAttemptsTotalCount
- onboardingAttemptsFailureCount
- onboardingAttemptsClientCount
- onboardingAttemptsImpactedEntities
- onboardingAttemptsFailureImpactedEntities
- onboardingAttemptsFailureMetrics
- onboardingDurationAverage
- onboardingDurationSuccessPercentage
- onboardingDurationSuccessCount
- onboardingDurationTotalCount
- onboardingDurationFailureCount
- onboardingDurationClientCount
- onboardingDurationImpactedEntities
- onboardingDurationFailureImpactedEntities
- onboardingDurationFailureMetrics
- roamingAttemptsSuccessPercentage
- roamingAttemptsSuccessCount
- roamingAttemptsTotalCount
- roamingAttemptsFailureCount
- roamingAttemptsClientCount
- roamingAttemptsImpactedEntities
- roamingAttemptsFailureImpactedEntities
- roamingAttemptsFailureMetrics
- roamingDurationAverage
- roamingDurationSuccessPercentage
- roamingDurationSuccessCount
- roamingDurationTotalCount
- roamingDurationFailureCount
- roamingDurationClientCount
- roamingDurationImpactedEntities
- roamingDurationFailureImpactedEntities
- roamingDurationFailureMetrics
- connectionSpeedAverage
- connectionSpeedSuccessPercentage
- connectionSpeedSuccessCount
- connectionSpeedTotalCount
- connectionSpeedFailureCount
- connectionSpeedClientCount
- connectionSpeedImpactedEntities
- connectionSpeedFailureImpactedEntities
- connectionSpeedFailureMetrics
- apCount
- name: limit
in: query
description: Maximum number of records to return
schema:
maximum: 20
minimum: 1
type: integer
default: 10
- name: offset
in: query
description: Specifies the starting point within all records returned by the API. It's one based offset. The starting value is 1.
schema:
minimum: 1
type: integer
default: 1
- name: sortBy
in: query
description: Field name on which sorting needs to be done.
required: false
style: form
explode: true
schema:
type: string
enum:
- siteHierarchy
- siteType
- name: order
in: query
description: The sort order of the field ascending or descending.
schema:
type: string
default: asc
enum:
- asc
- desc
responses:
'200':
description: Response containing site anlytics details for given filters
content:
application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/SiteAnalyticsListResponseModel'
'202':
description: Response model for asynchronous APIs to use for providing corresponding task information to API caller
content:
application/json:
schema:
$ref: '#/components/schemas/asyncInfoContainer'
'400':
description: The client made a request that the server could not understand (for example, the request syntax is incorrect).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: The server could not fulfill the request due to internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
1XX:
description: Informational Responses - The server received the request and sent an informational response.
2XX:
description: Successful Responses - The server received the client request, understood it, and accepted it.
3XX:
description: Redirection Messages - The client must take additional action to complete the request.
4XX:
description: Client Error Responses - The client request caused the error.
5XX:
description: Server Error Responses - The server failed to fulfill the request.
default:
description: Unexpected Error
/dna/data/api/v1/siteKpiSummaries/count:
get:
tags:
- siteAnalytics
summary: Get the total number of site analytics records available for for given set of query parameters.
description: Returns the total number of site analytics records available for for given set of query parameters. If there is no start and/or end time, then end time will be defaulted to current time and start time will be defaulted to 24-hours ago from end time.
operationId: readSiteKpiSummariesCount
parameters:
- name: X-CALLER-ID
in: header
description: 'Caller ID is used to trace the origin of API calls and their associated queries executed on the database. It''s an optional header parameter that can be added to an API request.
'
required: false
schema:
type: string
default: unknown
example: ui:client360
- name: startTime
in: query
description: 'Start time from which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive.
'
schema:
type: integer
format: int64
example: 1705348800000
- name: endTime
in: query
description: 'End time to which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive.
'
required: false
schema:
type: integer
format: int64
example: 1705435200000
- name: siteHierarchy
in: query
description: 'The full hierarchical breakdown of the site tree starting from Global site name and ending with the specific site name. The Root site is named "Global" (Ex. `Global/AreaName/BuildingName/FloorName`)
This field supports wildcard asterisk (`*`) character search support. E.g. `*/San*, */San, /San*`
Examples:
`?siteHierarchy=Global/AreaName/BuildingName/FloorName` (single siteHierarchy requested)
`?siteHierarchy=Global/AreaName/BuildingName/FloorName&siteHierarchy=Global/AreaName2/BuildingName2/FloorName2` (multiple siteHierarchies requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: siteHierarchyId
in: query
description: 'The full hierarchy breakdown of the site tree in id form starting from Global site UUID and ending with the specific site UUID. (Ex. `globalUuid/areaUuid/buildingUuid/floorUuid`)
This field supports wildcard asterisk (`*`) character search support. E.g. `*uuid*, *uuid, uuid*`
Examples:
`?siteHierarchyId=globalUuid/areaUuid/buildingUuid/floorUuid `(single siteHierarchyId requested)
`?siteHierarchyId=globalUuid/areaUuid/buildingUuid/floorUuid&siteHierarchyId=globalUuid/areaUuid2/buildingUuid2/floorUuid2` (multiple siteHierarchyIds requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: siteId
in: query
description: 'The UUID of the site. (Ex. `flooruuid`)
Examples:
`?siteId=id1` (single id requested)
`?siteId=id1&siteId=id2&siteId=id3` (multiple ids requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: siteType
in: query
description: 'The type of the site. A site can be an area, building, or floor.
Default when not provided will be `[floor,building,area]`
Examples:
`?siteType=area` (single siteType requested)
`?siteType=area&siteType=building&siteType=floor` (multiple siteTypes requested)
'
required: false
style: form
explode: true
schema:
type: array
items:
type: string
default: floor,building,area
responses:
'200':
description: Reponse object containing total count of the records after applying requested filters
content:
application/json:
schema:
$ref: '#/components/schemas/CountIntegerResponse'
'400':
description: The client made a request that the server could not understand (for example, the request syntax is incorrect).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: The server could not fulfill the request due to internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
1XX:
description: Informational Responses - The server received the request and sent an informational response.
2XX:
description: Successful Responses - The server received the client request, understood it, and accepted it.
3XX:
description: Redirection Messages - The client must take additional action to complete the request.
4XX:
description: Client Error Responses - The client request caused the error.
5XX:
description: Server Error Responses - The server failed to fulfill the request.
default:
description: Unexpected Error
/dna/data/api/v1/siteKpiSummaries/query:
post:
tags:
- siteAnalytics
summary: Get site analytics for the child sites of given parent site and other filters.
description: "Returns site analytics for all child sites of given parent site. If no parent site is provided, then this API returns analytics for all children of Global site. Data is also filtered based on set of filters. If there is no start and/or end time, then end time will be defaulted to current time and start time will be defaulted to 24-hours ago from end time.\n|Field Name | Description |\n| --- | --- |\n| `startTime` | start time from which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive & the default is latest |\n| `endTime` | end time to which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive & the default is latest |\n| `filters`| used to define one or more conditions. Only the data that satisfy these filter conditions will be taken into consideration during the site analytics calculation.|\n| `attributes` | If these are provided, then only those attributes will be part of response along with the default attributes. Please refer to the `SiteAnalyticsResponseAttribute` Model for supported attributes.|\n| `views` | View is predefined set of attributes supported by the API. Only the attributes related to the given view will be part of the API response along with default attributes. If multiple views are provided, then response will contain attributes from all those views. Please refer to the `SiteAnalyticsView` Model for supported attributes. If no views are specified, all attributes will be returned. |\n| `page`| contains **limit, offset, sortBy, order** fields. *limit* - Number of records to be returned in response, *offset* - starting offset of data, *sortBy* - sort key name, *order* - order to sort \n\n**The process for using this API is as follows**:\n\n1). Make request to API to generate intended data.\n\n2). The success response will be a 202 HTTP code, with information regarding the generated taskId for this submitted request and the URL to poll the status of this task.\n\n\n Example: \"/dna/data/api/v1/assuranceTasks/bcbb2a8c-deae-4a3e-9459-0eb1dc12c191\"\n\n\n3). Once the task is completed, the response data will be retrievable using the GET API: `GET /dna/data/api/v1/siteKpiSummaries` by providing the `taskId` query parameter\n\n Example:\n GET /dna/data/api/v1/siteKpiSummaries?taskId=bcbb2a8c-deae-4a3e-9459-0eb1dc12c191. \n\nWhen a taskId is provided, it is the ONLY query parameter that should be provided. "
operationId: readSiteKpiSummariesWithFilters
parameters:
- name: X-CALLER-ID
in: header
description: 'Caller ID is used to trace the origin of API calls and their associated queries executed on the database. It''s an optional header parameter that can be added to an API request.
'
required: false
schema:
type: string
default: unknown
example: ui:client360
requestBody:
description: Payload which contains start/end times and filters to retrive site analytics.
content:
application/json:
schema:
$ref: '#/components/schemas/SiteAnalyticsQueryRequest'
examples:
Example1:
$ref: '#/components/examples/SiteAnalyticsQueryRequestExample1'
required: true
responses:
'202':
description: Response model for asynchronous APIs to use for providing corresponding task information to API caller
content:
application/json:
schema:
$ref: '#/components/schemas/asyncInfoContainer'
'400':
description: The client made a request that the server could not understand (for example, the request syntax is incorrect).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: The server could not fulfill the request due to internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
1XX:
description: Informational Responses - The server received the request and sent an informational response.
2XX:
description: Successful Responses - The server received the client request, understood it, and accepted it.
3XX:
description: Redirection Messages - The client must take additional action to complete the request.
4XX:
description: Client Error Responses - The client request caused the error.
5XX:
description: Server Error Responses - The server failed to fulfill the request.
default:
description: Unexpected Error
/dna/data/api/v1/siteKpiSummaries/query/count:
post:
tags:
- siteAnalytics
summary: Get the total number of site analytics records available for for given set of filters.
description: "Returns the total number of site analytics records available for for given set of filters. If there is no start and/or end time, then end time will be defaulted to current time and start time will be defaulted to 24-hours ago from end time.\n\n **The input payload contains the following fields**\n\n|Field Name | Description |\n| --- | --- |\n| `startTime` | start time from which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive & the default is latest |\n| `endTime` | end time to which API queries the data set related to the resource. It must be specified in UNIX epochtime in milliseconds. Value is inclusive & the default is latest |\n| `filters`| used to define one or more conditions. Only the data that satisfy these filter conditions will be taken into consideration during the site analytics calculation.|"
operationId: readSiteKpiSummariesCountWithFilters
parameters:
- name: X-CALLER-ID
in: header
description: 'Caller ID is used to trace the origin of API calls and their associated queries executed on the database. It''s an optional header parameter that can be added to an API request.
'
required: false
schema:
type: string
default: unknown
example: ui:client360
requestBody:
description: Payload which contains start/end times and filters to retrive site analytics count.
content:
application/json:
schema:
$ref: '#/components/schemas/SiteAnalyticsQueryCountRequest'
examples:
Example1:
$ref: '#/components/examples/SiteAnalyticsQueryCountRequestExample1'
required: true
responses:
'200':
description: Reponse object containing total count of the records after applying requested filters
content:
application/json:
schema:
$ref: '#/components/schemas/CountIntegerResponse'
'400':
description: The client made a request that the server could not understand (for example, the request syntax is incorrect).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: The server could not fulfill the request due to internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
1XX:
description: Informational Responses - The server received the request and sent an informational response.
2XX:
description: Successful Responses - The server received the client request, understood it, and accepted it.
3XX:
description: Redirection Messages - The client must take additional action to complete the request.
4XX:
description: Client Error Responses - The client request caused the error.
5XX:
description: Server Error Responses - The server failed to fulfill the request.
default:
description: Unexpected Error
/dna/data/api/v1/siteKpiSummaries/{id}:
get:
tags:
- siteAnalytics
summary: Get site analytics for one site.
description: "Returns site analytics for the given site. If there is no start and/or end time, then end time will be defaulted to current time and start time will be defaulted to 24-hours ago from end time.\n\n**The process for using this API is as follows**:\n\n1). Make request to API to generate intended data.\n\n2). The success response will be a 202 HTTP code, with information regarding the generated taskId for this submitted request and the URL to poll the status of this task.\n\n\n Example: \"/dna/data/api/v1/assuranceTasks/bcbb2a8c-deae-4a3e-9459-0eb1dc12c191\"\n\n\n3). Once the task is completed, the response data will be retrievable using the same API, by providing the `taskId` query parameter:\n\nExample: GET /dna/data/api/v1/siteKpiSummaries/243faba9-7f9e-4f2d-9914-97c2756754cb?taskId=bcbb2a8c-deae-4a3e-9459-0eb1dc12c191. \n\nWhen a taskId is provided, it is the ONLY query parameter that should be provided."
operationId: readSiteKpiSummariesById
parameters:
- name: X-CALLER-ID
in: header
description: 'Caller ID is used to trace the origin of API calls and their associated queries executed on the database. It''s an optional header parameter that can be added to an API request.
'
required: false
schema:
type: string
default: unknown
example: ui:client360
- name: id
in: path
description: The Site UUID
required: true
style: simple
explode: false
schema:
type: string
- name: taskId
in: query
description: 'used to retrieve asynchronously processed & stored data. When t
# --- truncated at 32 KB (99 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cisco-catalyst-center/refs/heads/main/openapi/cisco-catalyst-center-siteanalytics-api-openapi.yml