diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..5b42357
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "compile-hero.disable-compile-files-on-did-save-code": false,
+ "python.pythonPath": "/usr/local/bin/python3"
+}
\ No newline at end of file
diff --git a/api.json b/api.json
new file mode 100644
index 0000000..32fe5e0
--- /dev/null
+++ b/api.json
@@ -0,0 +1 @@
+{"paths": {"api": {"paths": {"v1": {"paths": {"const": {"paths": {"alarm_defs": {"specs": {"get": {"description": "Get Alarm Definitions", "operationId": "getAlarmDefinitions", "tags": ["Constants"]}}}, "ap_channels": {"specs": {"get": {"description": "Get List of Available channels per country code", "operationId": "getApChannels", "parameters": [{"$ref": "#/components/parameters/country_code"}], "tags": ["Constants"]}}}, "ap_led_status": {"specs": {"get": {"description": "Get AP LED definition", "operationId": "getApLedDefinition", "tags": ["Constants"]}}}, "applications": {"specs": {"get": {"description": "Get a list of applications that Juniper-Mist APs recognize", "operationId": "getApplications", "tags": ["Constants"]}}}, "client_events": {"specs": {"get": {"description": "Get List of available Client Events", "operationId": "getClientEventsDefinitions", "tags": ["Constants"]}}}, "countries": {"specs": {"get": {"description": "Get List of available Country Codes", "operationId": "getCountryCodes", "tags": ["Constants"]}}}, "device_models": {"specs": {"get": {"description": "Get a list of AP device models for the Mist Site", "operationId": "getApModels", "tags": ["Constants"]}}}, "insight_metrics": {"specs": {"get": {"description": "Get Available Insight Metrics", "operationId": "getSiteAvailableInsightMetrics", "tags": ["Constants"]}}}, "languages": {"specs": {"get": {"description": "Get Languages", "operationId": "getSiteLanguages", "tags": ["Constants"]}}}, "mxedge_models": {"specs": {"get": {"description": "Get Mist Edge Models", "operationId": "getMxEdgeModels", "tags": ["Constants"]}}}, "system_events": {"specs": {"get": {"description": "Get list of available system events", "operationId": "getSystemEventsDefinitions", "tags": ["Constants"]}}}}}, "installer": {"paths": {"orgs": {"paths": {"{org_id}": {"paths": {"alarmtemplates": {"specs": {"get": {"description": "Get the list of alarm templates", "operationId": "getInstallerAlarmTemplates", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "deviceprofiles": {"specs": {"get": {"description": "Get Device Profiles", "operationId": "getInstallerDeviceProfiles_WIP_", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "devices": {"specs": {"get": {"description": "Get recently claimed devices", "operationId": "getInstallerListOfRenctlyClaimedDevices", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "This mirrors `POST /api/v1/orgs/{org_id}/inventory` (see Inventory API)", "operationId": "claimInstallerDevices", "tags": ["Installer"]}}, "paths": {"{device_mac}": {"specs": {"delete": {"description": "Unassign recently claimed devices", "operationId": "unassignInstallerRecentlyClaimedDevice", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/device_mac"}], "put": {"description": "Provision device ", "operationId": "provisionInstallerDevices", "tags": ["Installer"]}}, "paths": {"locate": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/device_mac"}], "post": {"description": "Locate a Device by blinking it\u2019s LED, it\u2019s a persisted state that has to be stopped by calling Stop Locating API", "operationId": "startInstallerLocateDevice", "tags": ["Installer"]}}}, "unlocate": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/device_mac"}], "post": {"description": "Stop it", "operationId": "stopInstallerLocateDevice", "tags": ["Installer"]}}}, "{image_name}": {"specs": {"delete": {"description": "delete image", "operationId": "deleteInstallerDeviceImage", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/image_name"}, {"$ref": "#/components/parameters/device_mac"}], "post": {"description": "Add image", "operationId": "InstallerDeviceImage", "tags": ["Installer"]}}}}}}}, "rftemplates": {"specs": {"get": {"description": "Get RF Template", "operationId": "getInstallerRfTemplatesNames", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "secpolicies": {"specs": {"get": {"description": "Get Secuity Policies", "operationId": "getInstallerSecPolicies", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "sitegroups": {"specs": {"get": {"description": "Get Site Groups", "operationId": "getInstallerSiteGroups", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "sites": {"specs": {"get": {"description": "Get Sites", "operationId": "getInstallerSites", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"{site_name}": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}], "put": {"description": "Often the Installers are asked to assign Devices to Sites. The Sites can either be pre-created or created/modified by the Installer. If this is an update, the same grace period also applies.", "operationId": "createOrUpdateInstallerSites", "tags": ["Installer"]}}, "paths": {"maps": {"specs": {"get": {"description": "Get Maps", "operationId": "getInstallerMaps", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}]}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign & place ap if name or mac matches", "operationId": "importInstallerMap", "tags": ["Installer"]}}}, "{map_id}": {"specs": {"delete": {"description": "Delete Map", "operationId": "deleteInstallerMap", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Create a MAP", "operationId": "createInstallerMap", "tags": ["Installer"]}, "put": {"description": "Update map", "operationId": "updateInstallerMap", "tags": ["Installer"]}}}}}}}}}}}}}, "sites": {"paths": {"{site_name}": {"paths": {"optimize": {"specs": {"get": {"description": "After installation is considered complete (APs are placed on maps, all powered up), you can trigger an optimize operation where RRM will kick in (and maybe other things in the future) before it\u2019s automatically scheduled.", "operationId": "optimizeInstallerRrm", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/site_name"}]}}}}}}}}, "invite": {"paths": {"verify": {"paths": {"{token}": {"specs": {"parameters": [{"$ref": "#/components/parameters/token"}], "post": {"description": "NOTE: another call to ```GET /api/v1/self``` is required to see the new set of privileges", "operationId": "verifyAdminInvite", "tags": ["Admin"]}}}}}}}, "login": {"specs": {"post": {"description": "Log in with email/password", "operationId": "login", "tags": ["Login"]}}, "paths": {"lookup": {"specs": {"post": {"description": "Login Lookup", "operationId": "lookup", "tags": ["Login"]}}}, "oauth": {"paths": {"{provider}": {"specs": {"delete": {"description": "Unlink OAuth2 Provider", "operationId": "unlinkOAuth2Provider", "tags": ["Login With OAuth2"]}, "get": {"description": "Obtain Authorization URL for Login", "operationId": "getOAuth2AuthorizationUrlForLogin", "parameters": [{"in": "query", "name": "forward", "schema": {"example": "http://manage.mist.com/oauth/callback.html", "type": "string"}}], "tags": ["Login With OAuth2"]}, "parameters": [{"in": "path", "name": "provider", "required": true, "schema": {"type": "string"}}], "post": {"description": "Login via OAuth2", "operationId": "loginOAuth2", "tags": ["Login With OAuth2"]}}}}}, "two_factor": {"specs": {"post": {"description": "Send 2FA Code", "operationId": "twoFactor", "tags": ["Login With OAuth2"]}}}}}, "logout": {"specs": {"post": {"description": "Logout", "operationId": "logout", "tags": ["Login"]}}}, "mobile": {"paths": {"verify": {"paths": {"{secret}": {"specs": {"parameters": [{"$ref": "#/components/parameters/secret"}], "post": {"description": "Verify secret", "operationId": "activateSdkInvite", "tags": ["Mobile"]}}}}}}}, "msps": {"specs": {"post": {"description": "Create MSP account", "operationId": "createMsp", "tags": ["Msps"]}}, "paths": {"{msp_id}": {"specs": {"delete": {"description": "Deleting MSP removes the MSP and OrgGroup under the MSP as well as all privileges associated with them. It does not remove any Org or Admins", "operationId": "deleteMsp", "tags": ["Msps"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "put": {"description": "Update MSP", "operationId": "updateMsp", "tags": ["Msps"]}}, "paths": {"admins": {"specs": {"get": {"description": "Get MSP Admins", "operationId": "getMspAdmins", "tags": ["Msps Admins"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}, "paths": {"{admin_id}": {"specs": {"delete": {"description": "This removes all privileges this admin has against the MSP. This goes deep all the way to the sites", "operationId": "revokeMspAdmin", "tags": ["Msps Admins"]}, "get": {"description": "Get MSP Admins", "operationId": "getMspAdmin", "tags": ["Msps Admins"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/admin_id"}], "put": {"description": "Update MSP Admin", "operationId": "updateMspAdmin", "tags": ["Msps Admins"]}}}}}, "insights": {"paths": {"{metric}": {"specs": {"get": {"description": "See getSiteAvailableInsightMetrics for metrics description of MSP Scope", "operationId": "getMspsInsightMetrics", "tags": ["Msps"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/metric"}]}}}}, "inventory": {"paths": {"{device_mac}": {"specs": {"get": {"description": "Get Inventoy By device MAC address", "operationId": "getMspInventoryByMac", "tags": ["Msps Inventory"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/device_mac"}]}}}}, "invites": {"specs": {"parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Invite MSP Admin\n\nNote: An email will also be sent to the user with a link to https://manage.mist.com/verify/invite?token=:token", "operationId": "inviteMspAdmin", "tags": ["Msps Invites"]}}, "paths": {"{invite_id}": {"specs": {"delete": {"description": "Delete admin invite", "operationId": "uninviteMspAdmin", "tags": ["Msps Invites"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/invite_id"}], "put": {"description": "Update MSP admin invite", "operationId": "updateMspAdminInvite", "tags": ["Msps Invites"]}}}}}, "orggroups": {"specs": {"get": {"description": "Get MSP Org Groups", "operationId": "getMspOrgGroups", "tags": ["Msps Org Groups"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create MSP Org Group", "operationId": "createMspOrgGroup", "tags": ["Msps Org Groups"]}}, "paths": {"{orggroup_id}": {"specs": {"delete": {"description": "Delete MSP Org Group", "operationId": "deleteMspOrgGroup", "tags": ["Msps Org Groups"]}, "get": {"description": "Get MSP Org Group Details", "operationId": "getMspOrgGroup", "tags": ["Msps Org Groups"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/orggroup_id"}], "put": {"description": "Update MSP Org Group", "operationId": "updateMspOrgGroup", "tags": ["Msps Org Groups"]}}}}}, "orgs": {"specs": {"get": {"description": "Get MSP Orgs", "operationId": "getMspOrgs", "tags": ["Msps Orgs"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create an Org under MSP", "operationId": "createMspOrg", "tags": ["Msps Orgs"]}, "put": {"description": "Assign or Unassign Orgs to an MSP account", "operationId": "manageMspOrgs", "tags": ["Msps Orgs"]}}, "paths": {"search": {"specs": {"get": {"description": "Search Org in MSP", "operationId": "searchMspOrgs", "parameters": [{"$ref": "#/components/parameters/name"}, {"description": "org id", "in": "query", "name": "org_id", "schema": {"format": "uuid", "type": "string"}}, {"description": "if this org has sufficient subscription", "in": "query", "name": "sub_insufficient", "schema": {"type": "boolean"}}, {"description": "if this org is under trial period", "in": "query", "name": "trial_enabled", "schema": {"type": "boolean"}}, {"description": "a list of types that enabled by usage", "in": "query", "name": "usage_types", "schema": {"type": "array"}}], "tags": ["Msps Orgs"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}, "{org_id}": {"specs": {"get": {"description": "Get MSP Org Details", "operationId": "getMspOrg", "tags": ["Msps Orgs"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/org_id"}]}}}}, "search": {"specs": {"get": {"description": "Search in MSP Orgs", "operationId": "searchMspOrgGroup", "parameters": [{"description": "orgs", "example": "orgs", "in": "query", "name": "type", "required": true, "schema": {"enum": ["orgs"], "type": "string"}}, {"$ref": "#/components/parameters/q"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Msps Search"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}, "ssoroles": {"specs": {"get": {"description": "Get MSP SSO Roles", "operationId": "getMspSsoRoles", "tags": ["Msps SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create MSP Role", "operationId": "createMspSsoRole", "tags": ["Msps SSO Roles"]}}, "paths": {"{ssorole_id}": {"specs": {"delete": {"description": "Delete MSP SSO Roles", "operationId": "deleteMspSsoRoles", "tags": ["Msps SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/ssorole_id"}], "put": {"description": "Update SSO Role", "operationId": "updateMspSsoRole", "tags": ["Msps SSO Roles"]}}}}}, "ssos": {"specs": {"get": {"description": "Get MSP SSO Config", "operationId": "getMspSso", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create MSP SSO profile", "operationId": "createMspSso", "tags": ["Msps SSO"]}}, "paths": {"{sso_id}": {"specs": {"delete": {"description": "Delete MSP SSO Config", "operationId": "deleteMspSso", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}], "put": {"description": "Update MSP SSO config", "operationId": "updateMspSso", "tags": ["Msps SSO"]}}, "paths": {"failures": {"specs": {"get": {"description": "Get MSP SSO Latest Failures", "operationId": "getMspSsoLatestFailures", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata": {"specs": {"get": {"description": "Get MSP SSO SAML Metadata", "operationId": "getMspSsoSamlMetadata", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata.xml": {"specs": {"get": {"description": "Download MSP SSO SAML Metadata", "operationId": "downloadMspSsoSamlMetadata", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}]}}}}}}, "stats": {"paths": {"licenses": {"specs": {"get": {"description": "Get MSP Licences", "operationId": "getMspOrgLicenses", "parameters": [], "tags": ["Msps Stats"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}, "orgs": {"specs": {"get": {"description": "Get MSP Orgs Stats", "operationId": "getMspOrgStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Msps Stats"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}}}}}}}, "orgs": {"specs": {"post": {"description": "Org admin can invite people to manage the org. Furthermore, he can dictate the level of security those accounts are. The check is enforced when the invited admin tries to \u201caccept\u201d the invitation and every time the admin tries to login", "operationId": "createOrg", "tags": ["Orgs"]}}, "paths": {"{org_id}": {"specs": {"delete": {"description": "Delete Org", "operationId": "deleteOrg", "tags": ["Orgs"]}, "get": {"description": "Get Organization information", "operationId": "getOrgInfo", "tags": ["Orgs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "put": {"description": "Update Org", "operationId": "updateOrg", "tags": ["Orgs"]}}, "paths": {"128routers": {"paths": {"register_cmd": {"specs": {"get": {"description": "128T devices can be managed/adopted by Mist.", "operationId": "getOrg128TRegistrationCommands", "tags": ["Orgs 128T"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "admins": {"specs": {"get": {"description": "Get a list of people who can manage the Site/Org under the Org", "operationId": "getOrgAdmins", "tags": ["Orgs Admins"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"{admin_id}": {"specs": {"delete": {"description": "This removes all privileges this admin has against the org", "operationId": "revokeOrgAdmin", "tags": ["Orgs Admins"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/admin_id"}], "put": {"description": "Invite Org Admin", "operationId": "updateOrgAdmin", "tags": ["Orgs Admins"]}}}}}, "alarms": {"paths": {"count": {"specs": {"get": {"description": "Count Org Alarms", "operationId": "countOrgAlarms", "parameters": [{"in": "query", "name": "distinct", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Alarms"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org Alarms", "operationId": "searchOrgAlarms", "parameters": [{"in": "query", "name": "type", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/page"}], "tags": ["Orgs Alarms"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "alarmtemplates": {"specs": {"get": {"description": "Get Org Alarm Templates", "operationId": "getOrgAlarmTemplates", "tags": ["Orgs Alarm Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Available rules can be found in Orgs>Consts>getAlarmDefs\n\nThe delivery dict is only required if different from the template delivery settings.", "operationId": "createOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}}, "paths": {"suppress": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "In certain situations, for example, scheduled maintanance, you may want to suspend alarms to be triggered for a period of time.", "operationId": "suppressOrgAlarm", "tags": ["Orgs Alarm Templates"]}}}, "{alarmtemplate_id}": {"specs": {"delete": {"description": "Delete Org Alarm Template", "operationId": "deleteOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}, "get": {"description": "Get Org Alarm Template Details", "operationId": "getOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/alarmtemplate_id"}], "put": {"description": "Update Org Alarm Template", "operationId": "updateOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}}}}}, "apitokens": {"specs": {"get": {"description": "get organization api tokens", "operationId": "getOrgApiTokens", "tags": ["Orgs API Tokens"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org API Token\nNote that the token key is only available during creation time.", "operationId": "createOrgApiToken", "tags": ["Orgs API Tokens"]}}, "paths": {"{apitoken_id}": {"specs": {"delete": {"description": "Delete Org API Token", "operationId": "deleteOrgApiToken", "tags": ["Orgs API Tokens"]}, "get": {"description": "Get Org API Token", "operationId": "getOrgApiToken", "tags": ["Orgs API Tokens"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/apitoken_id"}], "put": {"description": "Update Org API Token", "operationId": "updateOrgApiToken", "tags": ["Orgs API Tokens"]}}}}}, "aptemplates": {"specs": {"get": {"description": "Get AP Templates", "operationId": "getOrgAptemplates", "tags": ["Orgs AP Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org AP Template", "operationId": "createOrgAptemplate", "tags": ["Orgs AP Templates"]}}, "paths": {"{aptemplate_id}": {"specs": {"delete": {"description": "Delete existing AP Template", "operationId": "deleteOrgAptemplate", "tags": ["Orgs AP Templates"]}, "get": {"description": "Get AP Template", "operationId": "getOrgAptemplate", "tags": ["Orgs AP Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/aptemplate_id"}], "put": {"description": "Update AP Template", "operationId": "updateOrgAptemplate", "tags": ["Orgs AP Templates"]}}}}}, "assetfilters": {"specs": {"get": {"description": "Get the list of all BLE asset filters for the given site. Each asset filter in the list operates independently. For a filter object to match an asset, all of the filter properties must match (logical \u2018AND\u2019 of each filter property). For example, the \u201cVisitor Tags\u201d filter below will match an asset when both the \u201cibeacon\\_uuid\u201d and \u201cibeacon_major\u201d properties match the asset. All non-matching assets are ignored.", "operationId": "getOrgAssetFilters", "tags": ["Orgs Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Asset Filter\nCreates a single BLE asset filter for the given site. Any subset of filter properties can be included in the filter. A matching asset must meet the conditions of all given filter properties (logical \u2018AND\u2019).", "operationId": "createOrgAssetFilters", "tags": ["Orgs Asset Filters"]}}, "paths": {"{assetfilter_id}": {"specs": {"delete": {"description": "Deletes an existing BLE asset filter for the given site.", "operationId": "deleteOrgAssetFilters", "tags": ["Orgs Asset Filters"]}, "get": {"description": "Get Org Asset Filter Details", "operationId": "getOrgAssetFilter", "tags": ["Orgs Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/assetfilter_id"}], "put": {"description": "Updates an existing BLE asset filter for the given site.", "operationId": "updateOrgAssetFilters", "tags": ["Orgs Asset Filters"]}}}}}, "assets": {"specs": {"get": {"description": "Get Org Assets", "operationId": "getOrgAssets", "tags": ["Orgs Assets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Asset", "operationId": "createOrgAsset", "tags": ["Orgs Assets"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Impert Org Assets. \nIt can be done via a CSV file or a JSON payload.\n\n## CSV File Format\n```\nname,mac\n\"asset_name\",5c5b53010101\n``` ", "operationId": "importOrgAssets", "tags": ["Orgs Assets"]}}}, "{asset_id}": {"specs": {"delete": {"description": "Delete Org Asset", "operationId": "deleteOrgAsset", "tags": ["Orgs Assets"]}, "get": {"description": "Get Org Asset Details", "operationId": "getOrgAsset", "tags": ["Orgs Assets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/asset_id"}], "put": {"description": "Update Org Asset", "operationId": "updateOrgAsset", "tags": ["Orgs Assets"]}}}}}, "cert": {"specs": {"get": {"description": "Get Org Certificates", "operationId": "getOrgCertificates", "tags": ["Orgs Cert"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"regenerate": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Clear Org Certificates", "operationId": "clearOrgCertificates", "tags": ["Orgs Cert"]}}}}}, "claim": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "#### Body Parameters\n**Parameter**|**Type**|**Description**\n:-------------: |:-------------: |:-------------:\ncode|string|activation code\ntype|string|what to claim, all (default) / license / inventory", "operationId": "claimOrgLicense", "tags": ["Orgs Claim"]}}}, "clients": {"paths": {"count": {"specs": {"get": {"description": "Count Org Wireless Clients", "operationId": "countOrgWirelessClients", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "device", "enum": ["mac", "hostname", "device", "os", "model", "ap", "vlan", "ssid", "ip"]}}, {"description": "partial / full MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type, e.g. Mac, Nvidia, iPhone", "in": "query", "name": "device", "schema": {"type": "string"}}, {"description": "os, e.g. Sierra, Yosemite, Windows 10", "in": "query", "name": "os", "schema": {"type": "string"}}, {"description": "model, e.g. \u201cMBP 15 late 2013\u201d, 6, 6s, \u201c8+ GSM\u201d", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac where the client has connected to", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "events": {"paths": {"search": {"specs": {"get": {"description": "Get Org Clients Events", "operationId": "searchOrgClientEvents", "parameters": [{"description": "event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "for assoc/disassoc events", "in": "query", "name": "reason_code", "schema": {"type": "integer"}}, {"description": "SSID Name", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "802.11 standard", "in": "query", "name": "proto", "schema": {"enum": ["b", "g", "n", "ac", "ax", "a"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "search": {"specs": {"get": {"description": "Search Org Wireless Clients", "operationId": "searchOrgWirelessClients", "parameters": [{"description": "partial / full MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type, e.g. Mac, Nvidia, iPhone", "in": "query", "name": "device", "schema": {"type": "string"}}, {"description": "os, e.g. Sierra, Yosemite, Windows 10", "in": "query", "name": "os", "schema": {"type": "string"}}, {"description": "model, e.g. \u201cMBP 15 late 2013\u201d, 6, 6s, \u201c8+ GSM\u201d", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac where the client has connected to", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/psk_id_query"}, {"$ref": "#/components/parameters/psk_name"}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/ip"}, {"description": "full MAC address, hostname, username or ip", "in": "query", "name": "text", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "sessions": {"paths": {"count": {"specs": {"get": {"description": "Count Org Wireless Clients Sessions", "operationId": "countOrgWirelessClientsSessions", "parameters": [{"in": "query", "name": "distinct", "required": true, "schema": {"default": "device", "enum": ["ssid", "ap", "ip", "vlan", "hostname", "os", "model", "device"], "type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "5 / 24", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "#### Query Parameters\n**Parameter**|**Type**|**Description**\n:-------------: |:-------------: |:-------------:\nap|string|AP MAC\nband|string|5 / 24\nclient_family|string|E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d\nclient_manufacture|string|E.g. \u201cApple\u201d\nclient_model|string|E.g. \u201c8+\u201d, \u201cXS\u201d\nclient_os|string|E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d\nssid|string|SSID\nwlan_id|string|wlan_id", "operationId": "searchOrgWirelessClientSessions", "parameters": [{"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "5 / 24", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/psk_id_query"}, {"$ref": "#/components/parameters/psk_name"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}}}, "clone": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create an Org by cloning from another one. Org Settings, Templates, Wxlan Tags, Wxlan Tunnels, Wxlan Rules, Org Wlans will be copied. Sites and Site Groups will not be copied, and therefore, the copied template will not be applied to any site/sitegroups.", "operationId": "cloneOrg", "tags": ["Orgs Clone"]}}}, "crl": {"specs": {"get": {"description": "Get Org CRL File", "operationId": "getOrgCrlFile", "tags": ["Orgs CRL"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "deviceprofiles": {"specs": {"get": {"description": "Get Org Device Profiles", "operationId": "getOrgDeviceProfiles", "tags": ["Orgs Device Profiles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Device Profile", "operationId": "createOrgDeviceProfiles", "tags": ["Orgs Device Profiles"]}}, "paths": {"{deviceprofile_id}": {"specs": {"delete": {"description": "Delete Org Device Profile", "operationId": "deleteOrgDeviceProfile", "tags": ["Orgs Device Profiles"]}, "get": {"description": "Get Org device Profile Details", "operationId": "getOrgDeviceProfile", "tags": ["Orgs Device Profiles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/deviceprofile_id"}], "put": {"description": "Update Org Device Profile", "operationId": "updateOrgDeviceProfile", "tags": ["Orgs Device Profiles"]}}, "paths": {"assign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/deviceprofile_id"}], "post": {"description": "Assign Org Device Profile to Devices", "operationId": "assignOrgDeviceProfileToDevices", "tags": ["Orgs Device Profiles"]}}}, "unassign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/deviceprofile_id"}], "post": {"description": "Unassign Org Device Profile from Devices", "operationId": "unassignOrgDeviceProfilesFromDevices", "tags": ["Orgs Device Profiles"]}}}}}}}, "devices": {"specs": {"get": {"description": "Get Org Devices", "operationId": "getOrgDevices", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"count": {"specs": {"get": {"description": "Count Org Devices", "operationId": "countOrgDevices", "parameters": [{"example": "model", "in": "query", "name": "distinct", "required": true, "schema": {"default": "model", "enum": ["hostname", "site_id", "model", "mac", "version", "ip", "mxtunnel_status", "mxedge_id", "lldp_system_name", "lldp_system_desc", "lldp_port_id", "lldp_mgmt_addr"], "type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "version", "in": "query", "name": "version", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"description": "MxTunnel status, up / down", "in": "query", "name": "mxtunnel_status", "schema": {"enum": ["up", "down"], "type": "string"}}, {"description": "Mist Edge id, if AP is connecting to a Mist Edge", "in": "query", "name": "mxedge_id", "schema": {"type": "string"}}, {"description": "LLDP system name", "in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"description": "LLDP system description", "in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"description": "LLDP port id", "in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"description": "LLDP management ip address", "in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "events": {"paths": {"count": {"specs": {"get": {"description": "Count Org Devices Events", "operationId": "countOrgDevicesEvents", "parameters": [{"in": "query", "name": "distinct", "required": true, "schema": {"default": "model", "enum": ["org_id", "site_id", "ap", "apfw", "model", "text", "timestamp", "type"], "type": "string"}}, {"description": "org id", "in": "query", "name": "org_id", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "AP Firmware", "in": "query", "name": "apfw", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "event message", "in": "query", "name": "text", "schema": {"type": "string"}}, {"description": "event time", "in": "query", "name": "timestamp", "schema": {"type": "string"}}, {"description": "Events Type", "in": "query", "name": "type", "schema": {"enum": ["AP_CONFIG_CHANGED_BY_RRM", "AP_CONFIG_CHANGED_BY_USER", "AP_CONFIGURED", "AP_RECONFIGURED", "AP_RESTARTED", "AP_RESTART_BY_USER", "AP_RRM_ACTION", "CLIENT_DNS_OK", "MARVIS_DNS_FAILURE"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org Devices Events", "operationId": "searchOrgDevicesEvents", "parameters": [{"description": "org id", "in": "query", "name": "org_id", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "AP Firmware", "in": "query", "name": "apfw", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "event message", "in": "query", "name": "text", "schema": {"type": "string"}}, {"description": "event time", "in": "query", "name": "timestamp", "schema": {"type": "string"}}, {"description": "Events Type", "in": "query", "name": "type", "schema": {"enum": ["AP_CONFIG_CHANGED_BY_RRM", "AP_CONFIG_CHANGED_BY_USER", "AP_CONFIGURED", "AP_RECONFIGURED", "AP_RESTARTED", "AP_RESTART_BY_USER", "AP_RRM_ACTION", "CLIENT_DNS_OK", "MARVIS_DNS_FAILURE"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "search": {"specs": {"get": {"description": "Search Org Devices", "operationId": "searchOrgDevices", "parameters": [{"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "version", "in": "query", "name": "version", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"description": "MxTunnel status, up / down", "in": "query", "name": "mxtunnel_status", "schema": {"enum": ["up", "down"], "type": "string"}}, {"description": "Mist Edge id, if AP is connecting to a Mist Edge", "in": "query", "name": "mxedge_id", "schema": {"type": "string"}}, {"description": "LLDP system name", "in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"description": "LLDP system description", "in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"description": "LLDP port id", "in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"description": "LLDP management ip address", "in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "upgrade": {"specs": {"get": {"description": "get Site multi devces upgrades", "operationId": "getOrgMultiSitesDevicesUpgrades", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Upgrade Multiple Sites", "operationId": "upgradeOrgMultiSitesDevices", "tags": ["Orgs Devices"]}}, "paths": {"{upgrade_id}": {"specs": {"get": {"description": "Get Multi Site Upgrade", "operationId": "getOrgMultiSitesUpgrade", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"in": "path", "name": "upgrade_id", "required": true, "schema": {"format": "uuid", "type": "string"}}]}}}}}}, "gatewaytemplates": {"specs": {"get": {"description": "Get Organization Gateway Templates", "operationId": "getOrgGatewayTemplates", "tags": ["Orgs Gateway Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Gateway Template", "operationId": "createOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}}, "paths": {"{gatewaytemplate_id}": {"specs": {"delete": {"description": "Delete Organization Gateway Template", "operationId": "deleteOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}, "get": {"description": "Get Organization Gateway Template details", "operationId": "getOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/gatewaytemplate_id"}], "put": {"description": "Update Organization Gateway Template", "operationId": "updateOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}}}}}, "inventory": {"specs": {"get": {"description": "Get Org Inventory\n\n## VC (Virtual-Chassis) Management\nIdeally VC should be managed as a single device - where - one managed entity where config / monitoring is anchored against (with a stable identify MAC) - all members appears in the inventory\n\nIn our implementation, we strive to achieve that without manual user configurations by 1. during claim or adoption a VC, we require FPC0 to exist and will use its MAC as identify for the entire chassis 2. other VC members will be automatically populated when they\u2019re all present\n\nThe perceivable result is 1. from /sites/:site_id/stats/devices/:fpc0_mac API, you\u2019d see the VC where module_stat contains the VC members 2. from /orgs/:org_id/inventory?vc=true API, you\u2019d see all VC members with vc_mac pointing to the FPC0", "operationId": "getOrgInventory", "parameters": [{"description": "device serial", "in": "query", "name": "serial", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"enum": ["ap", "switch", "gateway"], "type": "string"}}, {"description": "MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "site id if assigned, null if not assigned", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "vc_mac", "schema": {"type": "string"}}, {"in": "query", "name": "vc", "schema": {"type": "string"}}], "tags": ["Orgs Inventory"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Add Device to Org Inventory", "operationId": "addOrgInventory", "tags": ["Orgs Inventory"]}, "put": {"description": "** Add or Delete multiple inventory from org **\n* if Delete\nThis removes the inventory from the org. If the inventory is already assigned to a site, it will be unassigned.", "operationId": "updateOrgInventoryAssignment", "tags": ["Orgs Inventory"]}}, "paths": {"replace": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "It\u2019s a common request we get from the customers. When a AP HW has problem and need a replacement, they would want to copy the existing attributes (Device Config) of this old AP to the new one. It can be done by providing the MAC of a device that\u2019s currently in the inventory but not assigned. The Device replaced will become unclaimed.", "operationId": "replaceOrgDevices", "tags": ["Orgs Inventory"]}}}}}, "invites": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "If the request is successful, an email will also be sent to the user with a link to ```https://manage.mist.com/verify/invite?token=:token&expire=1459632743&org=OrgName```", "operationId": "inviteOrgAdmin", "tags": ["Orgs Invites"]}}, "paths": {"{invite_id}": {"specs": {"delete": {"description": "Delete Admin Invite", "operationId": "uninviteOrgAdmin", "tags": ["Orgs Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/invite_id"}], "put": {"description": "Update Admin Invite", "operationId": "updateOrgAdminInvite", "tags": ["Orgs Invites"]}}}}}, "junos": {"paths": {"register_cmd": {"specs": {"get": {"description": "Junos devices running mist agents can be managed/adopted by Mist.\n", "operationId": "getOrgJunosDevicesRegistrationCommands", "tags": ["Orgs Devices"]}, "parameters": [{"in": "path", "name": "org_id", "required": true, "schema": {"type": "string"}}]}}}}, "licenses": {"specs": {"get": {"description": "Get the list of licenses", "operationId": "getOrgLicencesSummary", "tags": ["Orgs Licenses"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "put": {"description": "Move, Undo Move or Delete Org License to Another Org\nIf the admin has admin privilege against the org_id and dst_org_id, he can move some of the licenses to another Org. Given that: \n1. the specified license is currently active \n2. there\u2019s enough licenses left in the specified license (by subscription_id) \n3. there will still be enough entitled licenses for the type of license after the amendment", "operationId": "moveOrDeleteOrgLicenseToAnotherOrg", "tags": ["Orgs Licenses"]}}, "paths": {"usages": {"specs": {"get": {"description": "Get Licenses Usage by Sites\nThis shows license usage (i.e. needed) based on the features enabled for the site.", "operationId": "getOrgLicencesBySite", "tags": ["Orgs Licenses"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "logs": {"specs": {"get": {"description": "Get a list of change logs for the current Org", "operationId": "getOrgLogs", "parameters": [{"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "admin name or email", "in": "query", "name": "admin_name", "schema": {"type": "string"}}, {"description": "message", "in": "query", "name": "message", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Logs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Audit Logs", "operationId": "countOrgLogsByDistinctAttributes", "parameters": [{"in": "query", "name": "distinct", "required": true, "schema": {"default": "admin_name", "enum": ["admin_id", "admin_name", "message", "site_id"], "type": "string"}}, {"in": "query", "name": "admin_id", "schema": {"type": "string"}}, {"in": "query", "name": "admin_name", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "message", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Logs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "maps": {"paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign matching inventory to specific site, place ap if name or mac matches\n\n# CSV File Format\n```\nVendor AP name,Mist AP Mac\nUS Office AP-2 - 5c:5b:35:00:00:02,5c5b35000002\n``` ", "operationId": "importOrgMaps", "tags": ["Orgs Maps"]}}}}}, "mxclusters": {"specs": {"get": {"description": "Get MxEdge Clusters", "operationId": "getOrgMxEdgeClusters", "tags": ["Orgs MxClusters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create MxCluster", "operationId": "createOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}}, "paths": {"{mxcluster_id}": {"specs": {"delete": {"description": "Delete Org MXEdge Cluster", "operationId": "deleteOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}, "get": {"description": "Get Org MxEdge Cluster Details", "operationId": "getOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxcluster_id"}], "put": {"description": "Update Org MxEdge Cluster", "operationId": "updateOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}}}}}, "mxedges": {"specs": {"get": {"description": "Get Org MxEdges", "operationId": "getOrgMxEdges", "tags": ["Orgs MxEdges"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create MxEdge", "operationId": "createOrgMxEdge", "tags": ["Orgs MxEdges"]}}, "paths": {"assign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Assign Org MxEdge to Site", "operationId": "assignOrgMxEdgeToSite", "tags": ["Orgs MxEdges"]}}}, "claim": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "For a Mist Edge in default state, it will show a random claim code like `135-546-673` which you can \u201cclaim\u201d it into your Org", "operationId": "claimOrgMxEdge", "tags": ["Orgs MxEdges"]}}}, "unassign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Unassign Org MxEdge from Site", "operationId": "unassignOrgMxEdgeFromSite", "tags": ["Orgs MxEdges"]}}}, "upgrade": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Upgrade Mist Edges", "operationId": "upgradeOrgMxEdges", "tags": ["Orgs MxEdges"]}}}, "version": {"specs": {"get": {"description": "Get Mist Edge Upgrade Information", "operationId": "getOrgMxEdgeUpgradeInfo", "parameters": [{"description": "upgrade channel to follow, stable (default) / beta / alpha", "in": "query", "name": "channel", "schema": {"default": "stable", "enum": ["stable", "beta", "alpha"], "type": "string"}}], "tags": ["Orgs MxEdges"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{mxedge_id}": {"specs": {"delete": {"description": "Delete Org MxEdge", "operationId": "deleteOrgMxEdge", "tags": ["Orgs MxEdges"]}, "get": {"description": "Get Org MxEdge details", "operationId": "getOrgMxEdge", "tags": ["Orgs MxEdges"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "put": {"description": "Update Org MxEdge", "operationId": "updateOrgMxEdge", "tags": ["Orgs MxEdges"]}}, "paths": {"restart": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "In the case where a Mist Edge is replaced, you would need to unregister it. Which disconnects the currently the connected Mist Edge and allow another to register.", "operationId": "restartOrgMxEdge", "tags": ["Orgs MxEdges"]}}}, "services": {"paths": {"tunterm": {"paths": {"bounce_port": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "Bounce TunTerm Data Ports", "operationId": "bounceOrgMxEdgeDataPorts", "parameters": [], "tags": ["Orgs MxEdges"]}}}}}, "{name}": {"paths": {"{action}": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}, {"description": "tunterm or radsecproxy or mxagent", "in": "path", "name": "name", "required": true, "schema": {"enum": ["tunterm", "radsecproxy", "mxagent"], "type": "string"}}, {"description": "restart or start or stop", "in": "path", "name": "action", "required": true, "schema": {"enum": ["restart", "start", "stop"], "type": "string"}}], "post": {"description": "Control Services on a Mist Edge", "operationId": "controlOrgMxEdgeServices", "tags": ["Orgs MxEdges"]}}}}}}}, "unregister": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "In the case where a Mist Edge is replaced, you would need to unregister it. Which disconnects the currently the connected Mist Edge and allow another to register.", "operationId": "unregisterOrgMxEdge", "tags": ["Orgs MxEdges"]}}}, "upgrade": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "Upgrade MxEdge", "operationId": "upgradeOrgMxEdge", "tags": ["Orgs MxEdges"]}}}}}}}, "mxtunnels": {"specs": {"get": {"description": "Get Org MxTiunnels", "operationId": "getOrgMxTunnels", "tags": ["Orgs MxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create MxTunnel", "operationId": "createOrgMxTunnel", "tags": ["Orgs MxTunnels"]}}, "paths": {"{mxtunnel_id}": {"specs": {"delete": {"description": "Delete Org MxTunnel", "operationId": "deleteOrgMxTunnel", "tags": ["Orgs MxTunnels"]}, "get": {"description": "Get Org MxTunnel Details", "operationId": "getOrgMxTunnel", "tags": ["Orgs MxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxtunnel_id"}], "put": {"description": "Update Org MxTunnel", "operationId": "updateOrgMxTunnel", "tags": ["Orgs MxTunnels"]}}}}}, "networks": {"specs": {"get": {"description": "Get Organization Networks", "operationId": "getOrgNetworks", "tags": ["Orgs Networks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Organization Network", "operationId": "createOrgNetwork", "tags": ["Orgs Networks"]}}, "paths": {"{network_id}": {"specs": {"delete": {"description": "Delete Organization Network", "operationId": "deleteOrgNetwork", "tags": ["Orgs Networks"]}, "get": {"description": "Get Organization Network Details", "operationId": "get-api-v1-orgs-org_id-networks-network_id", "tags": ["Orgs Gateway Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/network_id"}], "put": {"description": "Update Organization Network", "operationId": "updateOrgNetwork", "tags": ["Orgs Networks"]}}}}}, "networktemplates": {"specs": {"get": {"description": "Get Org Network Templates", "operationId": "getOrgNetworkTemplates", "tags": ["Orgs Network Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Update Org Network Templates", "operationId": "createOrgNetworkTemplate", "tags": ["Orgs Network Templates"]}}, "paths": {"{networktemplate_id}": {"specs": {"delete": {"description": "Delete Org Network Template", "operationId": "deleteOrgNetworkTemplate", "tags": ["Orgs Network Templates"]}, "get": {"description": "Get Org Network Templates Details", "operationId": "getOrgNetworkTemplate", "tags": ["Orgs Network Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/networktemplate_id"}], "put": {"description": "Update Org Network Template", "operationId": "updateOrgNetworkTemplates", "parameters": [], "tags": ["Orgs Network Templates"]}}}}}, "ocdevices": {"paths": {"outbound_ssh_cmd": {"specs": {"get": {"description": "Get Org Juniper Devices command\n\nJuniper devices can be managed/adopted by Mist. Currently outbound-ssh + netconf is used.\nA few lines of CLI commands are generated per-Org, allowing the Juniper devices to phone home to Mist.", "operationId": "getOrgJuniperDevicesCommand", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "psks": {"specs": {"get": {"description": "Get Org Psks", "operationId": "getOrgPsks", "parameters": [{"example": "psk_name", "in": "query", "name": "name", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"in": "query", "name": "role", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Orgs Psks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org PSK", "operationId": "createOrgPsk", "tags": ["Orgs Psks"]}, "put": {"description": "Update multi PSKs", "operationId": "updateOrgMultiPsks", "tags": ["Orgs Psks"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Import PSK from CSV file or JSON\n\n##\u00a0CSV File Format\n```\nPSK Import CSV File Format:\nname,ssid,passphrase,usage,vlan_id,mac\nCommon,warehouse,foryoureyesonly,single,35,a31425f31278\nJustin,reception,visible,multi,1002\n```", "operationId": "importOrgPsk", "tags": ["Orgs Psks"]}}}, "{psk_id}": {"specs": {"delete": {"description": "Delete Org PSK", "operationId": "deleteOrgPsk", "tags": ["Orgs Psks"]}, "get": {"description": "Get Org PSK Details", "operationId": "getOrgPsk", "tags": ["Orgs Psks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/psk_id"}], "put": {"description": "Update Org PSK ", "operationId": "updateOrgPsk", "tags": ["Orgs Psks"]}}}}}, "rftemplates": {"specs": {"get": {"description": "Get Org RF Template", "operationId": "getOrgRfTemplates", "tags": ["Orgs RF Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org RF Template", "operationId": "createOrgRfTemplate", "tags": ["Orgs RF Templates"]}}, "paths": {"{rftemplate_id}": {"specs": {"delete": {"description": "Delete Org RF Template", "operationId": "deleteOrgRfTemplate", "tags": ["Orgs RF Templates"]}, "get": {"description": "Get Org RF Template Details", "operationId": "getOrgRfTemplate", "tags": ["Orgs RF Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/rftemplate_id"}], "put": {"description": "Update Org RF Template ", "operationId": "updateOrgRfTemplate", "tags": ["Orgs RF Templates"]}}}}}, "sdkclients": {"paths": {"{sdkclient_id}": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkclient_id"}], "put": {"description": "Update SDK Client", "operationId": "updateSdkClient", "tags": ["Orgs SDK Clients"]}}}}}, "sdkinvites": {"specs": {"get": {"description": "Get SDK Invites", "operationId": "getSdkInvites", "tags": ["Orgs SDK Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create SDK Invite", "operationId": "createSdkInvite", "tags": ["Orgs SDK Invites"]}}, "paths": {"{sdkinvite_id}": {"specs": {"delete": {"description": "Revoke SDK Invite", "operationId": "revokeSdkInvite", "tags": ["Orgs SDK Invites"]}, "get": {"description": "Get SDK Invite Details", "operationId": "getSdkInvite", "tags": ["Orgs SDK Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}], "put": {"description": "Update SDK Invite", "operationId": "updateSdkInvite", "tags": ["Orgs SDK Invites"]}}, "paths": {"email": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}], "post": {"description": "Send SDK Invite by Email", "operationId": "sendSdkInviteEmail", "tags": ["Orgs SDK Invites"]}}}, "qrcode": {"specs": {"get": {"description": "Revoke SDK Invite", "operationId": "getSdkInviteQrCode", "tags": ["Orgs SDK Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}]}}, "sms": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}], "post": {"description": "Send SDK Invite by SMS", "operationId": "sendSdkInviteSms", "tags": ["Orgs SDK Invites"]}}}}}}}, "sdktemplates": {"specs": {"get": {"description": "Get SDK Templates", "operationId": "getSdkTemplates", "tags": ["Orgs SDK Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create SDK Template", "operationId": "createSdkTemplate", "tags": ["Orgs SDK Templates"]}}, "paths": {"{sdktemplate_id}": {"specs": {"delete": {"description": "Delete SDK Template", "operationId": "deleteSdkTemplate", "tags": ["Orgs SDK Templates"]}, "get": {"description": "Get SDK Template Details", "operationId": "getSdkTemplate", "tags": ["Orgs SDK Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdktemplate_id"}], "put": {"description": "Update SDK Template", "operationId": "updateSdkTemplate", "tags": ["Orgs SDK Templates"]}}}}}, "secpolicies": {"specs": {"get": {"description": "Get Org Security Policies", "operationId": "getOrgSecPolicies", "tags": ["Orgs SecPolicies"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Security Policy", "operationId": "createOrgSecPolicies", "tags": ["Orgs SecPolicies"]}}, "paths": {"{secpolicy_id}": {"specs": {"delete": {"description": "Delete Org Security Policy", "operationId": "deleteOrgSecPolicies", "tags": ["Orgs SecPolicies"]}, "get": {"description": "Get Org Security Policy", "operationId": "getOrgSecPolicy", "tags": ["Orgs SecPolicies"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/secpolicy_id"}], "put": {"description": "Update Org Security Policy", "operationId": "updateOrgSecPolicies", "tags": ["Orgs SecPolicies"]}}}}}, "services": {"specs": {"get": {"description": "Get Org Services", "operationId": "getOrgServices", "tags": ["Orgs Services"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create getOrgServices Service", "operationId": "createOrgService", "tags": ["Orgs Services"]}}}, "setting": {"specs": {"get": {"description": "Get Org Settings", "operationId": "getOrgSettings", "tags": ["Orgs Setting"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "put": {"description": "Update Org Settings", "operationId": "updateOrgSettings", "tags": ["Orgs Setting"]}}, "paths": {"blacklist": {"specs": {"delete": {"description": "Delete Org Blacklist Station Clients", "operationId": "deleteOrgClientsBlocklist", "tags": ["Orgs Setting"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Blacklist Client List. \nIf there is already a blacklist, this API will replace it with the new one. \nMax number of blacklist clients is 1000. \nRetrieve the current blacklisted clients from \u2018blacklist_url\u2019 under Org:Setting\n", "operationId": "createOrgClientsBlocklist", "tags": ["Orgs Setting"]}}}, "pcap_bucket": {"paths": {"setup": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Provide Customer Bucket Name\nSetting up Custom PCAP Bucket Involves the following:\n\nprovide the bucket name\nwe\u2019ll attempt to write a file MIST_TOKEN\nyou have to verify the ownership of the bucket by providing the content of the MIST_TOKEN", "operationId": "setOrgCustomBucket", "tags": ["Orgs Setting"]}}}, "verify": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Verify Customer PCAP Bucket\n\nNOTE: If successful, a \u201cVERIFIED\u201d file will be created in the bucket", "operationId": "verifyOrgCustomBucket", "tags": ["Orgs Setting"]}}}}}}}, "sitegroups": {"specs": {"get": {"description": "Get Org Site Groups", "operationId": "getOrgSiteGroups", "tags": ["Orgs Sitegroups"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Site Group", "operationId": "createOrgSiteGroup", "tags": ["Orgs Sitegroups"]}}, "paths": {"{sitegroup_id}": {"specs": {"delete": {"description": "Delete Org Site Group", "operationId": "deleteOrgSiteGroup", "tags": ["Orgs Sitegroups"]}, "get": {"description": "Get Org Site Group", "operationId": "getOrgSiteGroup", "tags": ["Orgs Sitegroups"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sitegroup_id"}], "put": {"description": "Update Org Site Group", "operationId": "updateOrgSiteGroup", "tags": ["Orgs Sitegroups"]}}}}}, "sites": {"specs": {"get": {"description": "Get Org Sites", "operationId": "getOrgSites", "tags": ["Orgs Sites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Site", "operationId": "createOrgSite", "tags": ["Orgs Sites"]}}, "paths": {"count": {"specs": {"get": {"description": "Count Sites", "operationId": "countOrgSites", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "id", "enum": ["analytic_enabled", "app_waking", "asset_enabled", "auto_upgrade_enabled", "auto_upgrade_version", "country_code", "honeypot_enabled", "id", "locate_unconnected", "mesh_enabled", "name", "rogue_enabled", "remote_syslog_enabled", "rtsa_enabled", "vna_enabled", "wifi_enabled"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Sites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Sites", "operationId": "searchOrgSites", "parameters": [{"description": "if Advanced Analytic feature is enabled", "in": "query", "name": "analytic_enabled", "schema": {"type": "boolean"}}, {"description": "if App Waking feature is enabled", "in": "query", "name": "app_waking", "schema": {"type": "boolean"}}, {"description": "if Asset Tracking is enabled", "in": "query", "name": "asset_enabled", "schema": {"type": "boolean"}}, {"description": "if Auto Upgrade feature is enabled", "in": "query", "name": "auto_upgrade_enabled", "schema": {"type": "boolean"}}, {"description": "if Auto Upgrade feature is enabled", "in": "query", "name": "auto_upgrade_version", "schema": {"type": "boolean"}}, {"description": "site country code", "in": "query", "name": "country_code", "schema": {"type": "string"}}, {"description": "if Honeypot detection is enabled", "in": "query", "name": "honeypot_enabled", "schema": {"type": "boolean"}}, {"description": "site id", "in": "query", "name": "id", "schema": {"type": "string"}}, {"description": "if unconnected client are located", "in": "query", "name": "locate_unconnected", "schema": {"type": "boolean"}}, {"description": "if Mesh feature is enabled", "in": "query", "name": "mesh_enabled", "schema": {"type": "boolean"}}, {"description": "site name", "in": "query", "name": "name", "schema": {"type": "string"}}, {"description": "if Rogue detection is enabled", "in": "query", "name": "rogue_enabled", "schema": {"type": "boolean"}}, {"description": "if Remote Syslog is enabled", "in": "query", "name": "remote_syslog_enabled", "schema": {"type": "boolean"}}, {"description": "if managed mobility feature is enabled", "in": "query", "name": "rtsa_enabled", "schema": {"type": "boolean"}}, {"description": "if Virtual Network Assistant is enabled", "in": "query", "name": "vna_enabled", "schema": {"type": "boolean"}}, {"description": "if WIFI feature is enabled", "in": "query", "name": "wifi_enabled", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Sites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{site_name}": {"paths": {"maps": {"paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign matching inventory to specific site, place ap if name or mac matches\n\n#### Request\n\n```\n\"json\": a JSON string describing your upload\n\"file\": a binary file\n```", "operationId": "importOrgMapToSite", "tags": ["Orgs Sites"]}}}}}}}}}, "ssoroles": {"specs": {"get": {"description": "Get Org SSO Roles", "operationId": "getOrgSsoRoles", "tags": ["Orgs SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org SSO Role", "operationId": "createOrgSsoRole", "tags": ["Orgs SSO Roles"]}}, "paths": {"{ssorole_id}": {"specs": {"delete": {"description": "Delete Org SSO Role", "operationId": "deleteOrgSsoRoles", "tags": ["Orgs SSO Roles"]}, "get": {"description": "Get Org SSO Role Details", "operationId": "getOrgSsoRole", "tags": ["Orgs SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/ssorole_id"}], "put": {"description": "Update Org SSO Role", "operationId": "updateOrgSsoRole", "tags": ["Orgs SSO Roles"]}}}}}, "ssos": {"specs": {"get": {"description": "Get Org SSO Configuration", "operationId": "getOrgSsos", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org SSO Configuration", "operationId": "createOrgSso", "tags": ["Orgs SSO"]}}, "paths": {"{sso_id}": {"specs": {"delete": {"description": "Delete Org SSO Configuration", "operationId": "deleteOrgSso", "tags": ["Orgs SSO"]}, "get": {"description": "Get Org SSO Configuration Details", "operationId": "getOrgSso", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}], "put": {"description": "Update Org SSO Configuration", "operationId": "updateOrgSso", "tags": ["Orgs SSO"]}}, "paths": {"failures": {"specs": {"get": {"description": "Get Org SSO Latest Failures", "operationId": "getOrgSsoLatestFailures", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata": {"specs": {"get": {"description": "Get Org SSO SAML Metadata", "operationId": "getOrgSsoSamlMetadata", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata.xml": {"specs": {"get": {"description": "Download Org SSO SAML Metdata", "operationId": "downloadOrgSsoSamlMetadata", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}]}}}}}}, "stats": {"specs": {"get": {"description": "Get Org Stats", "operationId": "getOrgStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"assets": {"specs": {"get": {"description": "Get Org Assets Stats", "operationId": "getOrgAssetsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "devices": {"specs": {"get": {"description": "Org Devices stats\nThis API renders some high-level device stats, pagination is assumed and returned in response header (as the response is an array)\n", "operationId": "getOrgDevicesStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateways", "all"], "type": "string"}}, {"in": "query", "name": "status", "schema": {"default": "all", "enum": ["all", "connected", "disconnected"], "type": "string"}}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "mxedges": {"specs": {"get": {"description": "Get Org MxEdge Stats", "operationId": "getOrgMxEdgesStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"{mxedge_id}": {"specs": {"get": {"description": "Get Org MxEdge Details Stats", "operationId": "getOrgMxEdgeStats", "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}]}}}}, "tunnels": {"paths": {"count": {"specs": {"get": {"description": "Count Org Mx Tunnels", "operationId": "countOrgMxTunnelsStats", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "wxtunnel_id", "enum": ["mxcluster_id", "wxtunnel_id", "site_id", "org_id"], "type": "string"}}, {"in": "query", "name": "mxcluster_id", "schema": {"type": "string"}}, {"in": "query", "name": "org_id", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "wxtunnel_id", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org MxTunnels Stats", "operationId": "getOrgMxTunnelsStats", "parameters": [{"in": "query", "name": "mxcluster_id", "schema": {"type": "string"}}, {"in": "query", "name": "org_id", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "wxtunnel_id", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "vpn_peers": {"paths": {"count": {"specs": {"get": {"description": "Count Org Peer Path Statgs", "operationId": "countOrgPeerPathStats", "parameters": [{"in": "query", "name": "distinct", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": []}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org Peer Path Stats", "operationId": "searchOrgPeerPathStats", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Orgs VPNs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}}}, "subscriptions": {"specs": {"delete": {"description": "Unsubscribe from Org Alarms/Reports\nSubscriptions define how Org Alarms/Reports are delivered to whom", "operationId": "unsubscribeOrgAlarmsReports", "tags": ["Orgs Subscriptions"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Subscribe to Org Alarms/Reports\nSubscriptions define how Org Alarms/Reports are delivered to whom", "operationId": "subscribeOrgAlarmsReports", "tags": ["Orgs Subscriptions"]}}}, "templates": {"specs": {"get": {"description": "Get Org Templates", "operationId": "getOrgTemplates", "tags": ["Orgs Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Template", "operationId": "createOrgTemplate", "tags": ["Orgs Templates"]}}, "paths": {"{template_id}": {"specs": {"delete": {"description": "Delete Org Template", "operationId": "deleteOrgTemplate", "tags": ["Orgs Templates"]}, "get": {"description": "Get Org Template Details", "operationId": "getOrgTemplate", "tags": ["Orgs Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/template_id"}], "put": {"description": "Update Org Template", "operationId": "updateOrgTemplate", "tags": ["Orgs Templates"]}}, "paths": {"clone": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/template_id"}], "post": {"description": "Clone Org Template", "operationId": "cloneOrgTemplate", "tags": ["Orgs Templates"]}}}}}}}, "tickets": {"specs": {"get": {"description": "Get Tickets of an Org", "operationId": "getOrgTickets", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}], "tags": ["Orgs Tickets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create a support ticket", "operationId": "createOrgTicket", "tags": ["Orgs Tickets"]}}, "paths": {"{ticket_id}": {"specs": {"get": {"description": "Get support ticket details", "operationId": "getOrgTicket", "tags": ["Orgs Tickets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/ticket_id"}], "put": {"description": "Update support ticket", "operationId": "updateOrgTicket", "tags": ["Orgs Tickets"]}}, "paths": {"comments": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/ticket_id"}], "post": {"description": "Add Comment to support ticket", "operationId": "addOrgTicketComment", "tags": ["Orgs Tickets"]}}}}}}}, "vpns": {"specs": {"get": {"description": "Get Org VPNs", "operationId": "getOrgsVpns", "tags": ["Orgs VPNs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org VPN", "operationId": "createOrgVpns", "tags": ["Orgs VPNs"]}}}, "webhooks": {"specs": {"get": {"description": "Get Org Webhooks", "operationId": "getOrgWebhooks", "tags": ["Orgs Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Webhook", "operationId": "createOrgWebhook", "tags": ["Orgs Webhooks"]}}, "paths": {"{webhook_id}": {"specs": {"delete": {"description": "Delete Org Webhook", "operationId": "deleteOrgWebhook", "tags": ["Orgs Webhooks"]}, "get": {"description": "Get Org Webhook Details", "operationId": "getOrgWebhook", "tags": ["Orgs Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/webhook_id"}], "put": {"description": "Update Org Webhook", "operationId": "updateOrgWebhook", "tags": ["Orgs Webhooks"]}}}}}, "wired_clients": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Clients", "operationId": "countOrgWiredClients", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "vlan", "mac"], "type": "string"}}, {"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Wired Clients", "operationId": "searchOrgWiredClients", "parameters": [{"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "wlans": {"specs": {"get": {"description": "Get Org Wlans", "operationId": "getOrgWlans", "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Wlan", "operationId": "createOrgWlan", "tags": ["Orgs Wlans"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Org WLAN Derived", "operationId": "getOrgWlanDerived", "parameters": [{"description": "whether to resolve SITE_VARS", "example": true, "in": "query", "name": "resolve", "schema": {"type": "boolean"}}], "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{wlan_id}": {"specs": {"delete": {"description": "Delete Org WLAN", "operationId": "deleteOrgWlan", "tags": ["Orgs Wlans"]}, "get": {"description": "Get Org Wlan Detail", "operationId": "getOrgWLAN", "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update Org Wlan", "operationId": "updateOrgWlan", "tags": ["Orgs Wlans"]}}, "paths": {"portal_image": {"specs": {"delete": {"description": "Delete Org WLAN Portal Image", "operationId": "deleteOrgWlanPortalImage", "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wlan_id"}], "post": {"description": "Upload Org WLAN Portal Image", "operationId": "uploadOrgWlanPortalImage", "tags": ["Orgs Wlans"]}}}, "portal_template": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update Org WLAN Portal Template", "operationId": "updateOrgWlanPortalTemplate", "tags": ["Orgs Wlans"]}}}}}}}, "wxrules": {"specs": {"get": {"description": "Get Org WxRules", "operationId": "getOrgWxRules", "tags": ["Orgs WxRules"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org WxRule", "operationId": "createOrgWxRule", "tags": ["Orgs WxRules"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Derived Org WxRule", "operationId": "getOrgWxRulesDerived", "tags": ["Orgs WxRules"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{wxrules_id}": {"specs": {"delete": {"description": "Delete Org WxRule", "operationId": "deleteOrgWxRule", "tags": ["Orgs WxRules"]}, "get": {"description": "Get Org WxRule Details", "operationId": "getOrgWxRule", "tags": ["Orgs WxRules"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxrules_id"}], "put": {"description": "Update Org WxRule", "operationId": "updateOrgWxRule", "tags": ["Orgs WxRules"]}}}}}, "wxtags": {"specs": {"get": {"description": "Get WxLAN Tags", "operationId": "getOrgWxTags", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create WxLAN Tag", "operationId": "createOrgWxTag", "tags": ["Orgs WxTags"]}}, "paths": {"apps": {"specs": {"get": {"description": "Get Application List", "operationId": "getOrgApplicationList", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{wxtag_id}": {"specs": {"delete": {"description": "Delete WxLAN Tag", "operationId": "deleteOrgWxTag", "tags": ["Orgs WxTags"]}, "get": {"description": "Get WxLAN Tag Details", "operationId": "getOrgWxTag", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxtag_id"}], "put": {"description": "Update WxLAN Tag", "operationId": "updateOrgWxTag", "tags": ["Orgs WxTags"]}}, "paths": {"clients": {"specs": {"get": {"description": "Get Current Matching Clients of a WXLAN Tag", "operationId": "getOrgCurrentMatchingClientsOfAWxTag", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxtag_id"}]}}}}}}, "wxtunnels": {"specs": {"get": {"description": "Get Org WxLAN Tunnels", "operationId": "getOrgWxTunnels", "tags": ["Orgs WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org WxAN Tunnel", "operationId": "createOrgWxTunnel", "tags": ["Orgs WxTunnels"]}}, "paths": {"{wxtunnel_id}": {"specs": {"delete": {"description": "Delete Org WxLAN Tunnel", "operationId": "deleteOrgWxTunnel", "tags": ["Orgs WxTunnels"]}, "get": {"description": "Get Org WxLAN Tunnel Details", "operationId": "getOrgWxTunnel", "tags": ["Orgs WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxtunnel_id"}], "put": {"description": "Update Org WxLAN Tunnel", "operationId": "updateOrgWxTunnel", "tags": ["Orgs WxTunnels"]}}}}}}}}}, "recover": {"specs": {"post": {"description": "Recover Password\nAn email will also be sent to the user with a link to https://manage.mist.com/verify/recover?token=:token", "operationId": "recoverPassword", "tags": ["Self"]}}, "paths": {"verify": {"paths": {"{token}": {"specs": {"parameters": [{"$ref": "#/components/parameters/token"}], "post": {"description": "Verify Recover Password\nWith correct verification, the user will be authenticated. UI can then prompt for new password", "operationId": "verifyRecoverPasssword", "tags": ["Self"]}}}}}}}, "register": {"specs": {"post": {"description": "Register a new admin and his/her org\nAn email will also be sent to the user with a link to https://manage.mist.com/verify/register?token=:token", "operationId": "registerNewAdmin", "tags": ["Admin"]}}, "paths": {"verify": {"paths": {"{token}": {"specs": {"parameters": [{"$ref": "#/components/parameters/token"}], "post": {"description": "Verify registration", "operationId": "verifyRegistration", "tags": ["Admin"]}}}}}}}, "self": {"specs": {"delete": {"description": "To delete ones account and every associated with it. The effects:\n\nthe account would be deleted\nany orphaned Org (that only has this account as admin) will be deleted\nalong with all data with Org (sites, wlans, devices) will be gone.", "operationId": "deleteSelf", "tags": ["Self"]}, "get": {"description": "Get Account information", "operationId": "getSelf", "tags": ["Self"]}, "put": {"description": "update Account Information", "operationId": "updateSelf", "tags": ["Self"]}}, "paths": {"apitokens": {"specs": {"get": {"description": "List Current API Tokens", "operationId": "getApiTokens", "tags": ["API Token"]}, "post": {"description": "Create API Token\nNote that the key is only available during creation time.", "operationId": "createApiToken", "tags": ["API Token"]}}, "paths": {"{apitoken_id}": {"specs": {"delete": {"description": "Delete an API Token", "operationId": "deleteApiToken", "tags": ["API Token"]}, "parameters": [{"in": "path", "name": "apitoken_id", "required": true, "schema": {"type": "string"}}]}}}}, "logs": {"specs": {"get": {"description": "Audit logs records all administrative activities done by current admin across all orgs\n\nGet a list of change logs across all Orgs for current admin", "operationId": "getSelfAuditLogs", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Self"]}}}, "oauth": {"paths": {"{provider}": {"specs": {"get": {"description": "Obtain Authorization URL for Linking", "operationId": "getOAuth2UrlForLinking", "parameters": [{"in": "query", "name": "forward", "schema": {"example": "http://manage.mist.com/oauth/callback.html", "type": "string"}}], "tags": ["Login With OAuth2"]}, "parameters": [{"in": "path", "name": "provider", "required": true, "schema": {"type": "string"}}], "post": {"description": "Link Mist account with an OAuth2 Provider", "operationId": "linkOAuth2MistAccount", "tags": ["Login With OAuth2"]}}}}}, "subscriptions": {"specs": {"get": {"description": "Get all the subscriptions", "operationId": "getAlarmSubscriptions", "tags": ["Self"]}}}, "two_factor": {"paths": {"token": {"specs": {"get": {"description": "Generate QR code for verification", "operationId": "generateQrCodeForVerification", "parameters": [{"in": "query", "name": "by", "schema": {"default": "qrcode", "enum": ["qrcode"], "type": "string"}}], "tags": ["Self"]}}}, "verify": {"specs": {"post": {"description": "Verify Two-factor (OTP)\nTo verify two-factor authentication by using a code generated by app (e.g. Google Authenticator, Authy) or by SMS. Upon successful verification, the otp_verified will be set to true if it hasn\u2019t already been.", "operationId": "verifyTwoFactor", "tags": ["Self"]}}}}}, "update": {"specs": {"post": {"description": "Change Email\nWe require the user to verify that they actually own the email address they intend to change it to.\n\nAfter the API call, the user will receive an email to the new email address with a link like https://manage.mist.com/verify/update?expire=:exp_time&email=:admin_email&token=:token\n\nUpon clicking the link, the user is provided with a login page to authenticate using existing credentials. After successful login, the email address of the user gets updated\n\nNote: The request parameter email can be used by UI to validate that the current session (if any) belongs to the admin or provide a login page (by pre-populating the email on login screen). UI can also use the request parameter expire to validate token expiry.", "operationId": "updateSelfEmail", "tags": ["Self"]}}, "paths": {"verify": {"paths": {"{token}": {"specs": {"get": {"description": "Verify Email change", "operationId": "verifySelfEmail", "tags": ["Self"]}, "parameters": [{"$ref": "#/components/parameters/token"}]}}}}}}}}, "sites": {"paths": {"{site_id}": {"specs": {"delete": {"description": "Delete Site", "operationId": "deleteSite", "tags": ["Sites"]}, "get": {"description": "Get Site Info", "operationId": "getSiteInfo", "tags": ["Sites"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "put": {"description": "Update Site Info", "operationId": "updateSiteInfo", "tags": ["Sites"]}}, "paths": {"alarms": {"paths": {"ack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Ack multiple Site Alarms", "operationId": "multiAckSiteAlarms", "tags": ["Sites Alarms"]}}}, "ack_all": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Ack all Site Alarms\n\n**N.B.**: Batch size for multiple alarm ack and unack has to be less or or equal to 1000.", "operationId": "ackSiteAllAlarms", "tags": ["Sites Alarms"]}}}, "count": {"specs": {"get": {"description": "Count Site Alarms", "operationId": "countSiteAlarms", "parameters": [{"description": "Group by and count the alarms by some distinct field", "in": "query", "name": "distinct", "schema": {"default": "type", "enum": ["type", "acked", "severity", "group"], "type": "string"}}, {"description": "Name of the admins who have acked the alarms; accepts multiple values separated by comma", "in": "query", "name": "ack_admin_name", "schema": {"type": "string"}}, {"in": "query", "name": "acked", "schema": {"type": "boolean"}}, {"description": "Key-name of the alarms; accepts multiple values separated by comma", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "Alarm severity; accepts multiple values separated by comma", "in": "query", "name": "severity", "schema": {"type": "string"}}, {"description": "Alarm group name; accepts multiple values separated by comma", "in": "query", "name": "group", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Alarms"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Site Alarms", "operationId": "getSiteAlarms", "parameters": [{"description": "Key-name of the alarms; accepts multiple values separated by comma", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "Name of the admins who have acked the alarms; accepts multiple values separated by comma", "in": "query", "name": "ack_admin_name", "schema": {"type": "string"}}, {"in": "query", "name": "acked", "schema": {"type": "boolean"}}, {"description": "Alarm severity; accepts multiple values separated by comma", "in": "query", "name": "severity", "schema": {"type": "string"}}, {"description": "Alarm group name; accepts multiple values separated by comma", "in": "query", "name": "group", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Alarms"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "unack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Unack multiple Site Alarms", "operationId": "multiUnackSiteAlarms", "tags": ["Sites Alarms"]}}}, "unack_all": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Unack all Site Alarms\n\n**N.B.**: Batch size for multiple alarm ack and unack has to be less or or equal to 1000.", "operationId": "unackSiteAllArlarms", "tags": ["Sites Alarms"]}}}, "{alarm_id}": {"paths": {"ack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/alarm_id"}], "post": {"description": "Ack Site Alarm", "operationId": "ackSiteAlarm", "tags": ["Sites Alarms"]}}}, "unack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/alarm_id"}], "post": {"description": "Unack Site Alarm", "operationId": "unackSiteAlarm", "tags": ["Sites Alarms"]}}}}}}}, "anomaly": {"paths": {"client": {"paths": {"{client_mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get Client Anomaly Events", "operationId": "getSiteAnomalyEventsForClient", "tags": ["Sites Anomaly"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}, {"$ref": "#/components/parameters/metric"}]}}}}}}, "device": {"paths": {"{device_mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get Device Anomaly Events", "operationId": "getSiteAnomalyEventsforDevice", "tags": ["Sites Anomaly"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/metric"}, {"$ref": "#/components/parameters/device_mac"}]}}}}}}, "{metric}": {"specs": {"get": {"description": "Get Site Anomaly Events", "operationId": "getSiteAnomalyEvents", "tags": ["Sites Anomaly"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/metric"}]}}}}, "apps": {"specs": {"get": {"description": "Get Application List", "operationId": "getSiteApps", "tags": ["Sites Applications"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "assetfilters": {"specs": {"get": {"description": "Get Site Asset Filters", "operationId": "getSiteAssetFilters", "tags": ["Sites Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Asset Filter", "operationId": "createSiteAssetFilters", "tags": ["Sites Asset Filters"]}}, "paths": {"{assetfilter_id}": {"specs": {"delete": {"description": "Deletes an existing BLE asset filter for the given site.", "operationId": "deleteSiteAssetFilter", "tags": ["Sites Asset Filters"]}, "get": {"description": "Get Site Asset Filter Details", "operationId": "getSiteAssetFilter", "tags": ["Sites Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/assetfilter_id"}], "put": {"description": "Updates an existing BLE asset filter for the given site.", "operationId": "updateSiteAssetFilter", "tags": ["Sites Asset Filters"]}}}}}, "assets": {"specs": {"get": {"description": "Get Site Assets", "operationId": "getSiteAssets", "tags": ["Sites Assets"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Asset", "operationId": "createSiteAsset", "tags": ["Sites Assets"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Impert Site Assets. \n\nIt can be done via a CSV file or a JSON payload.\n\n## CSV File Format\n```\nname,mac\n\"asset_name\",5c5b53010101\n``` ", "operationId": "importSiteAssets", "parameters": [{"description": "API will replace the assets with same mac if provided `upsert`==`True`, otherwise will report in errors in response.", "in": "query", "name": "upsert", "schema": {"default": "False", "enum": ["True", "False"], "type": "string"}}], "tags": ["Sites Assets"]}}}, "{asset_id}": {"specs": {"delete": {"description": "Delete Site Asset", "operationId": "deleteSiteAsset", "tags": ["Sites Assets"]}, "get": {"description": "Get Site Asset Details", "operationId": "getSiteAsset", "tags": ["Sites Assets"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/asset_id"}], "put": {"description": "Update Site Asset", "operationId": "updateSiteAsset", "tags": ["Sites Assets"]}}}}}, "beacons": {"specs": {"get": {"description": "Get Site Beacons", "operationId": "getSiteBeacons", "tags": ["Sites Beacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Beacon", "operationId": "createSiteBeacon", "tags": ["Sites Beacons"]}}, "paths": {"{beacon_id}": {"specs": {"delete": {"description": "Delete Site Beacon", "operationId": "deleteSiteBeacons", "tags": ["Sites Beacons"]}, "get": {"description": "Get Site Beacon Details", "operationId": "getSiteBeacon", "tags": ["Sites Beacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/beacon_id"}], "put": {"description": "Update Site Beacon", "operationId": "updateSiteBeacons", "tags": ["Sites Beacons"]}}}}}, "clients": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Clients", "operationId": "countSiteByDistinctAttributesOfClients", "parameters": [{"example": "hostname", "in": "query", "name": "distinct", "required": true, "schema": {"default": "device", "enum": ["ssid", "ap", "ip", "vlan", "hostname", "os", "model", "device"], "type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"in": "query", "name": "ip", "schema": {"type": "string"}}, {"in": "query", "name": "vlan", "schema": {"type": "string"}}, {"in": "query", "name": "hostname", "schema": {"type": "string"}}, {"in": "query", "name": "os", "schema": {"type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "device", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "disconnect": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "To unauthorize multiple clients", "operationId": "disconnectSiteMultipleClients", "tags": ["Sites Clients"]}}}, "events": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Client-Events", "operationId": "countSiteByDistinctAttributesOfClientsEvents", "parameters": [{"description": "type / proto / band / channel / wlan_id / ssid", "example": "type", "in": "query", "name": "distinct", "schema": {"enum": ["type", "proto", "band", "channel", "wlan_id", "ssid"], "type": "string"}}, {"description": "event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "for assoc/disassoc events", "in": "query", "name": "reason_code", "schema": {"type": "integer"}}, {"description": "SSID Name", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "802.11 standard", "in": "query", "name": "proto", "schema": {"enum": ["b", "g", "n", "ac", "ax", "a"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Get Site Clients Events", "operationId": "searchSiteClientEvents", "parameters": [{"description": "event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "for assoc/disassoc events", "in": "query", "name": "reason_code", "schema": {"type": "integer"}}, {"description": "SSID Name", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "802.11 standard", "in": "query", "name": "proto", "schema": {"enum": ["b", "g", "n", "ac", "ax", "a"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "search": {"specs": {"get": {"description": "Search Wireless Clients\n\nNOTE: fuzzy logic can be used with \u2018*\u2019, supported filters: mac, hostname, device, os, model. E.g. /clients/search?device=Mac*&hostname=jerry", "operationId": "searchSiteClients", "parameters": [{"description": "partial / full MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type, e.g. Mac, Nvidia, iPhone", "in": "query", "name": "device", "schema": {"type": "string"}}, {"description": "os, e.g. Sierra, Yosemite, Windows 10", "in": "query", "name": "os", "schema": {"type": "string"}}, {"description": "model, e.g. \u201cMBP 15 late 2013\u201d, 6, 6s, \u201c8+ GSM\u201d", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac where the client has connected to", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "full MAC address, hostname, username or ip", "in": "query", "name": "text", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "sessions": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Client Sessions", "operationId": "countSiteByDistinctAttributesOfClientSessions", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["ssid", "wlan_id", "ap", "mac", "client_family", "client_manufacture", "client_model", "client_os"], "type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "24 /5", "in": "query", "name": "band", "schema": {"type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Client Sessions", "operationId": "searchSiteClientSessions", "parameters": [{"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "24 /5", "in": "query", "name": "band", "schema": {"type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "unauthorize": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This unauthorize clients (if they are guest) and disconnect them. From the guest\u2019s perspective, they will see the splash page again and go through the flow (e.g. Terms of Use) again.", "operationId": "unauthorizeSiteMultipleClients", "tags": ["Sites Clients"]}}}, "{client_mac}": {"paths": {"disconnect": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}], "post": {"description": "This disconnect a client (and it\u2019s likely to connect back)", "operationId": "disconnectSiteClient", "tags": ["Sites Clients"]}}}, "events": {"specs": {"get": {"description": "Get the list of events for a specific client", "operationId": "getSiteEventsForClient", "parameters": [{"description": "e.g. MARVIS_EVENT_CLIENT_DHCP_STUCK", "in": "query", "name": "type", "schema": {"enum": ["b", "g", "n"], "type": "string"}}, {"description": "a / b / g / n / ac / ax", "in": "query", "name": "proto", "schema": {"enum": ["a", "b", "g", "n", "ac", "ax"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"type": "string"}}, {"in": "query", "name": "channel", "schema": {"type": "string"}}, {"in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}]}}, "unauthorize": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}], "post": {"description": "This unauthorize a client (if it\u2019s a guest) and disconnect it. From the guest\u2019s perspective, s/he will see the splash page again and go through the flow (e.g. Terms of Use) again.", "operationId": "unauthorizeSiteClient", "tags": ["Sites Clients"]}}}}}}}, "devices": {"specs": {"get": {"description": "Get list of devices on the site.", "operationId": "getSiteDevices", "parameters": [{"description": "device type", "in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateway"], "type": "string"}}, {"$ref": "#/components/parameters/name"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create a device", "operationId": "createSiteDevice", "tags": ["Sites Devices"]}}, "paths": {"ap_channels": {"specs": {"get": {"description": "Get a list of allowed channels (per channel width)", "operationId": "getSiteDeviceRadioChannels", "parameters": [{"description": "country code for the site (for AP config generation), in two-character", "example": "US", "in": "query", "name": "country_code", "schema": {"type": "string"}}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "config_history": {"paths": {"count": {"specs": {"get": {"description": "Counts the number of entries in device config history for distinct field with given filters", "operationId": "countSiteDeviceConfigHistory", "parameters": [{"in": "query", "name": "distinct", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search for entries in device config history", "operationId": "searchSiteDeviceConfigHistory", "parameters": [{"description": "AP Mac Address", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "count": {"specs": {"get": {"description": "Counts the number of entries in ap events history for distinct field with given filters", "operationId": "countSiteDevices", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "model", "enum": ["model", "version", "map_id", "hostname", "mxtunnel_status", "mxedge_id", "lldp_system_name", "lldp_system_desc", "lldp_port_id", "lldp_mgmt_addr"], "type": "string"}}, {"in": "query", "name": "hostname", "schema": {"type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "mac", "schema": {"type": "string"}}, {"in": "query", "name": "version", "schema": {"type": "string"}}, {"in": "query", "name": "mxtunnel_status", "schema": {"type": "string"}}, {"in": "query", "name": "mxedge_id", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"in": "query", "name": "map_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "events": {"paths": {"count": {"specs": {"get": {"description": "Counts the number of entries in ap events history for distinct field with given filters", "operationId": "countSiteDeviceEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "model", "enum": ["model", "type", "type_code", "mac"], "type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"type": "string"}}, {"in": "query", "name": "type_code", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search AP Events", "operationId": "searchSiteDeviceEvents", "parameters": [{"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"type": "string"}}, {"in": "query", "name": "type_code", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "export": {"specs": {"get": {"description": "To download the exported device information\n\nResponse:\nmac,name,map_id,x,y,height,orientation,labels,type\n5c5b53010101,\"AP 1\",845a23bf-bed9-e43c-4c86-6fa474be7ae5,30,10,2.3,45,\"guest, campus, vip\",\"ap\"", "operationId": "exportSiteDeviceInformation", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "last_config": {"paths": {"count": {"specs": {"get": {"description": "Counts the number of entries in device config history for distinct field with given filters", "operationId": "countSiteDeviceLastConfig", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "ap", "enum": ["ap", "version", "name", "site_id"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Device Last Configs", "operationId": "searchSiteDeviceLastConfigs", "parameters": [{"in": "query", "name": "ap", "schema": {"type": "string"}}, {"in": "query", "name": "version", "schema": {"type": "string"}}, {"in": "query", "name": "name", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "reprovision": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "To force all APs to reprovision itself again. ", "operationId": "reprovisionSiteAllAps", "tags": ["Sites Devices"]}}}, "reset_radio_config": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Reset all APs in the Site to use RRM", "operationId": "resetSiteAllApsToUseRrm", "tags": ["Sites Devices"]}}}, "restart": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Note that only the devices that are connected will be restarted.", "operationId": "multiRestartSiteDevices", "tags": ["Sites Devices"]}}}, "search": {"specs": {"get": {"description": "Search Device", "operationId": "searchSiteDevices", "parameters": [{"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type", "in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateway"], "type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "device MAC", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "version", "in": "query", "name": "version", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"description": "MxTunnel status, up / down", "in": "query", "name": "mxtunnel_status", "schema": {"enum": ["up", "down"], "type": "string"}}, {"description": "Mist Edge id, if AP is connecting to a Mist Edge", "in": "query", "name": "mxedge_id", "schema": {"format": "uuid", "type": "string"}}, {"description": "LLDP system name", "in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"description": "LLDP system description", "in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"description": "LLDP port id", "in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"description": "LLDP management ip address", "in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"description": "sort options", "in": "query", "name": "sort", "schema": {"default": "timestamp", "enum": ["timestamp", "mac", "model", "sku"], "type": "string"}}, {"description": "sort options in reverse order", "in": "query", "name": "desc-sort", "schema": {"enum": ["timestamp", "mac", "model", "sku"], "type": "string"}}, {"description": "whether to return device stats", "in": "query", "name": "stats", "schema": {"default": false, "type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "upgrade": {"specs": {"get": {"description": "Get all upgrades for site", "operationId": "getSiteDevicesUpgrade", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Upgrade Multiple Device\nNote that this call doesn\u2019t guarantee the devices to be upgraded right away (they may be offline)", "operationId": "multiUpgradeSiteDevices", "tags": ["Sites Devices"]}}, "paths": {"cancel": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Best effort to cancel an upgrade. Devices which are already upgraded wont be touched", "operationId": "cancelSiteDeviceUpgrade", "tags": ["Sites Devices"]}}}}}, "versions": {"specs": {"get": {"description": "Get Available Device Versions", "operationId": "getSiteAvailableDeviceVersions", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "zerioze": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Zeroize all FIPS APs in the Site", "operationId": "zeroizeSiteFipsAllAps", "tags": ["Sites Devices"]}}}, "{device_id}": {"specs": {"delete": {"description": "Delete Site Device", "operationId": "deleteSiteDevice", "tags": ["Sites Devices"]}, "get": {"description": "Get Device Configuration", "operationId": "getSiteDevice", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "put": {"description": "Update Device Configuration", "operationId": "updateSiteDevice", "tags": ["Sites Devices"]}}, "paths": {"arp": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "ARP can be performed on the Device. The output will be available through websocket. As there can be multiple command issued against the same AP at the same time and the output all goes through the same websocket stream, session is introduced for demux.", "operationId": "arpFromDevice", "tags": ["Sites Devices Utilities"]}}}, "bounce_port": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Port Bounce can be performed from the Switch.", "operationId": "portsBounceFromSwitch", "tags": ["Sites Devices Utilities"]}}}, "cable_test": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "TDR can be performed from the Switch. The output will be available through websocket. As there can be multiple command issued against the same Switch at the same time and the output all goes through the same websocket stream, session is introduced for demux.", "operationId": "cableTestFromSwitch", "tags": ["Sites Devices Utilities"]}}}, "clear_bpdu_error": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Clear bridge protocol data unit (BPDU) error condition caused by the detection of a possible bridging loop from Spanning Tree Protocol (STP) operation that renders the port unoperational.", "operationId": "clearBpduErrosFromPortsOnSwitch", "tags": ["Sites Devices Utilities"]}}}, "clear_macs": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Clear all learned MAC addresses, including persistent MAC addresses, on a port.", "operationId": "clearAllLearnedMacsFromPortOnSwitch", "tags": ["Sites Devices Utilities"]}}}, "config_cmd": {"specs": {"get": {"description": "Get Config CLI Commands\nFor a brown-field switch deployment where we adopted the switch through Adoption Command, we do not wipe out / overwrite the existing config automatically. Instead, we generate CLI commands that we would have generated. The user can inspect, modify, and incorporate this into their existing config manually.\n\nOnce they feel comfortable about the config we generate, they can enable allow_mist_config where we will take full control of their config like a claimed switch", "operationId": "getSiteDeviceConfigCmd", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}]}}, "iot": {"specs": {"get": {"description": "Returns the current state of each enabled IoT pin configured as an output.", "operationId": "getSiteDeviceIotPort", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "put": {"description": "Note: For each IoT pin referenced\u2026\n * The pin must be enabled using the Device \u2018iot_config\u2019 API\n * The pin must support the output direction", "operationId": "setSiteDeviceIotPort", "tags": ["Sites Devices"]}}}, "local_port_config": {"specs": {"delete": {"description": "Delete the local port config on a switch", "operationId": "deleteSiteSwitchLocalPortConfig", "tags": ["Sites Devices"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "device_id", "required": true, "schema": {"type": "string"}}], "put": {"description": "### How does it show up in Device Config\n\n`local_port_config` will show up separately from the `port_config` so it can be easily identified (and cleared)\n\n`````\n{\n \"local_port_config\": {\n \"ge-0/0/5-7\": { ... }\n }\n}\n`````", "operationId": "updateSiteSwitchLocalPortConfig", "tags": ["Sites Devices"]}}}, "locate": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Locate a Device by blinking it\u2019s LED, it\u2019s a persisted state that has to be stopped by calling Stop Locating API", "operationId": "startSiteLocateDevice", "tags": ["Sites Devices"]}}}, "ping": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Ping can be performed from the Device. The output will be available through websocket. As there can be multiple command issued against the same AP at the same time and the output all goes through the same websocket stream, session is introduced for demux.\n\n#### subscribe to Device Command outputs\n```\n{\n \"subscribe\": \"/sites/{site_id}/devices/{device_id}/cmd\"\n}\n```\n##### The Actual Output Data\n```\n{\n \"event\": \"data\",\n \"channel\": \"/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd\",\n \"data\": {\n \"session\": \"session_id\",\n \"raw\": \"64 bytes from 23.211.0.110: seq=8 ttl=58 time=12.323 ms\\n\"\n }\n}\n```", "operationId": "pingFromDevice", "tags": ["Sites Devices Utilities"]}}}, "poll_stats": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "This API can be used to poll statistics from the Switch proactively once. After it is called, the statistics will be pushed back to the cloud within the statistics interval.", "operationId": "pollSiteSwitchStats", "tags": ["Sites Devices"]}}}, "restart": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Restart / Reboot a device", "operationId": "restartSiteDevice", "tags": ["Sites Devices"]}}}, "support": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Support / Upload device support files\n\n#### Info Param\n**Parameter**|**Type**|**Description** \n :-------------: |:-------------: |:-------------: \nprocess|string|Upload 1 file with output of show system processes extensive\noutbound-ssh|string|Upload 1 file that concatenates all /var/log/outbound-ssh.log* files\nmessages|string|Upload 1 to 10 /var/log/messages* files\ncore-dumps|string|Upload all core dump files, if any\nfull|string|Upload 1 file with output of request support information, 1 file that concatenates all /var/log/outbound-ssh.log files, all core dump files, and the 3 most recent /var/log/messages files", "operationId": "uploadSiteDeviceSupportFile", "tags": ["Sites Devices"]}}}, "traceroute": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Traceroute can be performed from the Device. The output will be available through websocket. As there can be multiple command issued against the same AP at the same time and the output all goes through the same websocket stream, session is introduced for demux.", "operationId": "tracerouteFromDevice", "tags": ["Sites Devices Utilities"]}}}, "unlocate": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Stop Locate a Device", "operationId": "stopSiteLocateDevice", "tags": ["Sites Devices"]}}}, "upgrade": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Device Upgrade", "operationId": "upgradeSiteDevice", "tags": ["Sites Devices"]}}}, "vc": {"specs": {"delete": {"description": "When all the member switches of VC are removed and only member ID 0 is left, the cloud would detect this situation and automatically changes the single switch to non-VC role.\n\nFor some unexpected cases that the VC is gone and disconncted, the API below could be used to change the state of VC\u2019s switches to be standalone. After it is executed, all the switches will be shown as standalone switches under Inventory.\n", "operationId": "deleteSiteVirtualChassis", "tags": ["Sites Devices Virtual Chassis"]}, "get": {"description": "Get VC Status\nThe API returns a combined view of the VC status which includes topology and stats_", "operationId": "getSiteVirtualChassis", "tags": ["Sites Devices Virtual Chassis"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "For models (e.g. EX3400 and up) having dedicated VC ports, it is easier to form a VC by just connecting cables with the dedicated VC ports. Cloud will detect the new VC and update the inventory.\n\nIn case that the user would like to choose the dedicated switch as a VC master. Or for EX2300-C-12P and EX2300-C-12T which doesn\u2019t have dedicated VC ports, below are procedures to automate the VC creation:\n\n1. Power on the switch that is choosen as the VC master first. And the powering on the other member switches.\n2. Claim or adopt all these switches under the same organization\u2019s Inventory\n3. Assign these switches into the same Site\n4. Invoke vc command on the switch choosen to be the VC master. For EX2300-C-12P, VC ports will be created automatically.\n5. Connect the cables to the VC ports for these switches\n6. Wait for the VC to be formed. The Org\u2019s inventory will be updated for the new VC.", "operationId": "createSiteVirtualChassis", "tags": ["Sites Devices Virtual Chassis"]}, "put": {"description": "## Add new members\nFor models (e.g. EX4300 and up) having dedicated VC ports, it is easier to add new member switches into a VC by just connecting cables with the dedicated VC ports. Cloud will detect the new members and update the inventory.\n\nFor EX2300 VC, adding new members requires to follow the procedures below:\n1. Powering on the new member switches and ensuring cables are not connected to any VC ports.\n2. Claim or adopt all new member switches under the VC\u2019s organization Inventory\n3. Assign all new member switches to the same Site as the VC\n4. Invoke vc command to add switches to the VC.\n5. Connect the cables to the VC ports for these switches\n6. After a while, the Org\u2019s Inventory shows this new switches has been added into the VC.\n\n## Removing member switch\nTo remove a member switch from the VC, following the procedures below:\n\n1. Ensuring the VC is connected to the cloud first\n2. Unplug the cable from the VC port of the switch\n3. Waiting for the VC state (vc_state) of this switch is changed to not-present\n4. Invoke update_vc with remove to remove this switch from the VC\n5. The Org\u2019s Inventory shows the switch is removed.\n\nPlease notice that member ID 0 (fpc0) cannot be removed. When a VC has two switches left, unpluging the cable may result in the situation that fpc0 becomes a line card (LC). When this situation is happened, please re-plug in the cable, wait for both switches becoming present (show virtual-chassis) and then removing the cable again.\n\n## Renumber a member switch\nWhen a member switch doesn\u2019t work properly and needed to be replaced, the renumber API could be used. The following two types of renumber are supported:\n\n1. Replace a non-fpc0 member switch\n2. Replace fpc0. When fpc0 is relaced, PAPI device config and JUNOS config will be both updated.\n\nFor renumber to work, the following procedures are needed: \n1. Ensuring the VC is connected to the cloud and the state of the member switch to be replaced must be non present. \n2. Adding the new member switch to the VC \n3. Waiting for the VC state (vc_state) of this VC to be updated to API server \n4. Invoke vc with renumber to replace the new member switch from fpc X to", "operationId": "removeSiteVirtualChassisMember", "tags": ["Sites Devices Virtual Chassis"]}}, "paths": {"vc_port": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Set VC port", "operationId": "setSiteVcPort", "tags": ["Sites Devices Virtual Chassis"]}}}}}, "{image_name}": {"specs": {"delete": {"description": "Delete image from a device", "operationId": "deleteSiteDeviceImage", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}, {"$ref": "#/components/parameters/image_name"}], "post": {"description": "Attach up to 3 images to a device", "operationId": "addSiteDeviceImage", "tags": ["Sites Devices"]}}}}}}}, "events": {"paths": {"fast_roam": {"specs": {"get": {"description": "Roaming Events data", "operationId": "getSiteRoamingEvents", "parameters": [{"description": "event type", "in": "query", "name": "type", "schema": {"enum": ["success", "fail", "none"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "interference": {"specs": {"get": {"description": "Get Interference Events", "operationId": "getSiteInterferenceEvents", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "system": {"paths": {"count": {"specs": {"get": {"description": "Count System Events", "operationId": "countSiteSystemEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "type", "enum": ["type"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search System Events", "operationId": "searchSiteSystemEvents", "parameters": [{"in": "query", "name": "type", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}}}, "evpn_topologies": {"specs": {"get": {"description": "Get the existing EVPN topology", "operationId": "getSiteEvpnTopologies", "tags": ["Sites Devices EVPN"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"type": "string"}}], "post": {"description": "While all the `evpn_id` / `downlink_ips` can be specifidd by hand, the easiest way is to call the `build_vpn_topology` API, allowing you to examine the diff, and update it yourself. You can also simply call it with `overwrite=true` which will apply the updates for you.\n\n*Notes:*\n1. You can use `core` / `distribution` / `access` to create a CLOS topology (or `super-spine` / `spine` / `leaf`)\n2. You can also use `core` / `distribution` to form a 2-tier EVPN topology where ESI-Lag is configured distribution to connect to access switches\n3. In a small/medium campus, `collapsed-core` can be used where core switches are the inter-connected to do EVPN\n4. The API uses a few pre-defined parameters and best-practices to generate the configs. It can be customized by using `evpn_options` in Site Setting / Network Template. (e.g. a different subnet for the underlay)\n\n## Collapsed Core\nIn a small-medium campus, EVPN can also be enabled only at the core switches (up to 4) by assigning all participating switches with `collapsed-core role`. When there are more than 2 switches, a ring-like topology will be formed.\n\n## ESI-Lag\nIf the access switchess does not have EVPN support, you can still take advantage of EVPN by setting up ESI-Lag on distribution switches\n\n## Leaf / Access / Collapsed-Core\nFor leaf nodes in a EVPN topology, you\u2019d have to configure the IPs for networks that would participate in EVPN. Optionally, VRFs to isolate traffic from one tenant verus another", "operationId": "createSiteEvpnTopology", "tags": ["Sites Devices EVPN"]}}, "paths": {"{evpn_topology_id}": {"specs": {"delete": {"description": "Delete the site EVPN Topology", "operationId": "deleteSiteEvpnTopology", "tags": ["Sites Devices EVPN"]}, "get": {"description": "Get One EVPN Topology Detail", "operationId": "getSiteEvpnTolopogy", "tags": ["Sites Devices EVPN"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/evpn_topology_id"}], "put": {"description": "Update the EVPN Topolgy", "operationId": "updateSiteEvpnTopology", "tags": ["Sites Devices EVPN"]}}}}}, "guests": {"specs": {"get": {"description": "Get Guest Authorizations", "operationId": "getSiteAllGuestAuthorizations", "parameters": [{"description": "UUID of single or multiple (Comma separated) WLAN under Site `site_id` (to filter by WLAN)", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}], "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"count": {"specs": {"get": {"description": "Count Authorized Guest", "operationId": "countSiteGuestAuthorizations", "parameters": [{"example": "auth_method", "in": "query", "name": "distinct", "schema": {"default": "auth_method", "enum": ["auth_method", "ssid", "company"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Authorized Guest", "operationId": "searchSiteGuestAuthorization", "parameters": [{"example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"in": "query", "name": "auth_method", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{guest_mac}": {"specs": {"delete": {"description": "Delete Guest Authorization", "operationId": "deleteSiteGuestAuthorization", "tags": ["Sites Guests"]}, "get": {"description": "Get Guest Authorization", "operationId": "getSiteGuestAuthorization", "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/guest_mac"}], "put": {"description": "Update Guest Authorization ", "operationId": "updateSiteGuestAuthorization", "tags": ["Sites Guests"]}}}}}, "insights": {"paths": {"client": {"paths": {"{client_mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get Client Insight Metrics\nSee metrics possibilities at /api/v1/const/insight_metrics", "operationId": "getSiteInsightMetricsForClient", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}, {"$ref": "#/components/parameters/metric"}]}}}}}}, "device": {"paths": {"{mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get AP Insight Metrics\nSee metrics possibilities at /api/v1/const/insight_metrics", "operationId": "getSiteInsightMetricsForDevice", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, {"in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "mac", "required": true, "schema": {"type": "string"}}]}}}}}}, "rogues": {"specs": {"get": {"description": "Get Site Rogue/Neighbor APs", "operationId": "getSiteRogueAPs", "parameters": [{"$ref": "#/components/parameters/rogue_type"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"clients": {"specs": {"get": {"description": "Get Rogue Clients", "operationId": "getSiteRogueClients", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "{metric}": {"specs": {"get": {"description": "Get Site Insight Metrics\nSee metrics possibilities at /api/v1/const/insight_metrics", "operationId": "getSiteInsightMetrics", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/metric"}]}}}}, "licenses": {"paths": {"usages": {"specs": {"get": {"description": "This shows license usage (i.e. needed) based on the features enabled for the site.", "operationId": "getSiteLicenseUsage", "tags": ["Sites Licenses"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "location": {"paths": {"coverage": {"specs": {"get": {"description": "Get Beam Coverage Overview", "operationId": "getSiteBeamCoverageOverview", "parameters": [{"description": "map_id (filter by map_id)", "example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "map_id", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"default": "sdkclient", "enum": ["sdkclient", "client", "asset"], "type": "string"}}, {"description": "where the start time will be calculated (with end time is now)", "in": "query", "name": "duration", "schema": {"default": "1h", "enum": ["1d", "5h", "1h", "30m"], "type": "string"}}, {"$ref": "#/components/parameters/resolution"}, {"description": "client_type (as filter. optional)", "in": "query", "name": "client_type", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}], "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "ml": {"paths": {"current": {"specs": {"get": {"description": "Get Machine Learning Current Stat\nFor each VBLE AP, it has ML model parameters (e.g. Path-loss-estimate, Intercept) as well as completion indicators (Level and PercentageComplete). For the completeness, ML takes N sample to finish its first level and use N*0.25 samples to complete each successive level. When a device is moved, the completeness will be reset as it has to re-learn.", "operationId": "getSiteMachineLearningCurrentStat", "parameters": [{"description": "map_id (as filter, optional)", "example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "map_id", "schema": {"type": "string"}}], "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "defaults": {"specs": {"get": {"description": "Get Default PLF for Models", "operationId": "getSiteDefaultPlfForModels", "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "device": {"paths": {"{device_id}": {"specs": {"delete": {"description": "Clear ML Overwrite for Device", "operationId": "clearSiteMlOverwriteForDevice", "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "put": {"description": "Overwrite ML For Device", "operationId": "overwriteSiteMlForDevice", "tags": ["Sites Location"]}}}}}, "map": {"paths": {"{map_id}": {"specs": {"delete": {"description": "Clear ML Overwrite for Map", "operationId": "clearSiteMlOverwriteForMap", "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "put": {"description": "Overwrite ML For Map", "operationId": "overwriteSiteMlForMap", "tags": ["Sites Location"]}}}}}, "reset": {"paths": {"map": {"paths": {"{map_id}": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Reset ML Stats by Map", "operationId": "resetSiteMlStatsByMap", "tags": ["Sites Location"]}}}}}}}, "updates": {"specs": {"get": {"description": "Get Machine Learning Events", "operationId": "getSiteMachineLearningEvents", "parameters": [{"description": "device_id (as filter, optional)", "example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "device_id", "schema": {"type": "string"}}, {"description": "map_id (as filter, optional)", "in": "query", "name": "map_ip", "schema": {"type": "string"}}, {"description": "client_type (as filter, optional)", "in": "query", "name": "client_type", "schema": {"type": "string"}}, {"description": "instead of start, you can use 1d, 30m, 5h, where the start will be calculated", "in": "query", "name": "duration", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"in": "query", "name": "interval", "schema": {"type": "string"}}], "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}}}, "maps": {"specs": {"get": {"description": "Get Site Maps", "operationId": "getSiteMaps", "tags": ["Sites Maps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Map", "operationId": "createSiteMap", "tags": ["Sites Maps"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign matching inventory to specific site, place ap if name or mac matches\n\n# CSV File Format\n```\nVendor AP name,Mist AP Mac\nUS Office AP-2 - 5c:5b:35:00:00:02,5c5b35000002\n``` ", "operationId": "importSiteMaps", "tags": ["Sites Maps"]}}}, "{map_id}": {"specs": {"delete": {"description": "Delete Site Map", "operationId": "deleteSiteMap", "tags": ["Sites Maps"]}, "get": {"description": "Get Site Map Details", "operationId": "getSiteMap", "tags": ["Sites Maps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "put": {"description": "Update Site Map", "operationId": "updateSiteMap", "tags": ["Sites Maps"]}}, "paths": {"image": {"specs": {"delete": {"description": "Delete Site Map Image", "operationId": "deleteSiteMapImage", "tags": ["Sites Maps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Add image map is a multipart POST which has an file (Image) and an optional json parameter", "operationId": "addSiteMapImage", "tags": ["Sites Maps"]}}}, "replace": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Replace Map Image\n\n\nThis works like an PUT where the image will be replaced. If transform is provided, all the locations of the objects on the map (AP, Zone, Vbeacon, Beacon) will be transformed as well (relative to the new Map)", "operationId": "replaceSiteMapImage", "tags": ["Sites Maps"]}}}, "wayfinding": {"paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "This imports the vendor map meta data into the Map JSON. This is required by the SDK and App in order to access/render the vendor Map properly.", "operationId": "importSiteWayfinding", "tags": ["Sites Maps"]}}}}}}}}}, "mxtunnels": {"paths": {"{mxtunnel_id}": {"paths": {"preempt_aps": {"specs": {"parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "mxtunnel_id", "required": true, "schema": {"type": "string"}}], "post": {"description": "To preempt AP\u2019s which are not connected to preferred peer to the preferred peer", "operationId": "preemptSitesMxTunnel", "tags": ["Sites MxTunnels"]}}}}}}}, "pcaps": {"specs": {"get": {"description": "Get a list of captures", "operationId": "getSitePacketCaptures", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"description": "optional client mac filter", "in": "query", "name": "client_mac", "schema": {"type": "string"}}], "tags": ["Sites Pcaps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"capture": {"specs": {"delete": {"description": "Stop current capture", "operationId": "stopSitePacketCapture", "tags": ["Sites Pcaps"]}, "get": {"description": "Get Capturing status", "operationId": "getSiteCapturingStatus", "tags": ["Sites Pcaps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Initiate a Packet Capture", "operationId": "startSiteRadiotapPacketCapture", "tags": ["Sites Pcaps"]}}}}}, "psks": {"specs": {"get": {"description": "Get Site PSKs", "operationId": "getSitePsks", "parameters": [{"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"in": "query", "name": "role", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/name"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Sites Psks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site PSK", "operationId": "createSitePsk", "tags": ["Sites Psks"]}, "put": {"description": "Update multi PSKs", "operationId": "updateSitePsks", "tags": ["Sites Psks"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Import PSK from CSV file or JSON\n\n## CSV File Format\n```\nPSK Import CSV File Format:\nname,ssid,passphrase,usage,vlan_id,mac\nCommon,warehouse,foryoureyesonly,single,35,a31425f31278\nJustin,reception,visible,multi,1002\n```", "operationId": "importSitePsk", "tags": ["Sites Psks"]}}}, "{psk_id}": {"specs": {"delete": {"description": "Delete Site PSK", "operationId": "deleteSitePsk", "tags": ["Sites Psks"]}, "get": {"description": "Get Site PSK Details", "operationId": "getSitePsk", "tags": ["Sites Psks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/psk_id"}], "put": {"description": "Update Site PSK", "operationId": "updateSitePsk", "tags": ["Sites Psks"]}}}}}, "rfdiags": {"specs": {"get": {"description": "List RF Glass Recording", "operationId": "getSiteSiteRfdiagRecording", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Rfdiags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Start RF Glass Recording", "operationId": "startSiteRecording", "tags": ["Sites Rfdiags"]}}, "paths": {"{rfdiag_id}": {"specs": {"delete": {"description": "Delete Recording", "operationId": "deleteSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}, "get": {"description": "Get RF Diage Recording Details", "operationId": "getSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rfdiag_id"}], "put": {"description": "Update Recording", "operationId": "updateSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}}, "paths": {"download": {"specs": {"get": {"description": "Download Recording\nDownload raw_events blob", "operationId": "downloadSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rfdiag_id"}]}}, "stop": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rfdiag_id"}], "post": {"description": "If the recording session is active for the given rfdiag_id, it will finish the recording. duration and end_time will be updated to reflect the correct values.", "operationId": "stopSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}}}}}}}, "rogues": {"paths": {"events": {"paths": {"count": {"specs": {"get": {"description": "Count Rogue Events", "operationId": "countSiteRogueEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "bssid", "enum": ["bssid", "ssid", "ap", "type"], "type": "string"}}, {"$ref": "#/components/parameters/rogue_type"}, {"description": "ssid of the network detected as threat", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "bssid of the network detected as threat", "in": "query", "name": "bssid", "schema": {"type": "string"}}, {"description": "mac of the device that had strongest signal strength for ssid/bssid pair", "in": "query", "name": "ap_mac", "schema": {"type": "string"}}, {"description": "channel over which ap_mac heard ssid/bssid pair", "in": "query", "name": "channel", "schema": {"type": "string"}}, {"description": "whether the reporting AP see a wireless client (on LAN) connecting to it ", "in": "query", "name": "seen_on_lan", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Rogues"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Rogue Events", "operationId": "searchSiteRogueEvents", "parameters": [{"$ref": "#/components/parameters/rogue_type"}, {"description": "ssid of the network detected as threat", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "bssid of the network detected as threat", "in": "query", "name": "bssid", "schema": {"type": "string"}}, {"description": "mac of the device that had strongest signal strength for ssid/bssid pair", "in": "query", "name": "ap_mac", "schema": {"type": "string"}}, {"description": "channel over which ap_mac heard ssid/bssid pair", "in": "query", "name": "channel", "schema": {"type": "string"}}, {"description": "whether the reporting AP see a wireless client (on LAN) connecting to it ", "in": "query", "name": "seen_on_lan", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Rogues"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "{rogue_bssid}": {"specs": {"get": {"description": "Get Rogue AP Details", "operationId": "getSiteRogueAP", "parameters": [], "tags": ["Sites Rogues"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rogue_bssid"}]}, "paths": {"deauth_clients": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rogue_bssid"}], "post": {"description": "Send Deauth frame to clients connected to a Rogue AP", "operationId": "deauthSiteClientsConnectedToARogue", "tags": ["Sites Rogues"]}}}}}}}, "rrm": {"paths": {"current": {"specs": {"get": {"description": "Get Current Channel Planning", "operationId": "getSiteCurrentChannelPlanning", "tags": ["Sites RRM"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"devices": {"paths": {"{device_id}": {"paths": {"band": {"paths": {"{band}": {"specs": {"get": {"description": "Get Current RRM Considerations for an AP on a Specific Band", "operationId": "getSiteCurrentRrmConsiderationsForAnApOnASpecificBand", "tags": ["Sites RRM"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}, {"description": "radio band", "in": "path", "name": "band", "required": true, "schema": {"enum": ["24", "5", "6"], "type": "string"}}]}}}}}}}}}}, "events": {"specs": {"get": {"description": "Get Site RRM Events", "operationId": "getSiteRrmEvents", "parameters": [{"in": "query", "name": "band", "required": true, "schema": {"enum": ["24", "5", "6"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites RRM"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "optimize": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Optimize Site RRM", "operationId": "optimizeSiteRrm", "tags": ["Sites RRM"]}}}}}, "rssizones": {"specs": {"get": {"description": "Get RSSI Zone is RSSI-based", "operationId": "getSiteRssiZones", "tags": ["Sites Rssizones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create RSSI Zone", "operationId": "createSiteRssiZone", "tags": ["Sites Rssizones"]}}, "paths": {"{rssizone_id}": {"specs": {"delete": {"description": "Delete Site RSSI Zone", "operationId": "deleteSiteRssiZone", "tags": ["Sites Rssizones"]}, "get": {"description": "Get Site RSSI Zone details", "operationId": "getSiteRssiZone", "tags": ["Sites Rssizones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rssizone_id"}], "put": {"description": "Update Site RSSI Zone", "operationId": "updateSiteRssiZone", "tags": ["Sites Rssizones"]}}}}}, "setting": {"specs": {"get": {"description": "Get Site Settings", "operationId": "getSiteSetting", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "put": {"description": "Update Site Settings", "operationId": "updateSiteSettings", "tags": ["Sites Setting"]}}, "paths": {"blacklist": {"specs": {"delete": {"description": "Delete Site Blacklist Station Clients", "operationId": "deleteSiteClientsBlocklist", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This endpoint is to provide list of client macs for annotation blacklist.\n\nRetrieve the current clients list `blacklist_url` under Site:Setting", "operationId": "createSiteClientsBlocklist", "tags": ["Sites Setting"]}}}, "watched_station": {"specs": {"delete": {"description": "Delete Site Watched Station Clients", "operationId": "deleteSiteWatchedStations", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This endpoint is to provide list of client macs for annotation as watched station.\n\nRetrieve the current clients list from `watched_station_url` under Site:Setting", "operationId": "createSiteWatchedStations", "tags": ["Sites Setting"]}}}, "whitelist": {"specs": {"delete": {"description": "Delete Site Whitelist Station Clients", "operationId": "deleteSiteClientsAllowlist", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This endpoint is to provide list of client macs for annotation as whitelist.\n\nRetrieve the current clients list from `whitelist_url` under Site:Setting", "operationId": "createSiteClientsAllowlist", "tags": ["Sites Setting"]}}}}}, "skyatp": {"paths": {"events": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Skyatp Events (WIP)", "operationId": "countSiteByDistringAttributesOfSkyatpEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "type", "enum": ["type", "mac", "device_mac", "threat_level"], "type": "string"}}, {"description": "event type, e.g. cc, fs, mw", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "client MAC", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device MAC", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "threat level", "in": "query", "name": "threat_level", "schema": {"type": "integer"}}, {"description": "client ip", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Skyatp"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Skyatp Events (WIP)", "operationId": "searchSiteSkyatpEvents", "parameters": [{"description": "event type, e.g. cc, fs, mw", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "client MAC", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device MAC", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "threat level", "in": "query", "name": "threat_level", "schema": {"type": "integer"}}, {"description": "client ip", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Skyatp"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}}}, "sle": {"paths": {"site": {"paths": {"{site_id}": {"paths": {"metric": {"paths": {"{metric}": {"paths": {"impacted-aps": {"specs": {"get": {"description": "Get impacted APs optionally filtered by classifier and failure type", "operationId": "getSiteSleImpactedAps", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "classifier", "schema": {"type": "string"}}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}}}}}}}}}, "{scope}": {"paths": {"{scope_id}": {"paths": {"metric": {"paths": {"{metric}": {"paths": {"classifier": {"paths": {"{classifier}": {"paths": {"summary": {"specs": {"get": {"description": "Get SLE classifier details", "operationId": "getSiteSleClassifierDetails", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites SLEs"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "classifier", "required": true, "schema": {"type": "string"}}]}}}}}}, "histogram": {"specs": {"get": {"description": "Get the histogram for the SLE metric", "operationId": "getSiteSleHistogram", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "impact-summary": {"specs": {"get": {"description": " Get impact summary counts optionally filtered by classifier and failure type", "operationId": "getSiteSleImpactSummary", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "fields", "schema": {"enum": ["wlan", "device_type", "device_os", "band"], "type": "string"}}, {"in": "query", "name": "classifier", "schema": {"type": "string"}}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "impacted-users": {"specs": {"get": {"description": "Get impacted users optionally filtered by classifier and failure type", "operationId": "getSiteSleImpactedClients", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "classifier", "schema": {"type": "string"}}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "summary": {"specs": {"get": {"description": " Get the summary for the SLE metric", "operationId": "getSiteSleSummary", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "threshold": {"specs": {"get": {"description": "Get the SLE threshold", "operationId": "getSiteSleThreshold", "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}], "post": {"description": "Replace the SLE threshold", "operationId": "replaceSiteSleThreshold", "tags": ["Sites SLEs"]}, "put": {"description": "Update the SLE threshold", "operationId": "updateSiteSleThreshold", "tags": ["Sites SLEs"]}}}}}}}, "metrics": {"specs": {"get": {"description": "Get the list of metrics for the given scope", "operationId": "getSiteSlesMetrics", "tags": ["Sites SLEs"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}]}}}}}}}}, "stats": {"specs": {"get": {"description": "Get Site Stats", "operationId": "getSiteStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"assets": {"specs": {"get": {"description": "Get Site Assets Stats", "operationId": "getSiteAssetsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"asset_id": {"specs": {"get": {"description": "Get Site Asset Details", "operationId": "getSiteAssetStats", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "beacons": {"specs": {"get": {"description": "Get Site Beacons Stats", "operationId": "getSiteBeaconsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "clients": {"specs": {"get": {"description": "Get Site Clients Stats", "operationId": "getSiteClientsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"{client_mac}": {"specs": {"get": {"description": "Get Site Client Stats Details", "operationId": "getSiteClientStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}]}}}}, "devices": {"specs": {"get": {"description": "Get Site Devices Stats", "operationId": "getSiteDevicesStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateways", "all"], "type": "string"}}, {"in": "query", "name": "status", "schema": {"default": "all", "enum": ["all", "connected", "disconnected"], "type": "string"}}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"{device_id}": {"specs": {"get": {"description": "Get Site Device Stats Details", "operationId": "getSiteDeviceStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}]}, "paths": {"clients": {"specs": {"get": {"description": "Get wireless client stat per Device", "operationId": "getSiteAllClientsStatsOnDevice", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}]}}}}}}, "discovered_assets": {"specs": {"get": {"description": "Get Discovered BLE Assets\nGet a list of Discovered Assets that doesn\u2019t match any of the Asset / Assetfilters", "operationId": "getSiteDiscoveredAssets", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "discovered_switch_metrics": {"paths": {"search": {"specs": {"get": {"description": "Search Discovered Switch Metrics", "operationId": "searchSiteDiscoveredSwitchesMetrics", "parameters": [{"description": "metric scope, optional", "in": "query", "name": "scope", "schema": {"default": "site", "enum": ["site", "switch"], "type": "string"}}, {"description": "metric type, inactive_wired_vlans/switch_ap_affinity/poe_compliance/version_compliance, optional", "in": "query", "name": "type", "schema": {"enum": ["inactive_wired_vlans", "switch_ap_affinity", "poe_compliance", "version_compliance"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "discovered_switches": {"paths": {"count": {"specs": {"get": {"description": "Count Discovered Switches", "operationId": "countSiteDiscoveredSwitches", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "system_name", "enum": ["system_name", "version", "model", "mgmt_addr"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "metrics": {"specs": {"get": {"description": "Discovered switches related metrics, lists related switch system names & details if not compliant", "operationId": "getSiteDiscoveredSwitchesMetrics", "parameters": [{"description": "configurable # ap per switch threshold, default 12", "in": "query", "name": "threshold", "schema": {"type": "string"}}, {"description": "system name for switch level metrics, optional", "in": "query", "name": "system_name", "schema": {"type": "string"}}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Count Discovered Switches", "operationId": "getSiteDiscoveredSwitches", "parameters": [{"in": "query", "name": "system_name", "schema": {"type": "string"}}, {"in": "query", "name": "mgmt_addr", "schema": {"type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "version", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "maps": {"paths": {"{map_id}": {"paths": {"clients": {"specs": {"get": {"description": "Get Site Clients Stats By Map", "operationId": "getSiteClientsStatsByMap", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}]}}, "discovered_assets": {"specs": {"get": {"description": "Get a list of BLE beacons that we discovered (whether they\u2019re defined as assets or not)", "operationId": "getSiteDiscoveredAssetByMap", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}]}}, "sdkclients": {"specs": {"get": {"description": "Get SdkClient Stats By Map", "operationId": "getSiteSdkStatsByMap", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}]}}, "unconnected_clients": {"specs": {"get": {"description": "Unconnected Client Location", "operationId": "getSiteUnconnectedClientStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}]}}}}}}, "mxedges": {"specs": {"get": {"description": "Get Site MxEdges Stats", "operationId": "getSiteMxEdgesStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"{mxedge_id}": {"specs": {"get": {"description": "Get One Site MxEdge Stats", "operationId": "getSiteMxEdgeStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/mxedge_id"}]}}}}, "ports": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Switch/Gateway Ports", "operationId": "countSiteByDisctinctAttributesOPorts", "parameters": [{"description": "port_id, port_mac, full_duplex, mac, neighbor_macneighbor_port_desc, neighbor_system_name, poe_disabled, poe_mode, poe_on, speed, up", "in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "port_mac", "full_duplex", "mac", "neighbor_mac", "neighbor_port_desc", "neighbor_system_name", "poe_disabled", "poe_mode", "poe_on", "speed", "up"], "type": "string"}}, {"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true` && has Authenticator role", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Switch / Gateway Ports", "operationId": "searchSitePorts", "parameters": [{"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Output errors", "in": "query", "name": "tx_errors", "schema": {"type": "integer"}}, {"description": "Input errors", "in": "query", "name": "rx_errors", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "Limit on number of dynamically learned macs", "in": "query", "name": "mac_limit", "schema": {"type": "integer"}}, {"description": "Number of mac addresses in the forwarding table", "in": "query", "name": "mac_count", "schema": {"type": "integer"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true` && has Authenticator role", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "sdkclients": {"paths": {"{sdkclient_id}": {"specs": {"get": {"description": "Get Detail Stats of a SdkClient", "operationId": "getSiteSdkStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/sdkclient_id"}]}}}}, "switch_ports": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Switch/Gateway Ports", "operationId": "countSiteByDisctinctAttributesOfSwitchPorts", "parameters": [{"description": "port_id, port_mac, full_duplex, mac, neighbor_macneighbor_port_desc, neighbor_system_name, poe_disabled, poe_mode, poe_on, speed, up", "in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "port_mac", "full_duplex", "mac", "neighbor_mac", "neighbor_port_desc", "neighbor_system_name", "poe_disabled", "poe_mode", "poe_on", "speed", "up"], "type": "string"}}, {"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Switch / Gateway Ports", "operationId": "searchSiteSwitchPorts", "parameters": [{"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true` && has Authenticator role", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "wxrules": {"specs": {"get": {"description": "Get Wxlan Rule usage", "operationId": "getSiteWxRulesUsage", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "zones": {"specs": {"get": {"description": "Get Zones Stats", "operationId": "getSiteZonesStats", "parameters": [{"example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "map_id", "schema": {"type": "string"}}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{zone_type}": {"paths": {"{zone_id}": {"specs": {"get": {"description": "Get Detail Zone Stats", "operationId": "getSiteZoneStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_type"}, {"$ref": "#/components/parameters/zone_id"}]}}}}}}, "subscriptions": {"specs": {"delete": {"description": "Unsubscribe to Site Alarms", "operationId": "UnsubscribeSite", "tags": ["Sites Subscriptions"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Subscribe to Site Alarms", "operationId": "SubscribeSite", "tags": ["Sites Subscriptions"]}}}, "uisettings": {"specs": {"get": {"description": "CURD site UI settings", "operationId": "getSiteCurdSettings", "tags": ["Sites UI Settings"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "CURD site UI settings", "operationId": "createSiteCurdSettings", "tags": ["Sites UI Settings"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get both site UI settings(for_site=true) and org UI settings (for_site=false)", "operationId": "getSiteDerivedCurdSetting", "tags": ["Sites UI Settings"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{uisetting_id}": {"specs": {"delete": {"description": "CURD site UI settings", "operationId": "deleteSiteCurdSetting", "tags": ["Sites UI Settings"]}, "get": {"description": "CURD site UI settings", "operationId": "getSiteCurdSetting", "tags": ["Sites UI Settings"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/uisetting_id"}], "post": {"description": "CURD site UI settings", "operationId": "updateSiteCurdSetting", "tags": ["Sites UI Settings"]}}}}}, "vbeacons": {"specs": {"get": {"description": "Get Site Virtual Beacons", "operationId": "getSiteVBeacons", "tags": ["Sites vBeacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Virtual Beacon", "operationId": "createSiteVBeacon", "tags": ["Sites vBeacons"]}}, "paths": {"{vbeacon_id}": {"specs": {"delete": {"description": "Delete Site Virtual Beacon", "operationId": "deleteSiteVBeacon", "tags": ["Sites vBeacons"]}, "get": {"description": "Get Site Virtual Beacon Details", "operationId": "getSiteVBeacon", "tags": ["Sites vBeacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/vbeacon_id"}], "put": {"description": "Update Site Virtual Beacon", "operationId": "updateSiteVBeacon", "tags": ["Sites vBeacons"]}}}}}, "webhooks": {"specs": {"get": {"description": "Get Site Webhooks", "operationId": "getSiteWebhooks", "tags": ["Sites Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Webhook", "operationId": "createSiteWebhook", "tags": ["Sites Webhooks"]}}, "paths": {"{webhook_id}": {"specs": {"delete": {"description": "Delete Site Webhook", "operationId": "deleteSiteWebhook", "tags": ["Sites Webhooks"]}, "get": {"description": "Get Site Webhook Details", "operationId": "getSiteWebhook", "tags": ["Sites Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/webhook_id"}], "put": {"description": "Update Site Webhook", "operationId": "updateSiteWebhook", "tags": ["Sites Webhooks"]}}, "paths": {"ping": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/webhook_id"}], "post": {"description": "send a Ping event to the webhook", "operationId": "pingSiteWebhook", "tags": ["Sites Webhooks"]}}}}}}}, "wired_clients": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Clients", "operationId": "countSiteWiredClients", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "vlan", "mac"], "type": "string"}}, {"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Wired Clients", "operationId": "searchSiteWiredClients", "parameters": [{"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "wlans": {"specs": {"get": {"description": "Get Site WLANs", "operationId": "getSiteWlans", "tags": ["Sites Wlans"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WLAN", "operationId": "createSiteWlan", "tags": ["Sites Wlans"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Wlans Derived", "operationId": "getSiteWlanDerived", "parameters": [{"description": "whether to resolve SITE_VARS", "example": true, "in": "query", "name": "resolve", "schema": {"default": false, "type": "boolean"}}], "tags": ["Sites Wlans"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{wlan_id}": {"specs": {"delete": {"description": "Delete Site WLAN", "operationId": "deleteSiteWlan", "tags": ["Sites Wlans"]}, "get": {"description": "Get Site WLAN", "operationId": "getSiteWlan", "tags": ["Sites Wlans"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update Site WLAN", "operationId": "updateSiteWlan", "tags": ["Sites Wlans"]}}, "paths": {"portal_image": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wlan_id"}], "post": {"description": "Wlan Portal Image Upload", "operationId": "uploadSiteWlanPortalImage", "tags": ["Sites Wlans"]}}}, "portal_template": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update a Portal Template", "operationId": "updateSiteWlanPortalTemplate", "tags": ["Sites Wlans"]}}}}}}}, "wxrules": {"specs": {"get": {"description": "Get Site WxLan Rules", "operationId": "getSiteWxRules", "tags": ["Sites WxRules"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WxLan Rule", "operationId": "createSiteWxRule", "tags": ["Sites WxRules"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Site WxLan Rule Derived", "operationId": "getSiteWxRulesDerived", "tags": ["Sites WxRules"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{wxrules_id}": {"specs": {"delete": {"description": "Delete Site WxLan Rule", "operationId": "deleteSiteWxRule", "tags": ["Sites WxRules"]}, "get": {"description": "Get Site WxLan Rule Details", "operationId": "getSiteWxRule", "tags": ["Sites WxRules"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxrules_id"}], "put": {"description": "Update Site WxLan Rule", "operationId": "updateSiteWxRule", "tags": ["Sites WxRules"]}}}}}, "wxtags": {"specs": {"get": {"description": "Get Site WxTags", "operationId": "getSiteWxTags", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WxTag", "operationId": "createSiteWxTag", "tags": ["Sites WxTags"]}}, "paths": {"apps": {"specs": {"get": {"description": "Get Application List", "operationId": "getSiteApplicationList", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{wxtag_id}": {"specs": {"delete": {"description": "Delete Site WxTag", "operationId": "deleteSiteWxTag", "tags": ["Sites WxTags"]}, "get": {"description": "Get Site WxTag Details", "operationId": "getSiteWxTag", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxtag_id"}], "put": {"description": "Update Site WxTag", "operationId": "updateSiteWxTag", "tags": ["Sites WxTags"]}}, "paths": {"clients": {"specs": {"get": {"description": "Get Current Matching Clients of a WXLAN Tag", "operationId": "getSiteCurrentMatchingClientsOfAWxTag", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxtag_id"}]}}}}}}, "wxtunnels": {"specs": {"get": {"description": "Get Site WxLan Tunnels", "operationId": "getSiteWxTunnels", "tags": ["Sites WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WxLan Tunnel", "operationId": "createSiteWxTunnel", "tags": ["Sites WxTunnels"]}}, "paths": {"{wxtunnel_id}": {"specs": {"delete": {"description": "Delete Site WxLan Tunnel", "operationId": "deleteSiteWxTunnel", "tags": ["Sites WxTunnels"]}, "get": {"description": "Get Site WxLan tunnel Details", "operationId": "getSiteWxTunnel", "tags": ["Sites WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxtunnel_id"}], "put": {"description": "Update Site WxLan Tunnel", "operationId": "updateSiteWxTunnel", "tags": ["Sites WxTunnels"]}}}}}, "zones": {"specs": {"get": {"description": "Get Site Zones", "operationId": "getSiteZones", "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Zone ", "operationId": "createSiteZone", "tags": ["Sites Zones"]}}, "paths": {"{zone_id}": {"specs": {"delete": {"description": "Delete Site Zone", "operationId": "deleteSiteZone", "tags": ["Sites Zones"]}, "get": {"description": "Get Site Zone Details", "operationId": "getSiteZone", "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_id"}], "put": {"description": "Update Site Zone", "operationId": "updateSiteZone", "tags": ["Sites Zones"]}}}}}, "{zone_type}": {"paths": {"count": {"specs": {"get": {"description": "Count Site Zone Sessions", "operationId": "countSiteZoneSessions", "parameters": [{"example": "scope_id", "in": "query", "name": "distinct", "schema": {"default": "scope_id", "enum": ["user_type", "user", "scope_id", "scope"], "type": "string"}}, {"description": "user type", "in": "query", "name": "user_type", "schema": {"default": "client", "enum": ["client", "sdkclient", "asset"], "type": "string"}}, {"description": "client MAC / Asset MAC / SDK UUID", "in": "query", "name": "user", "schema": {"type": "string"}}, {"description": "if `scope`==`map`/`zone`/`rssizone`, the scope id", "in": "query", "name": "scope_id", "schema": {"type": "string"}}, {"description": "scope", "in": "query", "name": "scope", "schema": {"default": "site", "enum": ["site", "map", "zone", "rssizone"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_type"}]}}, "visits": {"paths": {"search": {"specs": {"get": {"description": "Search Zone Sessions", "operationId": "searchSiteZoneSessions", "parameters": [{"description": "user type, client (default) / sdkclient / asset", "in": "query", "name": "user_type", "schema": {"default": "client", "enum": ["client", "sdkclient", "asset"], "type": "string"}}, {"description": "client MAC / Asset MAC / SDK UUID", "in": "query", "name": "user", "schema": {"type": "string"}}, {"description": "if `scope`==`map`/`zone`/`rssizone`, the scope id", "in": "query", "name": "scope_id", "schema": {"type": "string"}}, {"description": "scope", "in": "query", "name": "scope", "schema": {"default": "site", "enum": ["site", "map", "zone", "rssizone"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_type"}]}}}}}}}}}}, "utils": {"paths": {"test_twilio": {"specs": {"post": {"description": "Allows validation of twilio setup\nIn case of success, a text message confirming successful setup should be received. In case of error, twilio error code and message are returned.", "operationId": "testSiteWlanTwilioSetup", "tags": ["Sites"]}}}}}}}}}, "webhook_alarm_uri": {"specs": {"post": {"description": "Webhook sample for `alarm` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages", "operationId": "alarms", "tags": ["Webhook Samples"]}}}, "webhook_asset_raw_uri": {"specs": {"post": {"description": "Webhook sample for `asset_raw` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "assetRaw", "tags": ["Webhook Samples"]}}}, "webhook_audit_uri": {"specs": {"post": {"description": "Webhook sample for `audit` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "audits", "tags": ["Webhook Samples"]}}}, "webhook_client_join_uri": {"specs": {"post": {"description": "Webhook sample for `clilent_join` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "clientJoin", "tags": ["Webhook Samples"]}}}, "webhook_client_sessions_uri": {"specs": {"post": {"description": "Webhook sample for `client_sessions` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "clientSessions", "tags": ["Webhook Samples"]}}}, "webhook_device_events_uri": {"specs": {"post": {"description": "Webhook sample for `device_events` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "deviceEvents", "tags": ["Webhook Samples"]}}}, "webhook_device_updowns_uri": {"specs": {"post": {"description": "Webhook sample for `device_updowns` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "deviceUpDown", "tags": ["Webhook Samples"]}}}, "webhook_location_uri": {"specs": {"post": {"description": "Webhook sample for `location` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "location", "tags": ["Webhook Samples"]}}}, "webhook_occupancy_alerts_uri": {"specs": {"post": {"description": "Webhook sample for `occupancy_alerts` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "occupancyAlerts", "tags": ["Webhook Samples"]}}}, "webhook_ping_uri": {"specs": {"post": {"description": "Webhook sample for `ping` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "ping", "tags": ["Webhook Samples"]}}}, "webhook_sdkclient_scan_data_uri": {"specs": {"parameters": [], "post": {"description": "Webhook sample for `sdkclient_scan_data` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "sdkclientScanData", "tags": ["Webhook Samples"]}}}, "webhook_zone_uri": {"specs": {"post": {"description": "Webhook sample for `zone` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "zone", "tags": ["Webhook Samples"]}}}}, "components": {"parameters": {"admin_id": {"in": "path", "name": "admin_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "alarm_id": {"in": "path", "name": "alarm_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "alarmtemplate_id": {"in": "path", "name": "alarmtemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "apitoken_id": {"in": "path", "name": "apitoken_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "aptemplate_id": {"in": "path", "name": "aptemplate_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, "asset_id": {"in": "path", "name": "asset_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "assetfilter_id": {"in": "path", "name": "assetfilter_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "beacon_id": {"in": "path", "name": "beacon_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "client_mac": {"in": "path", "name": "client_mac", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "country_code": {"description": "country code, in two-character", "in": "query", "name": "country_code", "required": true, "schema": {"example": "US", "pattern": "^[a-zA-Z]{2}$", "type": "string"}}, "device_id": {"in": "path", "name": "device_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "device_mac": {"in": "path", "name": "device_mac", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "deviceprofile_id": {"in": "path", "name": "deviceprofile_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "duration": {"in": "query", "name": "duration", "required": false, "schema": {"default": "1d", "enum": ["1d", "1h", "10m"], "type": "string"}}, "end": {"in": "query", "name": "end", "schema": {"default": 0, "minimum": 0, "type": "integer"}}, "evpn_topology_id": {"in": "path", "name": "evpn_topology_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "gatewaytemplate_id": {"in": "path", "name": "gatewaytemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "guest_mac": {"in": "path", "name": "guest_mac", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "image_name": {"in": "path", "name": "image_name", "required": true, "schema": {"type": "string"}}, "invite_id": {"in": "path", "name": "invite_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "ip": {"description": "ip address", "in": "query", "name": "ip", "schema": {"format": "ipv4", "type": "string"}}, "limit": {"in": "query", "name": "limit", "required": false, "schema": {"default": 100, "minimum": 0, "type": "integer"}}, "map_id": {"in": "path", "name": "map_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "metric": {"in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}, "msp_id": {"in": "path", "name": "msp_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "mxcluster_id": {"in": "path", "name": "mxcluster_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "mxedge_id": {"in": "path", "name": "mxedge_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "mxtunnel_id": {"in": "path", "name": "mxtunnel_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "name": {"in": "query", "name": "name", "required": false, "schema": {"default": "", "type": "string"}}, "network_id": {"in": "path", "name": "network_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "networktemplate_id": {"in": "path", "name": "networktemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "org_id": {"in": "path", "name": "org_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "orggroup_id": {"in": "path", "name": "orggroup_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "page": {"in": "query", "name": "page", "required": false, "schema": {"default": 1, "minimum": 1, "type": "integer"}}, "psk_id": {"description": "PSK ID", "in": "path", "name": "psk_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "psk_id_query": {"description": "PSK ID", "in": "query", "name": "psk_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "psk_name": {"description": "PSK name", "in": "query", "name": "psk_name", "required": true, "schema": {"default": "", "type": "string"}}, "q": {"description": "search string", "in": "query", "name": "q", "required": true, "schema": {"default": "", "example": "search", "type": "string"}}, "resolution": {"in": "query", "name": "resolution", "required": true, "schema": {"default": "default", "enum": ["default", "fine"], "type": "string"}}, "rfdiag_id": {"in": "path", "name": "rfdiag_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "rftemplate_id": {"in": "path", "name": "rftemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "rogue_bssid": {"in": "path", "name": "rogue_bssid", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "rogue_type": {"in": "query", "name": "type", "required": true, "schema": {"enum": ["honeypot", "lan", "others", "spoof"], "type": "string"}}, "rssizone_id": {"in": "path", "name": "rssizone_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sdkclient_id": {"in": "path", "name": "sdkclient_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sdkinvite_id": {"in": "path", "name": "sdkinvite_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sdktemplate_id": {"in": "path", "name": "sdktemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "secpolicy_id": {"in": "path", "name": "secpolicy_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "secret": {"in": "path", "name": "secret", "required": true, "schema": {"type": "string"}}, "site_id": {"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "site_name": {"in": "path", "name": "site_name", "required": true, "schema": {"type": "string"}}, "sitegroup_id": {"in": "path", "name": "sitegroup_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sso_id": {"in": "path", "name": "sso_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "ssorole_id": {"in": "path", "name": "ssorole_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "start": {"in": "query", "name": "start", "schema": {"default": 0, "minimum": 0, "type": "integer"}}, "template_id": {"in": "path", "name": "template_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "ticket_id": {"in": "path", "name": "ticket_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "token": {"in": "path", "name": "token", "required": true, "schema": {"type": "string"}}, "uisetting_id": {"in": "path", "name": "uisetting_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "vbeacon_id": {"in": "path", "name": "vbeacon_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "webhook_id": {"in": "path", "name": "webhook_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wlan_id": {"in": "path", "name": "wlan_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wxrules_id": {"in": "path", "name": "wxrules_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wxtag_id": {"in": "path", "name": "wxtag_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wxtunnel_id": {"in": "path", "name": "wxtunnel_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "zone_id": {"in": "path", "name": "zone_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "zone_type": {"in": "path", "name": "zone_type", "required": true, "schema": {"enum": ["zones", "rssizones"], "type": "string"}}}}}
\ No newline at end of file
diff --git a/chrome_ext_convert.py b/chrome_ext_convert.py
new file mode 100644
index 0000000..d2ef452
--- /dev/null
+++ b/chrome_ext_convert.py
@@ -0,0 +1,59 @@
+import json
+import shutil
+
+js_path = "./mist_openapi/Mist.openapi.json"
+res_path ="./api.json"
+js_chrome = {
+ "paths":{},
+ "components": {}
+}
+
+
+
+def process_specs(specs):
+ for verb in specs:
+ if "responses" in specs[verb]:
+ del specs[verb]["responses"]
+ if "summary" in specs[verb]:
+ del specs[verb]["summary"]
+ if "requestBody" in specs[verb]:
+ del specs[verb]["requestBody"]
+ return specs
+
+def process_sub(parent_path: dict, splitted_path: list, specs: dict):
+ #pp {}
+ current_path = splitted_path[0] #Â api
+ splitted_path = splitted_path[1:] #Â [v1, orgs, ...]
+ # pp {api: {}}}
+ if len(splitted_path)>0:
+ if not current_path in parent_path:
+ parent_path[current_path] = {}
+ if not "paths" in parent_path[current_path]:
+ parent_path[current_path]["paths"] = {}
+ parent_path[current_path]["paths"]= process_sub(parent_path[current_path]["paths"], splitted_path, specs)
+
+ else:
+ parent_path[current_path] = {"specs": process_specs(specs)}
+ return parent_path
+
+
+
+### entry point
+# open file
+with open(js_path, 'r') as js:
+ js_data = json.loads(js.read())
+
+# loop on each path from the open api spec
+for path in js_data["paths"]:
+ # split the path to create the JSON levels
+ splitted_path = path.split("/")[1:]
+ specs = js_data["paths"][path]
+ js_chrome["paths"] = process_sub(js_chrome["paths"], splitted_path, specs)
+
+
+js_chrome["components"]["parameters"] = js_data["components"]["parameters"]
+
+with open(res_path, "w") as f:
+ json.dump(js_chrome, f)
+
+shutil.copy("./api.json", "./src/angular/src/assets/api.json")
\ No newline at end of file
diff --git a/gen_api_struct.sh b/gen_api_struct.sh
new file mode 100755
index 0000000..8035848
--- /dev/null
+++ b/gen_api_struct.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+cd mist_openapi
+git pull
+cd ..
+python3 ./chrome_ext_convert.py
diff --git a/mist_openapi b/mist_openapi
index 349b4c8..ec72121 160000
--- a/mist_openapi
+++ b/mist_openapi
@@ -1 +1 @@
-Subproject commit 349b4c81909ad4438ae4b816ea20e98d693fc6ad
+Subproject commit ec72121b3af6ec301d28cb0e06a5678f162c337e
diff --git a/src/angular/src/app/app.component.scss b/src/angular/src/app/app.component.scss
index 75754cb..098aa32 100644
--- a/src/angular/src/app/app.component.scss
+++ b/src/angular/src/app/app.component.scss
@@ -66,6 +66,7 @@ button.bottom {
display: flex;
padding: 0.5em;
align-items: center;
+ cursor: pointer;
}
button.bottom:not(.selected):hover {
diff --git a/src/angular/src/app/app.module.ts b/src/angular/src/app/app.module.ts
index 49a392e..f1a6796 100644
--- a/src/angular/src/app/app.module.ts
+++ b/src/angular/src/app/app.module.ts
@@ -5,6 +5,8 @@ import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { ApiComponent } from './pages/api/api.component';
+import { ApiManageComponent } from './pages/api/manage/manage.component';
+import { ApiDjangoComponent } from './pages/api/django/django.component';
import { AccountComponent } from './pages/account/account.component';
import { AccountManageComponent } from './pages/account/manage/manage.component';
import { AccountCreateComponent } from './pages/account/create/create.component'
@@ -13,7 +15,11 @@ import { AccountCreateOrgComponent } from './pages/account/create_org/create_org
import { AboutComponent } from './pages/about/about.component'
@NgModule({
- declarations: [AppComponent, ApiComponent, AccountComponent, AccountManageComponent, AccountCreateComponent, AccountManageOrgComponent, AccountCreateOrgComponent, AboutComponent],
+ declarations: [
+ AppComponent,
+ ApiComponent, ApiManageComponent, ApiDjangoComponent,
+ AccountComponent, AccountManageComponent, AccountCreateComponent, AccountManageOrgComponent, AccountCreateOrgComponent,
+ AboutComponent],
imports: [BrowserModule, AppRoutingModule, FormsModule, HttpClientModule],
bootstrap: [AppComponent]
})
diff --git a/src/angular/src/app/pages/about/about.component.html b/src/angular/src/app/pages/about/about.component.html
index af81f71..3424168 100644
--- a/src/angular/src/app/pages/about/about.component.html
+++ b/src/angular/src/app/pages/about/about.component.html
@@ -29,10 +29,10 @@
Extension information
Unknown
-
+
You have the lastest Version
-
+
New version available ({{last_version}})
@@ -39,21 +39,25 @@
- Manage
+ Manage Tokens
- Create
+ Create Token
-
+
Sorry, I'm not able to find any Mist Session in this browser...
Please log in to your Mist Dashobard first.
+
+
I'm still eating your cookies... Not done yet...
+
Please wait a bit more... Thanks!
+
diff --git a/src/angular/src/app/pages/account/account.component.scss b/src/angular/src/app/pages/account/account.component.scss
index e6ef510..b0b6124 100644
--- a/src/angular/src/app/pages/account/account.component.scss
+++ b/src/angular/src/app/pages/account/account.component.scss
@@ -6,17 +6,6 @@
flex-direction: column;
}
-.no-account {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- margin: 1em;
- text-align: center;
- font-weight: 200;
- height: 100%;
-}
-
.popup {
position: absolute;
top: 50px;
@@ -83,6 +72,7 @@
display: flex;
flex-direction: row;
align-items: center;
+ cursor: pointer;
}
.title-cloud img {
@@ -145,43 +135,11 @@ button.token {
align-items: center;
justify-content: center;
padding: 0.1em;
+ cursor: pointer;
}
-///////////////////////
-// TOOTLTIP
-.tooltip {
- position: relative;
- display: inline-block;
-}
-
+// tooltip
.tooltip .tooltiptext {
- visibility: hidden;
- width: 60px;
- background-color: #00000061;
- color: #fff;
- text-align: center;
- border-radius: 6px;
- padding: 4px 0;
- position: absolute;
- z-index: 1;
- top: 150%;
- left: 50%;
- margin-left: -30px;
- font-size: smaller;
-}
-
-.tooltip .tooltiptext::after {
- content: "";
- position: absolute;
- bottom: 100%;
- left: 50%;
- margin-left: -5px;
- border-width: 5px;
- border-style: solid;
- border-color: transparent transparent #00000061 transparent;
-}
-
-.tooltip:hover .tooltiptext {
- visibility: visible;
- transition: visibility 0.2s ease-in-out, opacity 0.2s ease-in-out;
+ top: 130%;
+ left: 30%;
}
\ No newline at end of file
diff --git a/src/angular/src/app/pages/account/account.component.ts b/src/angular/src/app/pages/account/account.component.ts
index a96e3e6..0ec2c0e 100644
--- a/src/angular/src/app/pages/account/account.component.ts
+++ b/src/angular/src/app/pages/account/account.component.ts
@@ -49,11 +49,11 @@ export class AccountComponent implements OnInit {
".gc1.mist.com"
]
- sessions: SessionElement[] = []
-
+ sessions: SessionElement[] = [];
+ is_working=true;
ngOnInit() {
- //console.log(this.cookies)
+ this.is_working = true;
this.sessions = [];
chrome.cookies.getAll({}, (cookies) => {
cookies.forEach((cookie) => {
@@ -104,6 +104,7 @@ export class AccountComponent implements OnInit {
})
}
})
+ this.is_working = false;
}
processOrgs(privileges: any[]): OrgElement[] {
diff --git a/src/angular/src/app/pages/api/api.component.html b/src/angular/src/app/pages/api/api.component.html
index 07b40db..9d95859 100644
--- a/src/angular/src/app/pages/api/api.component.html
+++ b/src/angular/src/app/pages/api/api.component.html
@@ -1,46 +1,11 @@
-
-
Page Info
-
-
Sorry, this website does not look like a Mist Organization...
-
If you think I'm wrong, please send me an email with the current URL.
+
+
+
+
+ This page is not supported by the application yet...
-
-
-
-
-
-
-
-
-
-
0" class="content no-grow">
-
Quick API Access
-
-
- {{quick_link.name | uppercase}}
-
-
-
+
If you think it should, please create a request to report your current URL.
+
+ Create a Request
\ No newline at end of file
diff --git a/src/angular/src/app/pages/api/api.component.scss b/src/angular/src/app/pages/api/api.component.scss
index d57f965..f0dde79 100644
--- a/src/angular/src/app/pages/api/api.component.scss
+++ b/src/angular/src/app/pages/api/api.component.scss
@@ -130,4 +130,18 @@ button.copy-ids:hover img.copy-ids {
img.copy-ids {
height: 20px;
+}
+
+button.request {
+ margin: 2em;
+ background-color: unset;
+ border: 1px solid lightgray;
+ border-radius: 5px;
+ cursor: pointer;
+ box-shadow: rgb(0 0 0 / 5%) 0px 0px 0px 1px;
+ transition: background-color 0.2s ease-in-out;
+}
+
+button.request:hover {
+ background-color: lightgray;
}
\ No newline at end of file
diff --git a/src/angular/src/app/pages/api/api.component.ts b/src/angular/src/app/pages/api/api.component.ts
index d564c9e..ca264c9 100644
--- a/src/angular/src/app/pages/api/api.component.ts
+++ b/src/angular/src/app/pages/api/api.component.ts
@@ -1,13 +1,6 @@
-import { group } from '@angular/animations';
import { Component, Inject, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
import { TAB_URL } from '../../providers/tab-url.provider';
-import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
-export interface linkElement {
- url: string,
- name: string
-}
@Component({
selector: 'app-api',
@@ -16,856 +9,34 @@ export interface linkElement {
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ApiComponent implements OnInit {
- message: string;
- mist_url: string = "";
-
- quick_links: linkElement[] = []
-
- org_id: string = "";
- site_id: string = "";
- obj_id: string = "";
- obj_name: string = "";
- focused: string = "";
constructor(
@Inject(TAB_URL) readonly tabUrl: string,
private _cd: ChangeDetectorRef,
- private _http: HttpClient
) { }
+ display: string;
- hosts = [
+ hosts_manage = [
"integration.mistsys.com",
"manage.mist.com",
"integration.mist.com",
"manage.eu.mist.com",
"manage.gc1.mist.com"
]
+ hosts_api = [
+ "api.mist.com",
+ "api.eu.mist.com",
+ "api.gc1.mist.com"
+ ]
ngOnInit() {
- this.generateApiUrl()
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- // API URL ENTRYPOINT
- generateApiUrl() {
- const orgsle_re = /https:\/\/(manage|integration)\.(?
[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!dashboard\/(?siteComparison|wiredSiteComparison|wanSiteComparison)\/(?[a-z-]*)\/(?[a-z-]*)\/([a-z-_]*)\/(?[0-9a-z-]*)\/(?[0-9]*)\/(?[0-9]*)/iys;
- const sle_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!dashboard\/(?serviceLevels|wiredserviceLevels|wanserviceLevels)\/(?[a-z-]*)\/(?[a-f0-9-]*)\/(?[0-9a-z-]*)\/(?[0-9]*)\/(?[0-9]*)\/(?[a-f0-9-]*)/iys;
- const insights_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!dashboard\/insights\/((?[a-z]+)\/)?((?[a-z0-9-]+)\/)((?[a-z0-9]+)\/)?((?[0-9]*)\/)?((?[0-9]*)\/)?(?[0-9a-f-]*)?/iys;
- const alarm_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!alerts\/?(?org|site)?\/?(?[0-9a-z-]*)\/?(?[0-9a-z]*)?\/?(?[0-9]*)?\/?(?[0-9]*)?\/?(?true|false)?\/?(?[a-z%0-9]*)?\/?(?true|false)?\/?(?true|false)?\/?(?true|false)?\/?(?[0-9a-z-]*)?/iys;
- const events_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!marvis\/?(?org|site)?\/?(?[0-9a-z]*)?\/?(?[0-9]*)?\/?(?[0-9]*)?\/?(?[0-9a-z-]*)?/iys;
- const templates_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!(?template|rfTemplate)\/(?template|rfTemplate)\/(?[0-9a-z_-]*)/yis;
- const floorplans_re = /https:\/\/manage\.(?[a-z0-1.]*mist\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!cliLocation\/(?view|config|validationPath|wayfinding)?\/?(?[0-9a-f-]*)\/?(floorplan|beaconsAndZones)?\/?(?[0-9a-f-]*)?/iys;
- const common_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!(?[a-z]+)\/?((?detail|site|admin|edgedetail|clusterdetail|new|view)\/)?([0-9]\/)?((?[0-9a-z_-]*)\/)?(?[0-9a-f-]*)?/yis;
- const common_objs = ["ap", "gateway", "switch", "assets", "wlan", "tags", "psk", "tunnels", "clients", "sdkclients", "wiredclients", "wxlan", "security", "switchconfig", "pcap", "orgtags", "misttunnels", "switchtemplate", "deviceprofiles", "org", "orgpsk", "configuration", "rftemplates", "templates", "auditlogs", "apinventory", "adminconfig", "subscription", "edge"]
- const base_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!/yis;
-
- const orgsle = orgsle_re.exec(this.tabUrl);
- const sle = sle_re.exec(this.tabUrl);
- const insights = insights_re.exec(this.tabUrl);
- const alarm = alarm_re.exec(this.tabUrl);
- const events = events_re.exec(this.tabUrl);
- const templates = templates_re.exec(this.tabUrl);
- const floorplans = floorplans_re.exec(this.tabUrl);
- const common = common_re.exec(this.tabUrl);
- const base = base_re.exec(this.tabUrl);
-
- if (orgsle) {
- this.orgSleUrl(orgsle);
- } else if (sle) {
- this.sleUrl(sle);
- } else if (insights) {
- this.insightsUrl(insights);
- } else if (alarm) {
- this.alarmUrl(alarm);
- } else if (events) {
- this.eventsUrl(events);
- } else if (templates) {
- this.commonUrl(templates);
- } else if (floorplans) {
- this.floorplansUrl(floorplans);
- } else if (common && common["groups"] && common_objs.includes(common["groups"]["obj"].toLowerCase())) {
- this.commonUrl(common);
- } else if (base) {
- this.baseUrl(base);
- }
- this._cd.detectChanges()
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- // API URL
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
-
-
- ////////////////////// MAC
- getMac(uuid: string): string {
- const splitted_uuid = uuid.split("-");
- return splitted_uuid[splitted_uuid.length - 1];
- }
-
- setName(obj_name: string, detail: string) {
- if (detail && detail != "new") {
- this.obj_name = obj_name
- } else {
- if (["switch"].includes(obj_name)) {
- this.obj_name = "switches";
- } else {
- this.obj_name = obj_name + "s";
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// COMMON ORG FUNCTIONS
- forgeOrgObject(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name + "/" + this.obj_id;
- this.quick_links.push({ url: url, name: this.obj_name });
- } else {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name;
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name });
- }
- }
-
- forgeOrgObjectStats(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/stats/" + obj_name + "/" + this.obj_id;
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
- }
- }
-
-
- forgeOrgObjectEvents(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // MAC
- const mac = this.getMac(this.obj_id);
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name + "/events/search?limit=1000&mac=" + mac;
- if (!extra_param) {
- url += "&duration=1d";
- } else {
- url += "&" + extra_param;
- }
- this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" });
- } else {
- url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name + "/events/search?limit=1000&device_type=" + obj_name;
- if (!extra_param) {
- url += "&duration=1d";
- } else {
- url += "&" + extra_param;
- }
- this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" });
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// COMMON SITE FUNCTIONS
- forgeSiteObject(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/" + this.obj_id;
- this.quick_links.push({ url: url, name: this.obj_name });
- if (["switch", "gateway"].includes(this.obj_name)) {
- this.quick_links.push({ url: url + "/config_cmd", name: this.obj_name + " CMDS" });
- }
- } else {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name;
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name });
- }
- }
-
- forgeSiteObjectSearch(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/search?mac=" + this.obj_id;
- this.quick_links.push({ url: url, name: this.obj_name });
- } else {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/search";
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name });
- }
- }
-
- forgeSiteObjectStats(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/" + obj_name + "/" + this.obj_id;
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
- } else {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/" + obj_name;
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
- }
- }
-
- forgeSiteObjectEvents(obj_name: string, device_type: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // MAC
- const mac = this.getMac(this.obj_id);
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/events/search?limit=1000&mac=" + mac;
- if (!extra_param) {
- url += "&duration=1d";
- } else {
- url += "&" + extra_param;
- }
- this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" })
- } else {
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/events/search?limit=1000";
- if (device_type) {
- url += "&device_type=" + device_type;
- }
- if (!extra_param) {
- url += "&duration=1d";
- } else {
- url += "&" + extra_param;
- }
- this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" });
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SITE SECURITY FUNCTION
- forgeSiteSecurity(host: string): void {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/rogues/events/search?limit=100&duration=1d",
- name: "rogues events"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=honeypot",
- name: "honeypot aps"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=rogue",
- name: "rogues aps"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=spoof",
- name: "spoof aps"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=others",
- name: "others aps"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues/clients?limit=100&duration=1d",
- name: "rogues clients"
- })
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SITE SWITCH CONF FUNCTION
- forgeSiteSwitchConfig(host: string): void {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/setting/derived",
- name: "switchconfig"
- })
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SITE DEVICE LAST CONFIG FUNCTION
- forgeSiteApLastConfig(host: string, device_type: string): void {
- const mac = this.getMac(this.obj_id)
- if (device_type == "ap" && mac) {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/devices/last_config/search?" + device_type + "=" + mac,
- name: "Last Config"
- })
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// ORG OBJ FUNCTION
- forgeOrg(host: string) {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/setting",
- name: "org setting"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/stats",
- name: "org stats"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/ssos",
- name: "org ssos"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/webhooks",
- name: "org webhooks"
- })
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SITE ASSETS FUNCTION
-
- forgeAsset(host: string, mac: string): void {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/zones/visits/search?duration=1d&interval=3600&user_type=asset&scope=zone&user=" + mac,
- name: "asset zones visits"
- })
- }
-
- forgeSiteAssetStats(obj_name: string, host: string, detail: string, extra_param: string = null): void {
- let url = "";
- if (detail && detail != "new") {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/" + obj_name + "/" + this.obj_id;
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
- } else {
- // set QUICK LINK
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/assets";
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: "ASSETS STATS" });
-
- url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/discovered_assets";
- if (extra_param) url += "?" + extra_param;
- this.quick_links.push({ url: url, name: "DISCOVERED ASSETS STATS" });
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SITE OBJ FUNCTION
- forgeSite(host: string, detail: string, extra_params: string = null): void {
- if (extra_params) {
- extra_params = "?" + extra_params;
- } else {
- extra_params = "";
- }
- if (detail == "site") {
- this.obj_name = "site"
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id,
- name: "site info"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/setting",
- name: "site setting"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats" + extra_params,
- name: "site stats"
- }, {
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/devices/events/search" + extra_params,
- name: "site devices events"
- })
- } else {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/sites",
- name: "sites"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/sites/search",
- name: "site configs"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/sitegroups",
- name: "site groups"
- })
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// MIST EDGE FUNCTION
- forgeEdge(host: string, detail: string): void {
- if (detail == "edgedetail") {
- this.obj_name = "mxedge";
- this.forgeOrgObject("mxedges", host, detail);
- this.forgeOrgObjectStats("mxedges", host, detail);
- this.forgeSiteObjectEvents("mxedges", "mxedge", host, detail);
- } else if (detail == "clusterdetail") {
- this.obj_name = "mxcluster";
- this.forgeOrgObject("mxclusters", host, detail);
- } else {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/mxedges",
- name: "mxedges"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/mxclusters",
- name: "mxclusters"
- })
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// DISCOVERED SWITCHES FUNCTION
- forgeSiteDiscoveredSwitchUrl(host: string, mac: string = null): void {
- if (mac) {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/discovered_switches/search?system_name=" + mac,
- name: "discovered switch"
- })
- } else if (!this.obj_id) {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/discovered_switches/search",
- name: "discovered switches"
- })
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// ORG SLE FUNCTION
- forgeOrgSlehUrl(host: string, scope: string, sle: string, worstsle: string = null, extra_params: string = null): void {
- /*
- host: mist.com, eu.mist.com, gc1.mist.com
- scope: wifi, wire, wan
- */
- if (!worstsle || worstsle == "-") worstsle = sle;
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/insights/sites-sle?sle=" + scope + "&" + extra_params,
- name: scope + " Org SLEs"
- }, {
- url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/insights/worst-sites-by-sle?sle=" + worstsle + "&" + extra_params,
- name: "Worst sites by " + worstsle
- });
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SLE FUNCTION
- forgeSlehUrl(host: string, scope: string, site_id: string, scope_id: string, sles: string[], extra_params: string = null): void {
- /*
- host: mist.com, eu.mist.com, gc1.mist.com
- scope: wifi, wire, wan
- */
- sles.forEach(sle => {
- this.quick_links.push({
- url: "https://api." + host + "/api/v1/sites/" + site_id + "/sle/" + scope + "/" + scope_id + "/metric/" + sle + "/summary-trend?" + extra_params,
- name: sle + " " + scope + " SLE"
- });
- })
- }
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// BASE URL FUNCTION DISPATCHER
-
- baseUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// COMMON URL FUNCTION DISPATCHER
- commonUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- let extra_params = null
- const uuid_re = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
- if (res.groups.host && res.groups.org_id && res.groups.obj) {
- this.obj_id = res.groups.obj_id;
- this.site_id = res.groups.site_id;
- switch (res.groups.obj.toLowerCase()) {
- // SITE
- case "ap":
- case "gateway":
- this.setName(res.groups.obj, res.groups.detail);
- if (!res.groups.details) extra_params = "type=" + res.groups.obj;
- this.forgeSiteObject("devices", res.groups.host, res.groups.detail, extra_params);
- this.forgeSiteObjectStats("devices", res.groups.host, res.groups.detail, extra_params);
- this.forgeSiteObjectEvents("devices", res.groups.obj, res.groups.host, res.groups.detail);
- this.forgeSiteApLastConfig(res.groups.host, res.groups.obj);
- break;
- case "switch":
- const is_uuid = uuid_re.test(this.obj_id)
- if (this.obj_id && !is_uuid) {
- this.obj_name = "discoveredswitch";
- this.setName("discoveredswitch", "detail");
- this.forgeSiteDiscoveredSwitchUrl(res.groups.host, this.obj_id);
- } else {
- this.setName(res.groups.obj, res.groups.detail);
- if (!res.groups.details) extra_params = "type=" + res.groups.obj;
- this.forgeSiteObject("devices", res.groups.host, res.groups.detail, extra_params);
- this.forgeSiteObjectStats("devices", res.groups.host, res.groups.detail, extra_params);
- this.forgeSiteObjectEvents("devices", res.groups.obj, res.groups.host, res.groups.detail);
- this.forgeSiteDiscoveredSwitchUrl(res.groups.host);
- }
- break;
- case "assets":
- // need to retrieve the asset ID to generate the detail request
- if (!res.groups.detail) {
- this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
- this.forgeSiteObject(res.groups.obj, res.groups.host, res.groups.detail);
- this.forgeSiteAssetStats(res.groups.obj, res.groups.host, res.groups.detail);
- } else {
- this.forgeAsset(res.groups.host, this.org_id)
- }
- break;
- case "wlan":
- this.setName(res.groups.obj, res.groups.detail);
- this.forgeSiteObject("wlans", res.groups.host, res.groups.detail);
- break;
- case "tags":
- this.setName("wxtag", res.groups.detail);
- this.forgeSiteObject("wxtags", res.groups.host, res.groups.detail);
- break;
- case "psk":
- this.setName(res.groups.obj, res.groups.detail);
- this.forgeSiteObject("psks", res.groups.host, res.groups.detail);
- break;
- // case "siteedge":
- // this.forgeSiteObject(res.groups, "mxedges", null);
- // this.forgeSiteObjectStats(res.groups, "mxedges", null);
- // break;
- case "tunnels":
- this.setName("wxtunnel", res.groups.detail);
- this.forgeSiteObject("wxtunnels", res.groups.host, res.groups.detail);
- this.forgeSiteObjectStats("wxtunnels", res.groups.host, res.groups.detail);
- break;
- case "clients":
- case "sdkclients":
- this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
- this.forgeSiteObjectSearch(res.groups.obj, res.groups.host, res.groups.detail);
- this.forgeSiteObjectStats(res.groups.obj, res.groups.host, res.groups.detail);
- break;
- case "wiredclients":
- this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
- this.forgeSiteObjectSearch("wired_clients", res.groups.host, res.groups.detail);
- break;
- case "wxlan":
- this.setName("wxrule", res.groups.detail);
- this.forgeSiteObject("wxrules", res.groups.host, res.groups.detail);
- this.forgeSiteObjectStats("wxrules", res.groups.host, res.groups.detail,);
- break;
- case "security":
- this.forgeSiteSecurity(res.groups.host)
- break;
- case "switchconfig":
- this.setName("switchconfig", res.groups.detail);
- this.forgeSiteSwitchConfig(res.groups.host);
- break;
- case "pcap":
- this.setName(res.groups.obj, res.groups.detail);
- this.forgeSiteObject("pcaps", res.groups.host, res.groups.detail);
- break;
- // ORG
- case "orgtags":
- this.setName("wxtag", res.groups.detail);
- this.forgeOrgObject("wxtags", res.groups.host, res.groups.detail);
- break;
- case "orgpsk":
- this.setName("org psk", res.groups.detail);
- this.forgeOrgObject("psks", res.groups.host, res.groups.detail);
- break;
- case "misttunnels":
- this.setName("mxtunnel", res.groups.detail);
- this.forgeOrgObject("mxtunnels", res.groups.host, res.groups.detail);
- break;
- case "switchtemplate":
- this.setName(res.groups.obj, res.groups.detail);
- this.forgeOrgObject("networktemplates", res.groups.host, res.groups.detail);
- break;
- case "deviceprofiles":
- this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
- this.forgeOrgObject("deviceprofiles", res.groups.host, res.groups.detail);
- break;
- case "org":
- this.setName("org", res.groups.detail);
- this.forgeOrg(res.groups.host);
- break;
- case "configuration":
- this.setName("site", res.groups.detail);
- this.forgeSite(res.groups.host, res.groups.detail);
- break;
- case "rftemplates":
- case "templates":
- this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
- this.forgeOrgObject(res.groups.obj, res.groups.host, res.groups.detail);
- break;
- case "auditlogs":
- this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
- this.forgeOrgObject("logs", res.groups.host, res.groups.detail);
- break;
- case "apinventory":
- this.obj_name = "APs inventory";
- this.forgeOrgObject("inventory", res.groups.host, res.groups.detail, "type=ap");
- this.obj_name = "Switches inventory";
- this.forgeOrgObject("inventory", res.groups.host, res.groups.detail, "type=switch");
- this.obj_name = "Gateways inventory";
- this.forgeOrgObject("inventory", res.groups.host, res.groups.detail, "type=gateway");
- break;
- case "adminconfig":
- this.setName("admin", res.groups.detail);
- this.forgeOrgObject("admins", res.groups.host, res.groups.detail);
- break;
-
- case "subscription":
- this.setName(res.groups.obj, res.groups.detail);
- this.forgeOrgObject("licenses", res.groups.host, res.groups.detail);
- break;
- case "edge":
- this.setName("mxedge", res.groups.detail);
- this.forgeEdge(res.groups.host, res.groups.detail)
- break;
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// ALARM URL FUNCTION DISPATCHER
- alarmUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- let extra_params = "";
- let severity_array = [];
- let scope = "";
- let scope_id = "";
- if (res.groups.scope == "org") {
- scope = "orgs";
- scope_id = res.groups.org_id;
- } else {
- if (res.groups.site_id) {
- this.site_id = res.groups.site_id;
- } else {
- this.site_id = res.groups.uuid;
- }
- scope = "sites";
- scope_id = this.site_id;
- }
- if (res.groups.start && res.groups.stop) {
- extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
- }
- if (res.groups.show_crit && res.groups.show_crit == "true") severity_array.push("critical")
- if (res.groups.show_warn && res.groups.show_warn == "true") severity_array.push("warn")
- if (res.groups.show_info && res.groups.show_info == "true") severity_array.push("info")
- if (severity_array.length > 0) extra_params += "&severity=" + severity_array.join(",")
- else extra_params += "&severity=none"
-
- if (res.groups.group && res.groups.group != "any%20type") extra_params += "&group=" + res.groups.group;
-
- if (res.groups.show_ack && res.groups.show_ack == "false") extra_params += "&acked=false";
-
- this.quick_links.push({
- url: "https://api." + res.groups.host + "/api/v1/" + scope + "/" + scope_id + "/alarms/search?" + extra_params,
- name: scope + " Alarms"
- }, {
- url: "https://api." + res.groups.host + "/api/v1/" + scope + "/" + scope_id + "/alarms/count?" + extra_params,
- name: scope + " Alarms count"
- }, {
- url: "https://api." + res.groups.host + "/api/v1/orgs/" + this.org_id + "/alarmtemplates",
- name: " Alarms Templates"
- }, {
- url: "https://api." + res.groups.host + "/api/v1/const/alarm_defs",
- name: " Alarms Definitions"
- });
- }
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// EVENTS URL FUNCTION DISPATCHER
- eventsUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- let extra_params = "";
- if (res.groups.site_id) {
- this.site_id = res.groups.site_id;
- } else {
- this.site_id = res.groups.uuid;
- }
-
- if (res.groups.start && res.groups.stop) {
- extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
- }
-
- this.quick_links.push({
- url: "https://api." + res.groups.host + "/api/v1/sites/" + this.site_id + "/insights/marvis?" + extra_params,
- name: "Site Events"
- })
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// EVENTS URL FUNCTION DISPATCHER
- floorplansUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- if (res.groups.site_id) {
- this.site_id = res.groups.site_id;
- this.obj_id = res.groups.uuid;
- } else {
- this.site_id = res.groups.uuid;
- }
-
- this.setName("floor plan", res.groups.detail);
- this.forgeSiteObject("maps", res.groups.host, res.groups.detail);
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// INSIGHTS URL FUNCTION DISPATCHER
- insightsUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- this.site_id = res.groups.site_id;
- this.obj_id = res.groups.obj_id;
- let extra_params = null;
- if (res.groups.start && res.groups.stop) {
- extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
- }
- if (res.groups.host && res.groups.org_id) {
- switch (res.groups.obj) {
- case "device":
- this.setName("ap", "insights");
- this.forgeSiteObject("devices", res.groups.host, "detail");
- this.forgeSiteObjectStats("devices", res.groups.host, "detail", extra_params);
- this.forgeSiteObjectEvents("devices", "ap", res.groups.host, "detail", extra_params);
- this.forgeSiteApLastConfig(res.groups.host, 'ap');
- break;
- case "client":
- this.setName("client", "insights");
- this.forgeSiteObjectSearch("clients", res.groups.host, "detail");
- this.forgeSiteObjectStats("clients", res.groups.host, "detail", extra_params);
- this.forgeSiteObjectEvents("clients", null, res.groups.host, "detail", extra_params);
- break;
- case "juniperSwitch":
- this.setName("switch", "insights");
- this.forgeSiteObject("devices", res.groups.host, "detail");
- this.forgeSiteObjectStats("devices", res.groups.host, "detail", extra_params);
- this.forgeSiteObjectEvents("devices", "switch", res.groups.host, "detail", extra_params);
- break;
- case "juniperGateway":
- this.setName("gateway", "insights");
- this.forgeSiteObject("devices", res.groups.host, "detail");
- this.forgeSiteObjectStats("devices", res.groups.host, "detail", extra_params);
- this.forgeSiteObjectEvents("devices", "gateway", res.groups.host, "detail", extra_params);
- break;
- case "wiredClient":
- this.setName("wired client", "insights");
- this.forgeSiteObjectSearch("wired_clients", res.groups.host, "detail", extra_params);
- this.forgeSiteObjectEvents("wired_clients", null, res.groups.host, "detail", extra_params);
- break;
- case "edge":
- this.setName("mxedge", "insights");
- this.forgeOrgObject("mxedges", res.groups.host, "detail");
- this.forgeOrgObjectStats("mxedges", res.groups.host, "detail", extra_params);
- this.forgeOrgObjectEvents("mxedges", res.groups.host, "detail", extra_params);
- break;
- case "site":
- case undefined:
- this.setName("site", "insights");
- this.forgeSite(res.groups.host, extra_params);
- break;
- }
- }
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// ORG SLE URL FUNCTION DISPATCHER
-
- orgSleUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- let extra_params = null;
- if (res.groups.start && res.groups.stop) {
- extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
- }
- if (res.groups.host && res.groups.org_id) {
- switch (res.groups.scope) {
- case "siteComparison":
- this.forgeOrgSlehUrl(res.groups.host, "wifi", res.groups.sle, res.groups.worstsle, extra_params);
- break;
- case "wiredSiteComparison":
- this.forgeOrgSlehUrl(res.groups.host, "wired", res.groups.sle, res.groups.worstsle, extra_params);
- break;
- case "wanSiteComparison":
- this.forgeOrgSlehUrl(res.groups.host, "wan", res.groups.sle, res.groups.worstsle, extra_params);
- break;
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////// SLE URL FUNCTION DISPATCHER
-
- sleUrl(res: RegExpExecArray): void {
- this.org_id = res.groups.org_id;
- this.site_id = res.groups.site_id;
- let extra_params = null;
- let scope = "";
- if (res.groups.scope != "site") {
- this.setName(res.groups.scope, "sle");
- this.obj_id = res.groups.scope_id;
- }
- if (res.groups.scope == "juniperSwitch") {
- scope = "switch";
- } else if (res.groups.scope == "juniperGateway") {
- scope = "gateway";
- } else if (res.groups.scope == "device") {
- scope = "ap";
- } else {
- scope = res.groups.scope;
- }
- if (res.groups.start && res.groups.stop) {
- extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
- }
- if (res.groups.host && res.groups.org_id) {
- let sles: string[] = []
- switch (res.groups.detail) {
- case "serviceLevels":
- sles = [
- "time-to-connect",
- "failed-to-connect",
- "roaming",
- "throughput",
- "coverage",
- "capacity",
- "ap-availability"
- ]
- break;
- case "wiredServiceLevels":
- sles = [
- "switch-stc",
- "switch-health",
- "switch-throughput"
- ]
- break;
- case "wanServiceLevels":
- sles = [
- "gateway-health",
- "wan-link-health"
- ]
- break;
- }
- this.forgeSlehUrl(res.groups.host, scope, res.groups.site_id, res.groups.scope_id, sles, extra_params)
- }
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- // OTHER FUNCTIONS
- ////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////
- openApiTab(url: string) {
- chrome.tabs.create({ url: url });
- }
-
- copyId(inputElement: HTMLInputElement): void {
- this.focused = inputElement.id;
- inputElement.select();
- document.execCommand('copy');
- setTimeout(() => {
- this.focused = "";
- this._cd.detectChanges()
- }, 100);
- inputElement.setSelectionRange(0, 0);
+ let host = this.tabUrl.split("/")[2]
+ if (this.hosts_manage.indexOf(host) > -1) this.display = "manage"
+ else if (this.hosts_api.indexOf(host) > -1 && this.tabUrl.indexOf("/api/v1/docs") < 0) this.display = "django"
}
- openTab(target: string) {
- let dest_url = ""
- switch (target) {
- case "openapi":
- dest_url = "https://doc.mist-lab.fr";
- break;
- case "postman":
- dest_url = "https://documenter.getpostman.com/view/224925/SzYgQufe";
- break;
- case "mist":
- dest_url = "https://api.mist.com/api/v1/docs";
- break;
- }
- if (dest_url) {
- chrome.tabs.create({ url: dest_url });
- }
+ openTab() {
+ chrome.tabs.create({ url: "https://github.com/tmunzer/mist_chrome_extension/issues/new" })
}
}
diff --git a/src/angular/src/app/pages/api/django/api.django.component.scss b/src/angular/src/app/pages/api/django/api.django.component.scss
new file mode 100644
index 0000000..05acef9
--- /dev/null
+++ b/src/angular/src/app/pages/api/django/api.django.component.scss
@@ -0,0 +1,147 @@
+// GRID
+.grid-wrapper {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ justify-items: stretch;
+ align-items: stretch;
+ justify-content: center;
+}
+
+.grid-item {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: stretch;
+ font-weight: 100;
+ margin: .2em .5em;
+ width: 150px;
+}
+
+// LINKS
+.doc-link {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-start;
+ font-size: smaller;
+ background-color: white;
+ border: 1px solid #eee;
+ box-shadow: rgb(0 0 0 / 10%) 0px 1px 3px 0px, rgb(0 0 0 / 6%) 0px 1px 2px 0px;
+ cursor: pointer;
+ margin: 1em 0;
+ transition: all 0.2s ease-in-out;
+}
+
+.doc-link:hover {
+ transition: all 0.2s ease-in-out;
+}
+
+.doc-link .operation {
+ color: black;
+ font-weight: 200;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ font-size: small;
+ padding: 0 0.5em;
+}
+
+.doc-link .operation img {
+ color: gray;
+ height: 1.5em;
+ margin: 0.5em;
+ filter: invert(100%) sepia(0) saturate(1352%) hue-rotate(0deg) brightness(10%) contrast(0);
+}
+
+.operationId {
+ width: 14em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: gray;
+ text-align: start;
+}
+
+.method {
+ margin: 0.5em;
+ padding: 0.5em;
+ width: 6em;
+ font-weight: 500;
+ border-radius: 0.5em;
+ text-align: center;
+}
+
+.get {
+ color: green;
+ border: 1px solid green;
+}
+
+.post {
+ color: blue;
+ border: 1px solid blue;
+}
+
+.put {
+ color: orange;
+ border: 1px solid orange;
+}
+
+.delete {
+ color: red;
+ border: 1px solid red;
+}
+
+////// INPUT
+.help.icon {
+ filter: invert(100%) sepia(0) saturate(1352%) hue-rotate(0deg) brightness(10%) contrast(0);
+ height: 15px;
+ margin-left: 1px;
+}
+
+input {
+ border: 1px solid lightgray;
+ padding: 5px 0 5px 5px;
+ margin: 2px 0;
+}
+
+select:focus,
+input:focus {
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px 0 rgb(0 0 0 / 6%);
+}
+
+.ng-untouched {
+ color: gray;
+}
+
+select {
+ width: 100%;
+ padding: 4px;
+ border: 1px solid lightgray;
+ margin: 2px 0;
+}
+
+// BUTTON
+button.update {
+ background-color: #84b035;
+ color: white;
+ box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;
+ transition: background-color 0.2s ease-in-out;
+ cursor: pointer;
+ width: 100%;
+ margin: 1em 0;
+}
+
+button.update:enabled:hover {
+ background-color: #649015;
+}
+
+// tooltip
+.tooltip .tooltiptext {
+ top: 100%;
+ left: -30%;
+}
\ No newline at end of file
diff --git a/src/angular/src/app/pages/api/django/django.component.html b/src/angular/src/app/pages/api/django/django.component.html
new file mode 100644
index 0000000..067ad78
--- /dev/null
+++ b/src/angular/src/app/pages/api/django/django.component.html
@@ -0,0 +1,106 @@
+
+
+
Query Parameters
+
0">
+
+ Update URL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This API call doesn't not support any query parameters.
+
+
+
+
Documentation
+
+ GET
+
+
+ {{docs.get.operationId}}
+
+
+
+
+
+ POST
+
+
+ {{docs.post.operationId}}
+
+
+
+
+
+ PUT
+
+
+ {{docs.put.operationId}}
+
+
+
+
+
+ DELETE
+
+
+ {{docs.delete.operationId}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/angular/src/app/pages/api/django/django.component.ts b/src/angular/src/app/pages/api/django/django.component.ts
new file mode 100644
index 0000000..aceb384
--- /dev/null
+++ b/src/angular/src/app/pages/api/django/django.component.ts
@@ -0,0 +1,152 @@
+import { group } from '@angular/animations';
+import { Component, Inject, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
+import { TAB_URL } from '../../../providers/tab-url.provider';
+import api_structure from './../../../../assets/api.json';
+
+export interface linkElement {
+ url: string,
+ name: string
+}
+
+@Component({
+ selector: 'app-api-django',
+ templateUrl: 'django.component.html',
+ styleUrls: ['api.django.component.scss', '../api.component.scss', '../../../app.component.scss'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ApiDjangoComponent implements OnInit {
+ message: string;
+ mist_url: string = "";
+
+ quick_links: linkElement[] = []
+
+ scope: string;
+ scope_id: string;
+ path_params = [];
+ query_params = [];
+ docs = {
+ "get": null,
+ "post": null,
+ "put": null,
+ "delete": null,
+ }
+ constructor(
+ @Inject(TAB_URL) readonly tabUrl: string,
+ private _cd: ChangeDetectorRef
+ ) { }
+
+
+ hosts = [
+ "api.mist.com",
+ "api.eu.mist.com",
+ "api.gc1.mist.com"
+ ]
+
+ doc_link = "https://doc.mist-lab.fr";
+
+ ngOnInit() {
+ const url = this.tabUrl.split("?");
+ const path = url[0].split("/");
+ const query = url[1];
+ let path_part = path.splice(3, path.length)
+ this.processPath(path_part, query);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // PÄTH FUNCTIONS
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ processPath(path_part: string[], query: string) {
+ let tmp = api_structure;
+ path_part.forEach(next_path => {
+ if ("paths" in tmp && next_path in tmp.paths) {
+ tmp = tmp.paths[next_path]
+
+ } else if ("paths" in tmp) {
+ let data;
+ for (let [key, val] of Object.entries(tmp.paths)) {
+ if (key.indexOf("{") == 0 && key.indexOf("}") == key.length - 1) {
+ data = val;
+ }
+ }
+ if (data) tmp = data;
+ else console.error("Not able to find the right entry for " + path_part.join("/"))
+
+ } else {
+ console.error("Not able to find the right entry for " + path_part.join("/"))
+ }
+ })
+
+
+ if ("specs" in tmp) {
+ ["get", "post", "put", "delete"].forEach(method => {
+ if (tmp["specs"][method]) {
+ this.docs[method] = {
+ operationId: tmp["specs"][method]["operationId"]
+ }
+ }
+ })
+ if (this.docs["get"]) {
+ this.processQuery(query, tmp["specs"]["get"]["parameters"])
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // QUERY FUNCTIONS
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ processQuery(query: string, specs) {
+ let query_key_value = {}
+ if (query) {
+ const query_parts = query.split("&")
+ query_parts.forEach(part => {
+ const splitted_part = part.split("=")
+ query_key_value[splitted_part[0]] = splitted_part[1]
+ })
+ }
+ if (specs) {
+ specs.forEach(spec => {
+ let data = {}
+ if ("in" in spec && spec["in"] == "query") data = spec
+ else if ("$ref" in spec && spec["$ref"]) {
+ const ref_parts = spec["$ref"].split("/")
+ data = api_structure[ref_parts[1]][ref_parts[2]][ref_parts[3]]
+
+ }
+ data["value"] = query_key_value[data["name"]]
+ this.query_params.push(data)
+ })
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // OTHER FUNCTIONS
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ updateUrl() {
+ let url = this.tabUrl.split("?")[0]
+ let query = []
+ this.query_params.forEach(param => {
+ if (param.value != undefined) query.push(param.name + "=" + param.value)
+ })
+ if (query.length > 0) url = url + "?" + query.join("&")
+ chrome.tabs.update(undefined, { url: url });
+ }
+
+ // open a new tab with the url passed in parameter
+ openApiTab(url: string) {
+ chrome.tabs.create({ url: url });
+ }
+
+
+ openDoc(operation: string) {
+ chrome.tabs.create({ url: this.doc_link + "/#operation/" + operation })
+ }
+
+}
diff --git a/src/angular/src/app/pages/api/manage/manage.component.html b/src/angular/src/app/pages/api/manage/manage.component.html
new file mode 100644
index 0000000..f319653
--- /dev/null
+++ b/src/angular/src/app/pages/api/manage/manage.component.html
@@ -0,0 +1,46 @@
+
+
Page Info
+
+
Sorry, this website does not look like a Mist Dashboard...
+
If you think I'm wrong, please send me an email with the current URL.
+
+
+
+
+
+
+
+
+
+
+ 0" class="content no-grow">
+
Quick API Access
+
+
+ {{quick_link.name | uppercase}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/angular/src/app/pages/api/manage/manage.component.ts b/src/angular/src/app/pages/api/manage/manage.component.ts
new file mode 100644
index 0000000..b3d6789
--- /dev/null
+++ b/src/angular/src/app/pages/api/manage/manage.component.ts
@@ -0,0 +1,876 @@
+import { group } from '@angular/animations';
+import { escapeIdentifier } from '@angular/compiler/src/output/abstract_emitter';
+import { Component, Inject, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
+import { TAB_URL } from '../../../providers/tab-url.provider';
+
+export interface linkElement {
+ url: string,
+ name: string
+}
+
+@Component({
+ selector: 'app-api-manage',
+ templateUrl: 'manage.component.html',
+ styleUrls: ['../api.component.scss'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ApiManageComponent implements OnInit {
+ message: string;
+ mist_url: string = "";
+
+ quick_links: linkElement[] = []
+
+ org_id: string = "";
+ site_id: string = "";
+ obj_id: string = "";
+ obj_name: string = "";
+ focused: string = "";
+
+ constructor(
+ @Inject(TAB_URL) readonly tabUrl: string,
+ private _cd: ChangeDetectorRef
+ ) { }
+
+
+ hosts = [
+ "manage.mist.com",
+ "integration.mist.com",
+ "manage.eu.mist.com",
+ "manage.gc1.mist.com"
+ ]
+
+ external_links = {
+ doc: "https://doc.mist-lab.fr",
+ postman: "https://documenter.getpostman.com/view/224925/SzYgQufe",
+ mist: "https://api.mist.com/api/v1/docs"
+ }
+
+ ngOnInit() {
+ this.generateApiUrl()
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // API URL ENTRYPOINT
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // API URL ENTRYPOINT
+ generateApiUrl() {
+ console.log(this.tabUrl)
+ const orgsle_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!dashboard\/(?siteComparison|wiredSiteComparison|wanSiteComparison)\/(?[a-z-]*)\/(?[a-z-]*)\/([a-z-_]*)\/(?[0-9a-z-]*)\/(?[0-9]*)\/(?[0-9]*)/iys;
+ const sle_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!dashboard\/(?serviceLevels|wiredserviceLevels|wanserviceLevels)\/(?[a-z-]*)\/(?[a-f0-9-]*)\/(?[0-9a-z-]*)\/(?[0-9]*)\/(?[0-9]*)\/(?[a-f0-9-]*)/iys;
+ const insights_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!dashboard\/insights\/((?[a-z]+)\/)?((?[a-z0-9-]+)\/)((?[a-z0-9]+)\/)?((?[0-9]*)\/)?((?[0-9]*)\/)?(?[0-9a-f-]*)?/iys;
+ const alarm_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!alerts\/?(?org|site)?\/?(?[0-9a-z-]*)\/?(?[0-9a-z]*)?\/?(?[0-9]*)?\/?(?[0-9]*)?\/?(?true|false)?\/?(?[a-z%0-9]*)?\/?(?true|false)?\/?(?true|false)?\/?(?true|false)?\/?(?[0-9a-z-]*)?/iys;
+ const events_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!marvis\/?(?org|site)?\/?(?[0-9a-z]*)?\/?(?[0-9]*)?\/?(?[0-9]*)?\/?(?[0-9a-z-]*)?/iys;
+ const templates_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!(?template|rfTemplate)\/(?template|rfTemplate)\/(?[0-9a-z_-]*)/yis;
+ const floorplans_re = /https:\/\/manage\.(?[a-z0-1.]*mist\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!cliLocation\/(?view|config|validationPath|wayfinding)?\/?(?[0-9a-f-]*)\/?(floorplan|beaconsAndZones)?\/?(?[0-9a-f-]*)?/iys;
+ const common_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!(?[a-z]+)\/?((?detail|site|admin|edgedetail|clusterdetail|new|view)\/)?([0-9]\/)?((?[0-9a-z_-]*)\/)?(?[0-9a-f-]*)?/yis;
+ const common_objs = ["ap", "gateway", "switch", "assets", "wlan", "tags", "psk", "tunnels", "clients", "sdkclients", "wiredclients", "wxlan", "security", "switchconfig", "pcap", "orgtags", "misttunnels", "switchtemplate", "deviceprofiles", "org", "orgpsk", "configuration", "rftemplates", "templates", "auditlogs", "apinventory", "adminconfig", "subscription", "edge"]
+ const base_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!/yis;
+
+ const orgsle = orgsle_re.exec(this.tabUrl);
+ const sle = sle_re.exec(this.tabUrl);
+ const insights = insights_re.exec(this.tabUrl);
+ const alarm = alarm_re.exec(this.tabUrl);
+ const events = events_re.exec(this.tabUrl);
+ const templates = templates_re.exec(this.tabUrl);
+ const floorplans = floorplans_re.exec(this.tabUrl);
+ const common = common_re.exec(this.tabUrl);
+ const base = base_re.exec(this.tabUrl);
+
+ if (orgsle) {
+ this.orgSleUrl(orgsle);
+ } else if (sle) {
+ this.sleUrl(sle);
+ } else if (insights) {
+ this.insightsUrl(insights);
+ } else if (alarm) {
+ this.alarmUrl(alarm);
+ } else if (events) {
+ this.eventsUrl(events);
+ } else if (templates) {
+ this.commonUrl(templates);
+ } else if (floorplans) {
+ this.floorplansUrl(floorplans);
+ } else if (common && common["groups"] && common_objs.includes(common["groups"]["obj"].toLowerCase())) {
+ this.commonUrl(common);
+ } else if (base) {
+ this.baseUrl(base);
+ }
+ this._cd.detectChanges()
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // API URL
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+
+
+ ////////////////////// MAC
+ getMac(uuid: string): string {
+ const splitted_uuid = uuid.split("-");
+ return splitted_uuid[splitted_uuid.length - 1];
+ }
+
+ setName(obj_name: string, detail: string) {
+ if (detail && detail != "new") {
+ this.obj_name = obj_name
+ } else {
+ if (["switch"].includes(obj_name)) {
+ this.obj_name = "switches";
+ } else {
+ this.obj_name = obj_name + "s";
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// COMMON ORG FUNCTIONS
+ forgeOrgObject(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name + "/" + this.obj_id;
+ this.quick_links.push({ url: url, name: this.obj_name });
+ } else {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name;
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name });
+ }
+ }
+
+ forgeOrgObjectStats(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/stats/" + obj_name + "/" + this.obj_id;
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
+ }
+ }
+
+
+ forgeOrgObjectEvents(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // MAC
+ const mac = this.getMac(this.obj_id);
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name + "/events/search?limit=1000&mac=" + mac;
+ if (!extra_param) {
+ url += "&duration=1d";
+ } else {
+ url += "&" + extra_param;
+ }
+ this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" });
+ } else {
+ url = "https://api." + host + "/api/v1/orgs/" + this.org_id + "/" + obj_name + "/events/search?limit=1000&device_type=" + obj_name;
+ if (!extra_param) {
+ url += "&duration=1d";
+ } else {
+ url += "&" + extra_param;
+ }
+ this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" });
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// COMMON SITE FUNCTIONS
+ forgeSiteObject(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/" + this.obj_id;
+ this.quick_links.push({ url: url, name: this.obj_name });
+ if (["switch", "gateway"].includes(this.obj_name)) {
+ this.quick_links.push({ url: url + "/config_cmd", name: this.obj_name + " CMDS" });
+ }
+ } else {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name;
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name });
+ }
+ }
+
+ forgeSiteObjectSearch(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/search?mac=" + this.obj_id;
+ this.quick_links.push({ url: url, name: this.obj_name });
+ } else {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/search";
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name });
+ }
+ }
+
+ forgeSiteObjectStats(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/" + obj_name + "/" + this.obj_id;
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
+ } else {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/" + obj_name;
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
+ }
+ }
+
+ forgeSiteObjectEvents(obj_name: string, device_type: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // MAC
+ const mac = this.getMac(this.obj_id);
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/events/search?limit=1000&mac=" + mac;
+ if (!extra_param) {
+ url += "&duration=1d";
+ } else {
+ url += "&" + extra_param;
+ }
+ this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" })
+ } else {
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/" + obj_name + "/events/search?limit=1000";
+ if (device_type) {
+ url += "&device_type=" + device_type;
+ }
+ if (!extra_param) {
+ url += "&duration=1d";
+ } else {
+ url += "&" + extra_param;
+ }
+ this.quick_links.push({ url: url, name: this.obj_name + " EVENTS" });
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SITE SECURITY FUNCTION
+ forgeSiteSecurity(host: string): void {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/rogues/events/search?limit=100&duration=1d",
+ name: "rogues events"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=honeypot",
+ name: "honeypot aps"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=rogue",
+ name: "rogues aps"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=spoof",
+ name: "spoof aps"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues?limit=100&duration=1d&type=others",
+ name: "others aps"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/insights/rogues/clients?limit=100&duration=1d",
+ name: "rogues clients"
+ })
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SITE SWITCH CONF FUNCTION
+ forgeSiteSwitchConfig(host: string): void {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/setting/derived",
+ name: "switchconfig"
+ })
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SITE DEVICE LAST CONFIG FUNCTION
+ forgeSiteApLastConfig(detail, host: string, device_type: string): void {
+ if (detail) {
+ const mac = this.getMac(this.obj_id)
+ if (device_type == "ap" && mac) {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/devices/last_config/search?" + device_type + "=" + mac,
+ name: "Last Config"
+ })
+ }
+ }
+ }
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// ORG OBJ FUNCTION
+ forgeOrg(host: string) {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/setting",
+ name: "org setting"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/stats",
+ name: "org stats"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/ssos",
+ name: "org ssos"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/webhooks",
+ name: "org webhooks"
+ })
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SITE ASSETS FUNCTION
+
+ forgeAsset(host: string, mac: string): void {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/zones/visits/search?duration=1d&interval=3600&user_type=asset&scope=zone&user=" + mac,
+ name: "asset zones visits"
+ })
+ }
+
+ forgeSiteAssetStats(obj_name: string, host: string, detail: string, extra_param: string = null): void {
+ let url = "";
+ if (detail && detail != "new") {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/" + obj_name + "/" + this.obj_id;
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: this.obj_name + " STATS" });
+ } else {
+ // set QUICK LINK
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/assets";
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: "ASSETS STATS" });
+
+ url = "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/discovered_assets";
+ if (extra_param) url += "?" + extra_param;
+ this.quick_links.push({ url: url, name: "DISCOVERED ASSETS STATS" });
+ }
+ }
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SITE OBJ FUNCTION
+ forgeSite(host: string, detail: string, extra_params: string = null): void {
+ if (extra_params) {
+ extra_params = "?" + extra_params;
+ } else {
+ extra_params = "";
+ }
+ if (detail == "site") {
+ this.obj_name = "site"
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id,
+ name: "site info"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/setting",
+ name: "site setting"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats" + extra_params,
+ name: "site stats"
+ }, {
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/devices/events/search" + extra_params,
+ name: "site devices events"
+ })
+ } else {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/sites",
+ name: "sites"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/sites/search",
+ name: "site configs"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/sitegroups",
+ name: "site groups"
+ })
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// MIST EDGE FUNCTION
+ forgeEdge(host: string, detail: string): void {
+ if (detail == "edgedetail") {
+ this.obj_name = "mxedge";
+ this.forgeOrgObject("mxedges", host, detail);
+ this.forgeOrgObjectStats("mxedges", host, detail);
+ this.forgeSiteObjectEvents("mxedges", "mxedge", host, detail);
+ } else if (detail == "clusterdetail") {
+ this.obj_name = "mxcluster";
+ this.forgeOrgObject("mxclusters", host, detail);
+ } else {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/mxedges",
+ name: "mxedges"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/mxclusters",
+ name: "mxclusters"
+ })
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// DISCOVERED SWITCHES FUNCTION
+ forgeSiteDiscoveredSwitchUrl(host: string, mac: string = null): void {
+ if (mac) {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/discovered_switches/search?system_name=" + mac,
+ name: "discovered switch"
+ })
+ } else if (!this.obj_id) {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + this.site_id + "/stats/discovered_switches/search",
+ name: "discovered switches"
+ })
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// ORG SLE FUNCTION
+ forgeOrgSlehUrl(host: string, scope: string, sle: string, worstsle: string = null, extra_params: string = null): void {
+ /*
+ host: mist.com, eu.mist.com, gc1.mist.com
+ scope: wifi, wire, wan
+ */
+ if (!worstsle || worstsle == "-") worstsle = sle;
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/insights/sites-sle?sle=" + scope + "&" + extra_params,
+ name: scope + " Org SLEs"
+ }, {
+ url: "https://api." + host + "/api/v1/orgs/" + this.org_id + "/insights/worst-sites-by-sle?sle=" + worstsle + "&" + extra_params,
+ name: "Worst sites by " + worstsle
+ });
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SLE FUNCTION
+ forgeSlehUrl(host: string, scope: string, site_id: string, scope_id: string, sles: string[], extra_params: string = null): void {
+ /*
+ host: mist.com, eu.mist.com, gc1.mist.com
+ scope: wifi, wire, wan
+ */
+ sles.forEach(sle => {
+ this.quick_links.push({
+ url: "https://api." + host + "/api/v1/sites/" + site_id + "/sle/" + scope + "/" + scope_id + "/metric/" + sle + "/summary-trend?" + extra_params,
+ name: sle + " " + scope + " SLE"
+ });
+ })
+ }
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// BASE URL FUNCTION DISPATCHER
+
+ baseUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// COMMON URL FUNCTION DISPATCHER
+ commonUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ let extra_params = null
+ const uuid_re = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
+ if (res.groups.host && res.groups.org_id && res.groups.obj) {
+ this.obj_id = res.groups.obj_id;
+ this.site_id = res.groups.site_id;
+ switch (res.groups.obj.toLowerCase()) {
+ // SITE
+ case "ap":
+ case "gateway":
+ this.setName(res.groups.obj, res.groups.detail);
+ if (!res.groups.details) extra_params = "type=" + res.groups.obj;
+ this.forgeSiteObject("devices", res.groups.host, res.groups.detail, extra_params);
+ this.forgeSiteObjectStats("devices", res.groups.host, res.groups.detail, extra_params);
+ this.forgeSiteObjectEvents("devices", res.groups.obj, res.groups.host, res.groups.detail);
+ this.forgeSiteApLastConfig(res.groups.detail, res.groups.host, res.groups.obj);
+ break;
+ case "switch":
+ const is_uuid = uuid_re.test(this.obj_id)
+ if (this.obj_id && !is_uuid) {
+ this.obj_name = "discoveredswitch";
+ this.setName("discoveredswitch", "detail");
+ this.forgeSiteDiscoveredSwitchUrl(res.groups.host, this.obj_id);
+ } else {
+ this.setName(res.groups.obj, res.groups.detail);
+ if (!res.groups.details) extra_params = "type=" + res.groups.obj;
+ this.forgeSiteObject("devices", res.groups.host, res.groups.detail, extra_params);
+ this.forgeSiteObjectStats("devices", res.groups.host, res.groups.detail, extra_params);
+ this.forgeSiteObjectEvents("devices", res.groups.obj, res.groups.host, res.groups.detail);
+ this.forgeSiteDiscoveredSwitchUrl(res.groups.host);
+ }
+ break;
+ case "assets":
+ // need to retrieve the asset ID to generate the detail request
+ if (!res.groups.detail) {
+ this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
+ this.forgeSiteObject(res.groups.obj, res.groups.host, res.groups.detail);
+ this.forgeSiteAssetStats(res.groups.obj, res.groups.host, res.groups.detail);
+ } else {
+ this.forgeAsset(res.groups.host, this.org_id)
+ }
+ break;
+ case "wlan":
+ this.setName(res.groups.obj, res.groups.detail);
+ this.forgeSiteObject("wlans", res.groups.host, res.groups.detail);
+ break;
+ case "tags":
+ this.setName("wxtag", res.groups.detail);
+ this.forgeSiteObject("wxtags", res.groups.host, res.groups.detail);
+ break;
+ case "psk":
+ this.setName(res.groups.obj, res.groups.detail);
+ this.forgeSiteObject("psks", res.groups.host, res.groups.detail);
+ break;
+ // case "siteedge":
+ // this.forgeSiteObject(res.groups, "mxedges", null);
+ // this.forgeSiteObjectStats(res.groups, "mxedges", null);
+ // break;
+ case "tunnels":
+ this.setName("wxtunnel", res.groups.detail);
+ this.forgeSiteObject("wxtunnels", res.groups.host, res.groups.detail);
+ this.forgeSiteObjectStats("wxtunnels", res.groups.host, res.groups.detail);
+ break;
+ case "clients":
+ case "sdkclients":
+ this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
+ this.forgeSiteObjectSearch(res.groups.obj, res.groups.host, res.groups.detail);
+ this.forgeSiteObjectStats(res.groups.obj, res.groups.host, res.groups.detail);
+ break;
+ case "wiredclients":
+ this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
+ this.forgeSiteObjectSearch("wired_clients", res.groups.host, res.groups.detail);
+ break;
+ case "wxlan":
+ this.setName("wxrule", res.groups.detail);
+ this.forgeSiteObject("wxrules", res.groups.host, res.groups.detail);
+ this.forgeSiteObjectStats("wxrules", res.groups.host, res.groups.detail,);
+ break;
+ case "security":
+ this.forgeSiteSecurity(res.groups.host)
+ break;
+ case "switchconfig":
+ this.setName("switchconfig", res.groups.detail);
+ this.forgeSiteSwitchConfig(res.groups.host);
+ break;
+ case "pcap":
+ this.setName(res.groups.obj, res.groups.detail);
+ this.forgeSiteObject("pcaps", res.groups.host, res.groups.detail);
+ break;
+ // ORG
+ case "orgtags":
+ this.setName("wxtag", res.groups.detail);
+ this.forgeOrgObject("wxtags", res.groups.host, res.groups.detail);
+ break;
+ case "orgpsk":
+ this.setName("org psk", res.groups.detail);
+ this.forgeOrgObject("psks", res.groups.host, res.groups.detail);
+ break;
+ case "misttunnels":
+ this.setName("mxtunnel", res.groups.detail);
+ this.forgeOrgObject("mxtunnels", res.groups.host, res.groups.detail);
+ break;
+ case "switchtemplate":
+ this.setName(res.groups.obj, res.groups.detail);
+ this.forgeOrgObject("networktemplates", res.groups.host, res.groups.detail);
+ break;
+ case "deviceprofiles":
+ this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
+ this.forgeOrgObject("deviceprofiles", res.groups.host, res.groups.detail);
+ break;
+ case "org":
+ this.setName("org", res.groups.detail);
+ this.forgeOrg(res.groups.host);
+ break;
+ case "configuration":
+ this.setName("site", res.groups.detail);
+ this.forgeSite(res.groups.host, res.groups.detail);
+ break;
+ case "rftemplates":
+ case "templates":
+ this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
+ this.forgeOrgObject(res.groups.obj, res.groups.host, res.groups.detail);
+ break;
+ case "auditlogs":
+ this.setName(res.groups.obj.substr(0, res.groups.obj.length - 1), res.groups.detail);
+ this.forgeOrgObject("logs", res.groups.host, res.groups.detail);
+ break;
+ case "apinventory":
+ this.obj_name = "APs inventory";
+ this.forgeOrgObject("inventory", res.groups.host, res.groups.detail, "type=ap");
+ this.obj_name = "Switches inventory";
+ this.forgeOrgObject("inventory", res.groups.host, res.groups.detail, "type=switch");
+ this.obj_name = "Gateways inventory";
+ this.forgeOrgObject("inventory", res.groups.host, res.groups.detail, "type=gateway");
+ break;
+ case "adminconfig":
+ this.setName("admin", res.groups.detail);
+ this.forgeOrgObject("admins", res.groups.host, res.groups.detail);
+ break;
+
+ case "subscription":
+ this.setName(res.groups.obj, res.groups.detail);
+ this.forgeOrgObject("licenses", res.groups.host, res.groups.detail);
+ break;
+ case "edge":
+ this.setName("mxedge", res.groups.detail);
+ this.forgeEdge(res.groups.host, res.groups.detail)
+ break;
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// ALARM URL FUNCTION DISPATCHER
+ alarmUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ let extra_params = "";
+ let severity_array = [];
+ let scope = "";
+ let scope_id = "";
+ if (res.groups.scope == "org") {
+ scope = "orgs";
+ scope_id = res.groups.org_id;
+ } else {
+ if (res.groups.site_id) {
+ this.site_id = res.groups.site_id;
+ } else {
+ this.site_id = res.groups.uuid;
+ }
+ scope = "sites";
+ scope_id = this.site_id;
+ }
+ if (res.groups.start && res.groups.stop) {
+ extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
+ }
+ if (res.groups.show_crit && res.groups.show_crit == "true") severity_array.push("critical")
+ if (res.groups.show_warn && res.groups.show_warn == "true") severity_array.push("warn")
+ if (res.groups.show_info && res.groups.show_info == "true") severity_array.push("info")
+ if (severity_array.length > 0) extra_params += "&severity=" + severity_array.join(",")
+ else extra_params += "&severity=none"
+
+ if (res.groups.group && res.groups.group != "any%20type") extra_params += "&group=" + res.groups.group;
+
+ if (res.groups.show_ack && res.groups.show_ack == "false") extra_params += "&acked=false";
+
+ this.quick_links.push({
+ url: "https://api." + res.groups.host + "/api/v1/" + scope + "/" + scope_id + "/alarms/search?" + extra_params,
+ name: scope + " Alarms"
+ }, {
+ url: "https://api." + res.groups.host + "/api/v1/" + scope + "/" + scope_id + "/alarms/count?" + extra_params,
+ name: scope + " Alarms count"
+ }, {
+ url: "https://api." + res.groups.host + "/api/v1/orgs/" + this.org_id + "/alarmtemplates",
+ name: " Alarms Templates"
+ }, {
+ url: "https://api." + res.groups.host + "/api/v1/const/alarm_defs",
+ name: " Alarms Definitions"
+ });
+ }
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// EVENTS URL FUNCTION DISPATCHER
+ eventsUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ let extra_params = "";
+ if (res.groups.site_id) {
+ this.site_id = res.groups.site_id;
+ } else {
+ this.site_id = res.groups.uuid;
+ }
+
+ if (res.groups.start && res.groups.stop) {
+ extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
+ }
+
+ this.quick_links.push({
+ url: "https://api." + res.groups.host + "/api/v1/sites/" + this.site_id + "/insights/marvis?" + extra_params,
+ name: "Site Events"
+ })
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// EVENTS URL FUNCTION DISPATCHER
+ floorplansUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ if (res.groups.site_id) {
+ this.site_id = res.groups.site_id;
+ this.obj_id = res.groups.uuid;
+ } else {
+ this.site_id = res.groups.uuid;
+ }
+
+ this.setName("floor plan", res.groups.detail);
+ this.forgeSiteObject("maps", res.groups.host, res.groups.detail);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// INSIGHTS URL FUNCTION DISPATCHER
+ insightsUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ this.site_id = res.groups.site_id;
+ this.obj_id = res.groups.obj_id;
+ let extra_params = null;
+ if (res.groups.start && res.groups.stop) {
+ extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
+ }
+ if (res.groups.host && res.groups.org_id) {
+ switch (res.groups.obj) {
+ case "device":
+ this.setName("ap", "insights");
+ this.forgeSiteObject("devices", res.groups.host, "detail");
+ this.forgeSiteObjectStats("devices", res.groups.host, "detail", extra_params);
+ this.forgeSiteObjectEvents("devices", "ap", res.groups.host, "detail", extra_params);
+ this.forgeSiteApLastConfig(res.groups.detail, res.groups.host, 'ap');
+ break;
+ case "client":
+ this.setName("client", "insights");
+ this.forgeSiteObjectSearch("clients", res.groups.host, "detail");
+ this.forgeSiteObjectStats("clients", res.groups.host, "detail", extra_params);
+ this.forgeSiteObjectEvents("clients", null, res.groups.host, "detail", extra_params);
+ break;
+ case "juniperSwitch":
+ this.setName("switch", "insights");
+ this.forgeSiteObject("devices", res.groups.host, "detail");
+ this.forgeSiteObjectStats("devices", res.groups.host, "detail", extra_params);
+ this.forgeSiteObjectEvents("devices", "switch", res.groups.host, "detail", extra_params);
+ break;
+ case "juniperGateway":
+ this.setName("gateway", "insights");
+ this.forgeSiteObject("devices", res.groups.host, "detail");
+ this.forgeSiteObjectStats("devices", res.groups.host, "detail", extra_params);
+ this.forgeSiteObjectEvents("devices", "gateway", res.groups.host, "detail", extra_params);
+ break;
+ case "wiredClient":
+ this.setName("wired client", "insights");
+ this.forgeSiteObjectSearch("wired_clients", res.groups.host, "detail", extra_params);
+ this.forgeSiteObjectEvents("wired_clients", null, res.groups.host, "detail", extra_params);
+ break;
+ case "edge":
+ this.setName("mxedge", "insights");
+ this.forgeOrgObject("mxedges", res.groups.host, "detail");
+ this.forgeOrgObjectStats("mxedges", res.groups.host, "detail", extra_params);
+ this.forgeOrgObjectEvents("mxedges", res.groups.host, "detail", extra_params);
+ break;
+ case "site":
+ case undefined:
+ this.setName("site", "insights");
+ this.forgeSite(res.groups.host, extra_params);
+ break;
+ }
+ }
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// ORG SLE URL FUNCTION DISPATCHER
+
+ orgSleUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ let extra_params = null;
+ if (res.groups.start && res.groups.stop) {
+ extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
+ }
+ if (res.groups.host && res.groups.org_id) {
+ switch (res.groups.scope) {
+ case "siteComparison":
+ this.forgeOrgSlehUrl(res.groups.host, "wifi", res.groups.sle, res.groups.worstsle, extra_params);
+ break;
+ case "wiredSiteComparison":
+ this.forgeOrgSlehUrl(res.groups.host, "wired", res.groups.sle, res.groups.worstsle, extra_params);
+ break;
+ case "wanSiteComparison":
+ this.forgeOrgSlehUrl(res.groups.host, "wan", res.groups.sle, res.groups.worstsle, extra_params);
+ break;
+ }
+ }
+ }
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////// SLE URL FUNCTION DISPATCHER
+
+ sleUrl(res: RegExpExecArray): void {
+ this.org_id = res.groups.org_id;
+ this.site_id = res.groups.site_id;
+ let extra_params = null;
+ let scope = "";
+ if (res.groups.scope != "site") {
+ this.setName(res.groups.scope, "sle");
+ this.obj_id = res.groups.scope_id;
+ }
+ if (res.groups.scope == "juniperSwitch") {
+ scope = "switch";
+ } else if (res.groups.scope == "juniperGateway") {
+ scope = "gateway";
+ } else if (res.groups.scope == "device") {
+ scope = "ap";
+ } else {
+ scope = res.groups.scope;
+ }
+ if (res.groups.start && res.groups.stop) {
+ extra_params = "start=" + res.groups.start + "&end=" + res.groups.stop;
+ }
+ if (res.groups.host && res.groups.org_id) {
+ let sles: string[] = []
+ switch (res.groups.detail) {
+ case "serviceLevels":
+ sles = [
+ "time-to-connect",
+ "failed-to-connect",
+ "roaming",
+ "throughput",
+ "coverage",
+ "capacity",
+ "ap-availability"
+ ]
+ break;
+ case "wiredServiceLevels":
+ sles = [
+ "switch-stc",
+ "switch-health",
+ "switch-throughput"
+ ]
+ break;
+ case "wanServiceLevels":
+ sles = [
+ "gateway-health",
+ "wan-link-health"
+ ]
+ break;
+ }
+ this.forgeSlehUrl(res.groups.host, scope, res.groups.site_id, res.groups.scope_id, sles, extra_params)
+ }
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+ // OTHER FUNCTIONS
+ ////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ // open a new tab with the url passed in parameter
+ openApiTab(url: string) {
+ chrome.tabs.create({ url: url });
+ }
+
+ // open a new tab
+ openTab(target: string) {
+ if (target in this.external_links) {
+ chrome.tabs.create({ url: this.external_links[target] });
+ }
+ }
+
+ // copy the id (org_id, site_id, ...) into the clipboard
+ copyId(inputElement: HTMLInputElement): void {
+ this.focused = inputElement.id;
+ inputElement.select();
+ document.execCommand('copy');
+ setTimeout(() => {
+ this.focused = "";
+ this._cd.detectChanges()
+ }, 100);
+ inputElement.setSelectionRange(0, 0);
+ }
+
+
+}
diff --git a/src/angular/src/assets/Untitled.svg b/src/angular/src/assets/Untitled.svg
new file mode 100644
index 0000000..438999c
--- /dev/null
+++ b/src/angular/src/assets/Untitled.svg
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/src/angular/src/assets/api.json b/src/angular/src/assets/api.json
new file mode 100644
index 0000000..32fe5e0
--- /dev/null
+++ b/src/angular/src/assets/api.json
@@ -0,0 +1 @@
+{"paths": {"api": {"paths": {"v1": {"paths": {"const": {"paths": {"alarm_defs": {"specs": {"get": {"description": "Get Alarm Definitions", "operationId": "getAlarmDefinitions", "tags": ["Constants"]}}}, "ap_channels": {"specs": {"get": {"description": "Get List of Available channels per country code", "operationId": "getApChannels", "parameters": [{"$ref": "#/components/parameters/country_code"}], "tags": ["Constants"]}}}, "ap_led_status": {"specs": {"get": {"description": "Get AP LED definition", "operationId": "getApLedDefinition", "tags": ["Constants"]}}}, "applications": {"specs": {"get": {"description": "Get a list of applications that Juniper-Mist APs recognize", "operationId": "getApplications", "tags": ["Constants"]}}}, "client_events": {"specs": {"get": {"description": "Get List of available Client Events", "operationId": "getClientEventsDefinitions", "tags": ["Constants"]}}}, "countries": {"specs": {"get": {"description": "Get List of available Country Codes", "operationId": "getCountryCodes", "tags": ["Constants"]}}}, "device_models": {"specs": {"get": {"description": "Get a list of AP device models for the Mist Site", "operationId": "getApModels", "tags": ["Constants"]}}}, "insight_metrics": {"specs": {"get": {"description": "Get Available Insight Metrics", "operationId": "getSiteAvailableInsightMetrics", "tags": ["Constants"]}}}, "languages": {"specs": {"get": {"description": "Get Languages", "operationId": "getSiteLanguages", "tags": ["Constants"]}}}, "mxedge_models": {"specs": {"get": {"description": "Get Mist Edge Models", "operationId": "getMxEdgeModels", "tags": ["Constants"]}}}, "system_events": {"specs": {"get": {"description": "Get list of available system events", "operationId": "getSystemEventsDefinitions", "tags": ["Constants"]}}}}}, "installer": {"paths": {"orgs": {"paths": {"{org_id}": {"paths": {"alarmtemplates": {"specs": {"get": {"description": "Get the list of alarm templates", "operationId": "getInstallerAlarmTemplates", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "deviceprofiles": {"specs": {"get": {"description": "Get Device Profiles", "operationId": "getInstallerDeviceProfiles_WIP_", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "devices": {"specs": {"get": {"description": "Get recently claimed devices", "operationId": "getInstallerListOfRenctlyClaimedDevices", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "This mirrors `POST /api/v1/orgs/{org_id}/inventory` (see Inventory API)", "operationId": "claimInstallerDevices", "tags": ["Installer"]}}, "paths": {"{device_mac}": {"specs": {"delete": {"description": "Unassign recently claimed devices", "operationId": "unassignInstallerRecentlyClaimedDevice", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/device_mac"}], "put": {"description": "Provision device ", "operationId": "provisionInstallerDevices", "tags": ["Installer"]}}, "paths": {"locate": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/device_mac"}], "post": {"description": "Locate a Device by blinking it\u2019s LED, it\u2019s a persisted state that has to be stopped by calling Stop Locating API", "operationId": "startInstallerLocateDevice", "tags": ["Installer"]}}}, "unlocate": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/device_mac"}], "post": {"description": "Stop it", "operationId": "stopInstallerLocateDevice", "tags": ["Installer"]}}}, "{image_name}": {"specs": {"delete": {"description": "delete image", "operationId": "deleteInstallerDeviceImage", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/image_name"}, {"$ref": "#/components/parameters/device_mac"}], "post": {"description": "Add image", "operationId": "InstallerDeviceImage", "tags": ["Installer"]}}}}}}}, "rftemplates": {"specs": {"get": {"description": "Get RF Template", "operationId": "getInstallerRfTemplatesNames", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "secpolicies": {"specs": {"get": {"description": "Get Secuity Policies", "operationId": "getInstallerSecPolicies", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "sitegroups": {"specs": {"get": {"description": "Get Site Groups", "operationId": "getInstallerSiteGroups", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "sites": {"specs": {"get": {"description": "Get Sites", "operationId": "getInstallerSites", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"{site_name}": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}], "put": {"description": "Often the Installers are asked to assign Devices to Sites. The Sites can either be pre-created or created/modified by the Installer. If this is an update, the same grace period also applies.", "operationId": "createOrUpdateInstallerSites", "tags": ["Installer"]}}, "paths": {"maps": {"specs": {"get": {"description": "Get Maps", "operationId": "getInstallerMaps", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}]}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign & place ap if name or mac matches", "operationId": "importInstallerMap", "tags": ["Installer"]}}}, "{map_id}": {"specs": {"delete": {"description": "Delete Map", "operationId": "deleteInstallerMap", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Create a MAP", "operationId": "createInstallerMap", "tags": ["Installer"]}, "put": {"description": "Update map", "operationId": "updateInstallerMap", "tags": ["Installer"]}}}}}}}}}}}}}, "sites": {"paths": {"{site_name}": {"paths": {"optimize": {"specs": {"get": {"description": "After installation is considered complete (APs are placed on maps, all powered up), you can trigger an optimize operation where RRM will kick in (and maybe other things in the future) before it\u2019s automatically scheduled.", "operationId": "optimizeInstallerRrm", "tags": ["Installer"]}, "parameters": [{"$ref": "#/components/parameters/site_name"}]}}}}}}}}, "invite": {"paths": {"verify": {"paths": {"{token}": {"specs": {"parameters": [{"$ref": "#/components/parameters/token"}], "post": {"description": "NOTE: another call to ```GET /api/v1/self``` is required to see the new set of privileges", "operationId": "verifyAdminInvite", "tags": ["Admin"]}}}}}}}, "login": {"specs": {"post": {"description": "Log in with email/password", "operationId": "login", "tags": ["Login"]}}, "paths": {"lookup": {"specs": {"post": {"description": "Login Lookup", "operationId": "lookup", "tags": ["Login"]}}}, "oauth": {"paths": {"{provider}": {"specs": {"delete": {"description": "Unlink OAuth2 Provider", "operationId": "unlinkOAuth2Provider", "tags": ["Login With OAuth2"]}, "get": {"description": "Obtain Authorization URL for Login", "operationId": "getOAuth2AuthorizationUrlForLogin", "parameters": [{"in": "query", "name": "forward", "schema": {"example": "http://manage.mist.com/oauth/callback.html", "type": "string"}}], "tags": ["Login With OAuth2"]}, "parameters": [{"in": "path", "name": "provider", "required": true, "schema": {"type": "string"}}], "post": {"description": "Login via OAuth2", "operationId": "loginOAuth2", "tags": ["Login With OAuth2"]}}}}}, "two_factor": {"specs": {"post": {"description": "Send 2FA Code", "operationId": "twoFactor", "tags": ["Login With OAuth2"]}}}}}, "logout": {"specs": {"post": {"description": "Logout", "operationId": "logout", "tags": ["Login"]}}}, "mobile": {"paths": {"verify": {"paths": {"{secret}": {"specs": {"parameters": [{"$ref": "#/components/parameters/secret"}], "post": {"description": "Verify secret", "operationId": "activateSdkInvite", "tags": ["Mobile"]}}}}}}}, "msps": {"specs": {"post": {"description": "Create MSP account", "operationId": "createMsp", "tags": ["Msps"]}}, "paths": {"{msp_id}": {"specs": {"delete": {"description": "Deleting MSP removes the MSP and OrgGroup under the MSP as well as all privileges associated with them. It does not remove any Org or Admins", "operationId": "deleteMsp", "tags": ["Msps"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "put": {"description": "Update MSP", "operationId": "updateMsp", "tags": ["Msps"]}}, "paths": {"admins": {"specs": {"get": {"description": "Get MSP Admins", "operationId": "getMspAdmins", "tags": ["Msps Admins"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}, "paths": {"{admin_id}": {"specs": {"delete": {"description": "This removes all privileges this admin has against the MSP. This goes deep all the way to the sites", "operationId": "revokeMspAdmin", "tags": ["Msps Admins"]}, "get": {"description": "Get MSP Admins", "operationId": "getMspAdmin", "tags": ["Msps Admins"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/admin_id"}], "put": {"description": "Update MSP Admin", "operationId": "updateMspAdmin", "tags": ["Msps Admins"]}}}}}, "insights": {"paths": {"{metric}": {"specs": {"get": {"description": "See getSiteAvailableInsightMetrics for metrics description of MSP Scope", "operationId": "getMspsInsightMetrics", "tags": ["Msps"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/metric"}]}}}}, "inventory": {"paths": {"{device_mac}": {"specs": {"get": {"description": "Get Inventoy By device MAC address", "operationId": "getMspInventoryByMac", "tags": ["Msps Inventory"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/device_mac"}]}}}}, "invites": {"specs": {"parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Invite MSP Admin\n\nNote: An email will also be sent to the user with a link to https://manage.mist.com/verify/invite?token=:token", "operationId": "inviteMspAdmin", "tags": ["Msps Invites"]}}, "paths": {"{invite_id}": {"specs": {"delete": {"description": "Delete admin invite", "operationId": "uninviteMspAdmin", "tags": ["Msps Invites"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/invite_id"}], "put": {"description": "Update MSP admin invite", "operationId": "updateMspAdminInvite", "tags": ["Msps Invites"]}}}}}, "orggroups": {"specs": {"get": {"description": "Get MSP Org Groups", "operationId": "getMspOrgGroups", "tags": ["Msps Org Groups"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create MSP Org Group", "operationId": "createMspOrgGroup", "tags": ["Msps Org Groups"]}}, "paths": {"{orggroup_id}": {"specs": {"delete": {"description": "Delete MSP Org Group", "operationId": "deleteMspOrgGroup", "tags": ["Msps Org Groups"]}, "get": {"description": "Get MSP Org Group Details", "operationId": "getMspOrgGroup", "tags": ["Msps Org Groups"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/orggroup_id"}], "put": {"description": "Update MSP Org Group", "operationId": "updateMspOrgGroup", "tags": ["Msps Org Groups"]}}}}}, "orgs": {"specs": {"get": {"description": "Get MSP Orgs", "operationId": "getMspOrgs", "tags": ["Msps Orgs"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create an Org under MSP", "operationId": "createMspOrg", "tags": ["Msps Orgs"]}, "put": {"description": "Assign or Unassign Orgs to an MSP account", "operationId": "manageMspOrgs", "tags": ["Msps Orgs"]}}, "paths": {"search": {"specs": {"get": {"description": "Search Org in MSP", "operationId": "searchMspOrgs", "parameters": [{"$ref": "#/components/parameters/name"}, {"description": "org id", "in": "query", "name": "org_id", "schema": {"format": "uuid", "type": "string"}}, {"description": "if this org has sufficient subscription", "in": "query", "name": "sub_insufficient", "schema": {"type": "boolean"}}, {"description": "if this org is under trial period", "in": "query", "name": "trial_enabled", "schema": {"type": "boolean"}}, {"description": "a list of types that enabled by usage", "in": "query", "name": "usage_types", "schema": {"type": "array"}}], "tags": ["Msps Orgs"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}, "{org_id}": {"specs": {"get": {"description": "Get MSP Org Details", "operationId": "getMspOrg", "tags": ["Msps Orgs"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/org_id"}]}}}}, "search": {"specs": {"get": {"description": "Search in MSP Orgs", "operationId": "searchMspOrgGroup", "parameters": [{"description": "orgs", "example": "orgs", "in": "query", "name": "type", "required": true, "schema": {"enum": ["orgs"], "type": "string"}}, {"$ref": "#/components/parameters/q"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Msps Search"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}, "ssoroles": {"specs": {"get": {"description": "Get MSP SSO Roles", "operationId": "getMspSsoRoles", "tags": ["Msps SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create MSP Role", "operationId": "createMspSsoRole", "tags": ["Msps SSO Roles"]}}, "paths": {"{ssorole_id}": {"specs": {"delete": {"description": "Delete MSP SSO Roles", "operationId": "deleteMspSsoRoles", "tags": ["Msps SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/ssorole_id"}], "put": {"description": "Update SSO Role", "operationId": "updateMspSsoRole", "tags": ["Msps SSO Roles"]}}}}}, "ssos": {"specs": {"get": {"description": "Get MSP SSO Config", "operationId": "getMspSso", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}], "post": {"description": "Create MSP SSO profile", "operationId": "createMspSso", "tags": ["Msps SSO"]}}, "paths": {"{sso_id}": {"specs": {"delete": {"description": "Delete MSP SSO Config", "operationId": "deleteMspSso", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}], "put": {"description": "Update MSP SSO config", "operationId": "updateMspSso", "tags": ["Msps SSO"]}}, "paths": {"failures": {"specs": {"get": {"description": "Get MSP SSO Latest Failures", "operationId": "getMspSsoLatestFailures", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata": {"specs": {"get": {"description": "Get MSP SSO SAML Metadata", "operationId": "getMspSsoSamlMetadata", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata.xml": {"specs": {"get": {"description": "Download MSP SSO SAML Metadata", "operationId": "downloadMspSsoSamlMetadata", "tags": ["Msps SSO"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}, {"$ref": "#/components/parameters/sso_id"}]}}}}}}, "stats": {"paths": {"licenses": {"specs": {"get": {"description": "Get MSP Licences", "operationId": "getMspOrgLicenses", "parameters": [], "tags": ["Msps Stats"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}, "orgs": {"specs": {"get": {"description": "Get MSP Orgs Stats", "operationId": "getMspOrgStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Msps Stats"]}, "parameters": [{"$ref": "#/components/parameters/msp_id"}]}}}}}}}}, "orgs": {"specs": {"post": {"description": "Org admin can invite people to manage the org. Furthermore, he can dictate the level of security those accounts are. The check is enforced when the invited admin tries to \u201caccept\u201d the invitation and every time the admin tries to login", "operationId": "createOrg", "tags": ["Orgs"]}}, "paths": {"{org_id}": {"specs": {"delete": {"description": "Delete Org", "operationId": "deleteOrg", "tags": ["Orgs"]}, "get": {"description": "Get Organization information", "operationId": "getOrgInfo", "tags": ["Orgs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "put": {"description": "Update Org", "operationId": "updateOrg", "tags": ["Orgs"]}}, "paths": {"128routers": {"paths": {"register_cmd": {"specs": {"get": {"description": "128T devices can be managed/adopted by Mist.", "operationId": "getOrg128TRegistrationCommands", "tags": ["Orgs 128T"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "admins": {"specs": {"get": {"description": "Get a list of people who can manage the Site/Org under the Org", "operationId": "getOrgAdmins", "tags": ["Orgs Admins"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"{admin_id}": {"specs": {"delete": {"description": "This removes all privileges this admin has against the org", "operationId": "revokeOrgAdmin", "tags": ["Orgs Admins"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/admin_id"}], "put": {"description": "Invite Org Admin", "operationId": "updateOrgAdmin", "tags": ["Orgs Admins"]}}}}}, "alarms": {"paths": {"count": {"specs": {"get": {"description": "Count Org Alarms", "operationId": "countOrgAlarms", "parameters": [{"in": "query", "name": "distinct", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Alarms"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org Alarms", "operationId": "searchOrgAlarms", "parameters": [{"in": "query", "name": "type", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/page"}], "tags": ["Orgs Alarms"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "alarmtemplates": {"specs": {"get": {"description": "Get Org Alarm Templates", "operationId": "getOrgAlarmTemplates", "tags": ["Orgs Alarm Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Available rules can be found in Orgs>Consts>getAlarmDefs\n\nThe delivery dict is only required if different from the template delivery settings.", "operationId": "createOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}}, "paths": {"suppress": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "In certain situations, for example, scheduled maintanance, you may want to suspend alarms to be triggered for a period of time.", "operationId": "suppressOrgAlarm", "tags": ["Orgs Alarm Templates"]}}}, "{alarmtemplate_id}": {"specs": {"delete": {"description": "Delete Org Alarm Template", "operationId": "deleteOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}, "get": {"description": "Get Org Alarm Template Details", "operationId": "getOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/alarmtemplate_id"}], "put": {"description": "Update Org Alarm Template", "operationId": "updateOrgAlarmTemplate", "tags": ["Orgs Alarm Templates"]}}}}}, "apitokens": {"specs": {"get": {"description": "get organization api tokens", "operationId": "getOrgApiTokens", "tags": ["Orgs API Tokens"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org API Token\nNote that the token key is only available during creation time.", "operationId": "createOrgApiToken", "tags": ["Orgs API Tokens"]}}, "paths": {"{apitoken_id}": {"specs": {"delete": {"description": "Delete Org API Token", "operationId": "deleteOrgApiToken", "tags": ["Orgs API Tokens"]}, "get": {"description": "Get Org API Token", "operationId": "getOrgApiToken", "tags": ["Orgs API Tokens"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/apitoken_id"}], "put": {"description": "Update Org API Token", "operationId": "updateOrgApiToken", "tags": ["Orgs API Tokens"]}}}}}, "aptemplates": {"specs": {"get": {"description": "Get AP Templates", "operationId": "getOrgAptemplates", "tags": ["Orgs AP Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org AP Template", "operationId": "createOrgAptemplate", "tags": ["Orgs AP Templates"]}}, "paths": {"{aptemplate_id}": {"specs": {"delete": {"description": "Delete existing AP Template", "operationId": "deleteOrgAptemplate", "tags": ["Orgs AP Templates"]}, "get": {"description": "Get AP Template", "operationId": "getOrgAptemplate", "tags": ["Orgs AP Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/aptemplate_id"}], "put": {"description": "Update AP Template", "operationId": "updateOrgAptemplate", "tags": ["Orgs AP Templates"]}}}}}, "assetfilters": {"specs": {"get": {"description": "Get the list of all BLE asset filters for the given site. Each asset filter in the list operates independently. For a filter object to match an asset, all of the filter properties must match (logical \u2018AND\u2019 of each filter property). For example, the \u201cVisitor Tags\u201d filter below will match an asset when both the \u201cibeacon\\_uuid\u201d and \u201cibeacon_major\u201d properties match the asset. All non-matching assets are ignored.", "operationId": "getOrgAssetFilters", "tags": ["Orgs Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Asset Filter\nCreates a single BLE asset filter for the given site. Any subset of filter properties can be included in the filter. A matching asset must meet the conditions of all given filter properties (logical \u2018AND\u2019).", "operationId": "createOrgAssetFilters", "tags": ["Orgs Asset Filters"]}}, "paths": {"{assetfilter_id}": {"specs": {"delete": {"description": "Deletes an existing BLE asset filter for the given site.", "operationId": "deleteOrgAssetFilters", "tags": ["Orgs Asset Filters"]}, "get": {"description": "Get Org Asset Filter Details", "operationId": "getOrgAssetFilter", "tags": ["Orgs Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/assetfilter_id"}], "put": {"description": "Updates an existing BLE asset filter for the given site.", "operationId": "updateOrgAssetFilters", "tags": ["Orgs Asset Filters"]}}}}}, "assets": {"specs": {"get": {"description": "Get Org Assets", "operationId": "getOrgAssets", "tags": ["Orgs Assets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Asset", "operationId": "createOrgAsset", "tags": ["Orgs Assets"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Impert Org Assets. \nIt can be done via a CSV file or a JSON payload.\n\n## CSV File Format\n```\nname,mac\n\"asset_name\",5c5b53010101\n``` ", "operationId": "importOrgAssets", "tags": ["Orgs Assets"]}}}, "{asset_id}": {"specs": {"delete": {"description": "Delete Org Asset", "operationId": "deleteOrgAsset", "tags": ["Orgs Assets"]}, "get": {"description": "Get Org Asset Details", "operationId": "getOrgAsset", "tags": ["Orgs Assets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/asset_id"}], "put": {"description": "Update Org Asset", "operationId": "updateOrgAsset", "tags": ["Orgs Assets"]}}}}}, "cert": {"specs": {"get": {"description": "Get Org Certificates", "operationId": "getOrgCertificates", "tags": ["Orgs Cert"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"regenerate": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Clear Org Certificates", "operationId": "clearOrgCertificates", "tags": ["Orgs Cert"]}}}}}, "claim": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "#### Body Parameters\n**Parameter**|**Type**|**Description**\n:-------------: |:-------------: |:-------------:\ncode|string|activation code\ntype|string|what to claim, all (default) / license / inventory", "operationId": "claimOrgLicense", "tags": ["Orgs Claim"]}}}, "clients": {"paths": {"count": {"specs": {"get": {"description": "Count Org Wireless Clients", "operationId": "countOrgWirelessClients", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "device", "enum": ["mac", "hostname", "device", "os", "model", "ap", "vlan", "ssid", "ip"]}}, {"description": "partial / full MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type, e.g. Mac, Nvidia, iPhone", "in": "query", "name": "device", "schema": {"type": "string"}}, {"description": "os, e.g. Sierra, Yosemite, Windows 10", "in": "query", "name": "os", "schema": {"type": "string"}}, {"description": "model, e.g. \u201cMBP 15 late 2013\u201d, 6, 6s, \u201c8+ GSM\u201d", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac where the client has connected to", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "events": {"paths": {"search": {"specs": {"get": {"description": "Get Org Clients Events", "operationId": "searchOrgClientEvents", "parameters": [{"description": "event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "for assoc/disassoc events", "in": "query", "name": "reason_code", "schema": {"type": "integer"}}, {"description": "SSID Name", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "802.11 standard", "in": "query", "name": "proto", "schema": {"enum": ["b", "g", "n", "ac", "ax", "a"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "search": {"specs": {"get": {"description": "Search Org Wireless Clients", "operationId": "searchOrgWirelessClients", "parameters": [{"description": "partial / full MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type, e.g. Mac, Nvidia, iPhone", "in": "query", "name": "device", "schema": {"type": "string"}}, {"description": "os, e.g. Sierra, Yosemite, Windows 10", "in": "query", "name": "os", "schema": {"type": "string"}}, {"description": "model, e.g. \u201cMBP 15 late 2013\u201d, 6, 6s, \u201c8+ GSM\u201d", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac where the client has connected to", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/psk_id_query"}, {"$ref": "#/components/parameters/psk_name"}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/ip"}, {"description": "full MAC address, hostname, username or ip", "in": "query", "name": "text", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "sessions": {"paths": {"count": {"specs": {"get": {"description": "Count Org Wireless Clients Sessions", "operationId": "countOrgWirelessClientsSessions", "parameters": [{"in": "query", "name": "distinct", "required": true, "schema": {"default": "device", "enum": ["ssid", "ap", "ip", "vlan", "hostname", "os", "model", "device"], "type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "5 / 24", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "#### Query Parameters\n**Parameter**|**Type**|**Description**\n:-------------: |:-------------: |:-------------:\nap|string|AP MAC\nband|string|5 / 24\nclient_family|string|E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d\nclient_manufacture|string|E.g. \u201cApple\u201d\nclient_model|string|E.g. \u201c8+\u201d, \u201cXS\u201d\nclient_os|string|E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d\nssid|string|SSID\nwlan_id|string|wlan_id", "operationId": "searchOrgWirelessClientSessions", "parameters": [{"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "5 / 24", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/psk_id_query"}, {"$ref": "#/components/parameters/psk_name"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}}}, "clone": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create an Org by cloning from another one. Org Settings, Templates, Wxlan Tags, Wxlan Tunnels, Wxlan Rules, Org Wlans will be copied. Sites and Site Groups will not be copied, and therefore, the copied template will not be applied to any site/sitegroups.", "operationId": "cloneOrg", "tags": ["Orgs Clone"]}}}, "crl": {"specs": {"get": {"description": "Get Org CRL File", "operationId": "getOrgCrlFile", "tags": ["Orgs CRL"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "deviceprofiles": {"specs": {"get": {"description": "Get Org Device Profiles", "operationId": "getOrgDeviceProfiles", "tags": ["Orgs Device Profiles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Device Profile", "operationId": "createOrgDeviceProfiles", "tags": ["Orgs Device Profiles"]}}, "paths": {"{deviceprofile_id}": {"specs": {"delete": {"description": "Delete Org Device Profile", "operationId": "deleteOrgDeviceProfile", "tags": ["Orgs Device Profiles"]}, "get": {"description": "Get Org device Profile Details", "operationId": "getOrgDeviceProfile", "tags": ["Orgs Device Profiles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/deviceprofile_id"}], "put": {"description": "Update Org Device Profile", "operationId": "updateOrgDeviceProfile", "tags": ["Orgs Device Profiles"]}}, "paths": {"assign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/deviceprofile_id"}], "post": {"description": "Assign Org Device Profile to Devices", "operationId": "assignOrgDeviceProfileToDevices", "tags": ["Orgs Device Profiles"]}}}, "unassign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/deviceprofile_id"}], "post": {"description": "Unassign Org Device Profile from Devices", "operationId": "unassignOrgDeviceProfilesFromDevices", "tags": ["Orgs Device Profiles"]}}}}}}}, "devices": {"specs": {"get": {"description": "Get Org Devices", "operationId": "getOrgDevices", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"count": {"specs": {"get": {"description": "Count Org Devices", "operationId": "countOrgDevices", "parameters": [{"example": "model", "in": "query", "name": "distinct", "required": true, "schema": {"default": "model", "enum": ["hostname", "site_id", "model", "mac", "version", "ip", "mxtunnel_status", "mxedge_id", "lldp_system_name", "lldp_system_desc", "lldp_port_id", "lldp_mgmt_addr"], "type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "version", "in": "query", "name": "version", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"description": "MxTunnel status, up / down", "in": "query", "name": "mxtunnel_status", "schema": {"enum": ["up", "down"], "type": "string"}}, {"description": "Mist Edge id, if AP is connecting to a Mist Edge", "in": "query", "name": "mxedge_id", "schema": {"type": "string"}}, {"description": "LLDP system name", "in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"description": "LLDP system description", "in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"description": "LLDP port id", "in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"description": "LLDP management ip address", "in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "events": {"paths": {"count": {"specs": {"get": {"description": "Count Org Devices Events", "operationId": "countOrgDevicesEvents", "parameters": [{"in": "query", "name": "distinct", "required": true, "schema": {"default": "model", "enum": ["org_id", "site_id", "ap", "apfw", "model", "text", "timestamp", "type"], "type": "string"}}, {"description": "org id", "in": "query", "name": "org_id", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "AP Firmware", "in": "query", "name": "apfw", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "event message", "in": "query", "name": "text", "schema": {"type": "string"}}, {"description": "event time", "in": "query", "name": "timestamp", "schema": {"type": "string"}}, {"description": "Events Type", "in": "query", "name": "type", "schema": {"enum": ["AP_CONFIG_CHANGED_BY_RRM", "AP_CONFIG_CHANGED_BY_USER", "AP_CONFIGURED", "AP_RECONFIGURED", "AP_RESTARTED", "AP_RESTART_BY_USER", "AP_RRM_ACTION", "CLIENT_DNS_OK", "MARVIS_DNS_FAILURE"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org Devices Events", "operationId": "searchOrgDevicesEvents", "parameters": [{"description": "org id", "in": "query", "name": "org_id", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "AP Firmware", "in": "query", "name": "apfw", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "event message", "in": "query", "name": "text", "schema": {"type": "string"}}, {"description": "event time", "in": "query", "name": "timestamp", "schema": {"type": "string"}}, {"description": "Events Type", "in": "query", "name": "type", "schema": {"enum": ["AP_CONFIG_CHANGED_BY_RRM", "AP_CONFIG_CHANGED_BY_USER", "AP_CONFIGURED", "AP_RECONFIGURED", "AP_RESTARTED", "AP_RESTART_BY_USER", "AP_RRM_ACTION", "CLIENT_DNS_OK", "MARVIS_DNS_FAILURE"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "search": {"specs": {"get": {"description": "Search Org Devices", "operationId": "searchOrgDevices", "parameters": [{"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "version", "in": "query", "name": "version", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"description": "MxTunnel status, up / down", "in": "query", "name": "mxtunnel_status", "schema": {"enum": ["up", "down"], "type": "string"}}, {"description": "Mist Edge id, if AP is connecting to a Mist Edge", "in": "query", "name": "mxedge_id", "schema": {"type": "string"}}, {"description": "LLDP system name", "in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"description": "LLDP system description", "in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"description": "LLDP port id", "in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"description": "LLDP management ip address", "in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "upgrade": {"specs": {"get": {"description": "get Site multi devces upgrades", "operationId": "getOrgMultiSitesDevicesUpgrades", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Upgrade Multiple Sites", "operationId": "upgradeOrgMultiSitesDevices", "tags": ["Orgs Devices"]}}, "paths": {"{upgrade_id}": {"specs": {"get": {"description": "Get Multi Site Upgrade", "operationId": "getOrgMultiSitesUpgrade", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"in": "path", "name": "upgrade_id", "required": true, "schema": {"format": "uuid", "type": "string"}}]}}}}}}, "gatewaytemplates": {"specs": {"get": {"description": "Get Organization Gateway Templates", "operationId": "getOrgGatewayTemplates", "tags": ["Orgs Gateway Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Gateway Template", "operationId": "createOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}}, "paths": {"{gatewaytemplate_id}": {"specs": {"delete": {"description": "Delete Organization Gateway Template", "operationId": "deleteOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}, "get": {"description": "Get Organization Gateway Template details", "operationId": "getOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/gatewaytemplate_id"}], "put": {"description": "Update Organization Gateway Template", "operationId": "updateOrgGatewayTemplate", "tags": ["Orgs Gateway Templates"]}}}}}, "inventory": {"specs": {"get": {"description": "Get Org Inventory\n\n## VC (Virtual-Chassis) Management\nIdeally VC should be managed as a single device - where - one managed entity where config / monitoring is anchored against (with a stable identify MAC) - all members appears in the inventory\n\nIn our implementation, we strive to achieve that without manual user configurations by 1. during claim or adoption a VC, we require FPC0 to exist and will use its MAC as identify for the entire chassis 2. other VC members will be automatically populated when they\u2019re all present\n\nThe perceivable result is 1. from /sites/:site_id/stats/devices/:fpc0_mac API, you\u2019d see the VC where module_stat contains the VC members 2. from /orgs/:org_id/inventory?vc=true API, you\u2019d see all VC members with vc_mac pointing to the FPC0", "operationId": "getOrgInventory", "parameters": [{"description": "device serial", "in": "query", "name": "serial", "schema": {"type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"enum": ["ap", "switch", "gateway"], "type": "string"}}, {"description": "MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "site id if assigned, null if not assigned", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "vc_mac", "schema": {"type": "string"}}, {"in": "query", "name": "vc", "schema": {"type": "string"}}], "tags": ["Orgs Inventory"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Add Device to Org Inventory", "operationId": "addOrgInventory", "tags": ["Orgs Inventory"]}, "put": {"description": "** Add or Delete multiple inventory from org **\n* if Delete\nThis removes the inventory from the org. If the inventory is already assigned to a site, it will be unassigned.", "operationId": "updateOrgInventoryAssignment", "tags": ["Orgs Inventory"]}}, "paths": {"replace": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "It\u2019s a common request we get from the customers. When a AP HW has problem and need a replacement, they would want to copy the existing attributes (Device Config) of this old AP to the new one. It can be done by providing the MAC of a device that\u2019s currently in the inventory but not assigned. The Device replaced will become unclaimed.", "operationId": "replaceOrgDevices", "tags": ["Orgs Inventory"]}}}}}, "invites": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "If the request is successful, an email will also be sent to the user with a link to ```https://manage.mist.com/verify/invite?token=:token&expire=1459632743&org=OrgName```", "operationId": "inviteOrgAdmin", "tags": ["Orgs Invites"]}}, "paths": {"{invite_id}": {"specs": {"delete": {"description": "Delete Admin Invite", "operationId": "uninviteOrgAdmin", "tags": ["Orgs Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/invite_id"}], "put": {"description": "Update Admin Invite", "operationId": "updateOrgAdminInvite", "tags": ["Orgs Invites"]}}}}}, "junos": {"paths": {"register_cmd": {"specs": {"get": {"description": "Junos devices running mist agents can be managed/adopted by Mist.\n", "operationId": "getOrgJunosDevicesRegistrationCommands", "tags": ["Orgs Devices"]}, "parameters": [{"in": "path", "name": "org_id", "required": true, "schema": {"type": "string"}}]}}}}, "licenses": {"specs": {"get": {"description": "Get the list of licenses", "operationId": "getOrgLicencesSummary", "tags": ["Orgs Licenses"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "put": {"description": "Move, Undo Move or Delete Org License to Another Org\nIf the admin has admin privilege against the org_id and dst_org_id, he can move some of the licenses to another Org. Given that: \n1. the specified license is currently active \n2. there\u2019s enough licenses left in the specified license (by subscription_id) \n3. there will still be enough entitled licenses for the type of license after the amendment", "operationId": "moveOrDeleteOrgLicenseToAnotherOrg", "tags": ["Orgs Licenses"]}}, "paths": {"usages": {"specs": {"get": {"description": "Get Licenses Usage by Sites\nThis shows license usage (i.e. needed) based on the features enabled for the site.", "operationId": "getOrgLicencesBySite", "tags": ["Orgs Licenses"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "logs": {"specs": {"get": {"description": "Get a list of change logs for the current Org", "operationId": "getOrgLogs", "parameters": [{"description": "site id", "in": "query", "name": "site_id", "schema": {"type": "string"}}, {"description": "admin name or email", "in": "query", "name": "admin_name", "schema": {"type": "string"}}, {"description": "message", "in": "query", "name": "message", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Logs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Audit Logs", "operationId": "countOrgLogsByDistinctAttributes", "parameters": [{"in": "query", "name": "distinct", "required": true, "schema": {"default": "admin_name", "enum": ["admin_id", "admin_name", "message", "site_id"], "type": "string"}}, {"in": "query", "name": "admin_id", "schema": {"type": "string"}}, {"in": "query", "name": "admin_name", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "message", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Logs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "maps": {"paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign matching inventory to specific site, place ap if name or mac matches\n\n# CSV File Format\n```\nVendor AP name,Mist AP Mac\nUS Office AP-2 - 5c:5b:35:00:00:02,5c5b35000002\n``` ", "operationId": "importOrgMaps", "tags": ["Orgs Maps"]}}}}}, "mxclusters": {"specs": {"get": {"description": "Get MxEdge Clusters", "operationId": "getOrgMxEdgeClusters", "tags": ["Orgs MxClusters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create MxCluster", "operationId": "createOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}}, "paths": {"{mxcluster_id}": {"specs": {"delete": {"description": "Delete Org MXEdge Cluster", "operationId": "deleteOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}, "get": {"description": "Get Org MxEdge Cluster Details", "operationId": "getOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxcluster_id"}], "put": {"description": "Update Org MxEdge Cluster", "operationId": "updateOrgMxEdgeCluster", "tags": ["Orgs MxClusters"]}}}}}, "mxedges": {"specs": {"get": {"description": "Get Org MxEdges", "operationId": "getOrgMxEdges", "tags": ["Orgs MxEdges"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create MxEdge", "operationId": "createOrgMxEdge", "tags": ["Orgs MxEdges"]}}, "paths": {"assign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Assign Org MxEdge to Site", "operationId": "assignOrgMxEdgeToSite", "tags": ["Orgs MxEdges"]}}}, "claim": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "For a Mist Edge in default state, it will show a random claim code like `135-546-673` which you can \u201cclaim\u201d it into your Org", "operationId": "claimOrgMxEdge", "tags": ["Orgs MxEdges"]}}}, "unassign": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Unassign Org MxEdge from Site", "operationId": "unassignOrgMxEdgeFromSite", "tags": ["Orgs MxEdges"]}}}, "upgrade": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Upgrade Mist Edges", "operationId": "upgradeOrgMxEdges", "tags": ["Orgs MxEdges"]}}}, "version": {"specs": {"get": {"description": "Get Mist Edge Upgrade Information", "operationId": "getOrgMxEdgeUpgradeInfo", "parameters": [{"description": "upgrade channel to follow, stable (default) / beta / alpha", "in": "query", "name": "channel", "schema": {"default": "stable", "enum": ["stable", "beta", "alpha"], "type": "string"}}], "tags": ["Orgs MxEdges"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{mxedge_id}": {"specs": {"delete": {"description": "Delete Org MxEdge", "operationId": "deleteOrgMxEdge", "tags": ["Orgs MxEdges"]}, "get": {"description": "Get Org MxEdge details", "operationId": "getOrgMxEdge", "tags": ["Orgs MxEdges"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "put": {"description": "Update Org MxEdge", "operationId": "updateOrgMxEdge", "tags": ["Orgs MxEdges"]}}, "paths": {"restart": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "In the case where a Mist Edge is replaced, you would need to unregister it. Which disconnects the currently the connected Mist Edge and allow another to register.", "operationId": "restartOrgMxEdge", "tags": ["Orgs MxEdges"]}}}, "services": {"paths": {"tunterm": {"paths": {"bounce_port": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "Bounce TunTerm Data Ports", "operationId": "bounceOrgMxEdgeDataPorts", "parameters": [], "tags": ["Orgs MxEdges"]}}}}}, "{name}": {"paths": {"{action}": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}, {"description": "tunterm or radsecproxy or mxagent", "in": "path", "name": "name", "required": true, "schema": {"enum": ["tunterm", "radsecproxy", "mxagent"], "type": "string"}}, {"description": "restart or start or stop", "in": "path", "name": "action", "required": true, "schema": {"enum": ["restart", "start", "stop"], "type": "string"}}], "post": {"description": "Control Services on a Mist Edge", "operationId": "controlOrgMxEdgeServices", "tags": ["Orgs MxEdges"]}}}}}}}, "unregister": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "In the case where a Mist Edge is replaced, you would need to unregister it. Which disconnects the currently the connected Mist Edge and allow another to register.", "operationId": "unregisterOrgMxEdge", "tags": ["Orgs MxEdges"]}}}, "upgrade": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}], "post": {"description": "Upgrade MxEdge", "operationId": "upgradeOrgMxEdge", "tags": ["Orgs MxEdges"]}}}}}}}, "mxtunnels": {"specs": {"get": {"description": "Get Org MxTiunnels", "operationId": "getOrgMxTunnels", "tags": ["Orgs MxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create MxTunnel", "operationId": "createOrgMxTunnel", "tags": ["Orgs MxTunnels"]}}, "paths": {"{mxtunnel_id}": {"specs": {"delete": {"description": "Delete Org MxTunnel", "operationId": "deleteOrgMxTunnel", "tags": ["Orgs MxTunnels"]}, "get": {"description": "Get Org MxTunnel Details", "operationId": "getOrgMxTunnel", "tags": ["Orgs MxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxtunnel_id"}], "put": {"description": "Update Org MxTunnel", "operationId": "updateOrgMxTunnel", "tags": ["Orgs MxTunnels"]}}}}}, "networks": {"specs": {"get": {"description": "Get Organization Networks", "operationId": "getOrgNetworks", "tags": ["Orgs Networks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Organization Network", "operationId": "createOrgNetwork", "tags": ["Orgs Networks"]}}, "paths": {"{network_id}": {"specs": {"delete": {"description": "Delete Organization Network", "operationId": "deleteOrgNetwork", "tags": ["Orgs Networks"]}, "get": {"description": "Get Organization Network Details", "operationId": "get-api-v1-orgs-org_id-networks-network_id", "tags": ["Orgs Gateway Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/network_id"}], "put": {"description": "Update Organization Network", "operationId": "updateOrgNetwork", "tags": ["Orgs Networks"]}}}}}, "networktemplates": {"specs": {"get": {"description": "Get Org Network Templates", "operationId": "getOrgNetworkTemplates", "tags": ["Orgs Network Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Update Org Network Templates", "operationId": "createOrgNetworkTemplate", "tags": ["Orgs Network Templates"]}}, "paths": {"{networktemplate_id}": {"specs": {"delete": {"description": "Delete Org Network Template", "operationId": "deleteOrgNetworkTemplate", "tags": ["Orgs Network Templates"]}, "get": {"description": "Get Org Network Templates Details", "operationId": "getOrgNetworkTemplate", "tags": ["Orgs Network Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/networktemplate_id"}], "put": {"description": "Update Org Network Template", "operationId": "updateOrgNetworkTemplates", "parameters": [], "tags": ["Orgs Network Templates"]}}}}}, "ocdevices": {"paths": {"outbound_ssh_cmd": {"specs": {"get": {"description": "Get Org Juniper Devices command\n\nJuniper devices can be managed/adopted by Mist. Currently outbound-ssh + netconf is used.\nA few lines of CLI commands are generated per-Org, allowing the Juniper devices to phone home to Mist.", "operationId": "getOrgJuniperDevicesCommand", "tags": ["Orgs Devices"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "psks": {"specs": {"get": {"description": "Get Org Psks", "operationId": "getOrgPsks", "parameters": [{"example": "psk_name", "in": "query", "name": "name", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"in": "query", "name": "role", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Orgs Psks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org PSK", "operationId": "createOrgPsk", "tags": ["Orgs Psks"]}, "put": {"description": "Update multi PSKs", "operationId": "updateOrgMultiPsks", "tags": ["Orgs Psks"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Import PSK from CSV file or JSON\n\n##\u00a0CSV File Format\n```\nPSK Import CSV File Format:\nname,ssid,passphrase,usage,vlan_id,mac\nCommon,warehouse,foryoureyesonly,single,35,a31425f31278\nJustin,reception,visible,multi,1002\n```", "operationId": "importOrgPsk", "tags": ["Orgs Psks"]}}}, "{psk_id}": {"specs": {"delete": {"description": "Delete Org PSK", "operationId": "deleteOrgPsk", "tags": ["Orgs Psks"]}, "get": {"description": "Get Org PSK Details", "operationId": "getOrgPsk", "tags": ["Orgs Psks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/psk_id"}], "put": {"description": "Update Org PSK ", "operationId": "updateOrgPsk", "tags": ["Orgs Psks"]}}}}}, "rftemplates": {"specs": {"get": {"description": "Get Org RF Template", "operationId": "getOrgRfTemplates", "tags": ["Orgs RF Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org RF Template", "operationId": "createOrgRfTemplate", "tags": ["Orgs RF Templates"]}}, "paths": {"{rftemplate_id}": {"specs": {"delete": {"description": "Delete Org RF Template", "operationId": "deleteOrgRfTemplate", "tags": ["Orgs RF Templates"]}, "get": {"description": "Get Org RF Template Details", "operationId": "getOrgRfTemplate", "tags": ["Orgs RF Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/rftemplate_id"}], "put": {"description": "Update Org RF Template ", "operationId": "updateOrgRfTemplate", "tags": ["Orgs RF Templates"]}}}}}, "sdkclients": {"paths": {"{sdkclient_id}": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkclient_id"}], "put": {"description": "Update SDK Client", "operationId": "updateSdkClient", "tags": ["Orgs SDK Clients"]}}}}}, "sdkinvites": {"specs": {"get": {"description": "Get SDK Invites", "operationId": "getSdkInvites", "tags": ["Orgs SDK Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create SDK Invite", "operationId": "createSdkInvite", "tags": ["Orgs SDK Invites"]}}, "paths": {"{sdkinvite_id}": {"specs": {"delete": {"description": "Revoke SDK Invite", "operationId": "revokeSdkInvite", "tags": ["Orgs SDK Invites"]}, "get": {"description": "Get SDK Invite Details", "operationId": "getSdkInvite", "tags": ["Orgs SDK Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}], "put": {"description": "Update SDK Invite", "operationId": "updateSdkInvite", "tags": ["Orgs SDK Invites"]}}, "paths": {"email": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}], "post": {"description": "Send SDK Invite by Email", "operationId": "sendSdkInviteEmail", "tags": ["Orgs SDK Invites"]}}}, "qrcode": {"specs": {"get": {"description": "Revoke SDK Invite", "operationId": "getSdkInviteQrCode", "tags": ["Orgs SDK Invites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}]}}, "sms": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdkinvite_id"}], "post": {"description": "Send SDK Invite by SMS", "operationId": "sendSdkInviteSms", "tags": ["Orgs SDK Invites"]}}}}}}}, "sdktemplates": {"specs": {"get": {"description": "Get SDK Templates", "operationId": "getSdkTemplates", "tags": ["Orgs SDK Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create SDK Template", "operationId": "createSdkTemplate", "tags": ["Orgs SDK Templates"]}}, "paths": {"{sdktemplate_id}": {"specs": {"delete": {"description": "Delete SDK Template", "operationId": "deleteSdkTemplate", "tags": ["Orgs SDK Templates"]}, "get": {"description": "Get SDK Template Details", "operationId": "getSdkTemplate", "tags": ["Orgs SDK Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sdktemplate_id"}], "put": {"description": "Update SDK Template", "operationId": "updateSdkTemplate", "tags": ["Orgs SDK Templates"]}}}}}, "secpolicies": {"specs": {"get": {"description": "Get Org Security Policies", "operationId": "getOrgSecPolicies", "tags": ["Orgs SecPolicies"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Security Policy", "operationId": "createOrgSecPolicies", "tags": ["Orgs SecPolicies"]}}, "paths": {"{secpolicy_id}": {"specs": {"delete": {"description": "Delete Org Security Policy", "operationId": "deleteOrgSecPolicies", "tags": ["Orgs SecPolicies"]}, "get": {"description": "Get Org Security Policy", "operationId": "getOrgSecPolicy", "tags": ["Orgs SecPolicies"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/secpolicy_id"}], "put": {"description": "Update Org Security Policy", "operationId": "updateOrgSecPolicies", "tags": ["Orgs SecPolicies"]}}}}}, "services": {"specs": {"get": {"description": "Get Org Services", "operationId": "getOrgServices", "tags": ["Orgs Services"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create getOrgServices Service", "operationId": "createOrgService", "tags": ["Orgs Services"]}}}, "setting": {"specs": {"get": {"description": "Get Org Settings", "operationId": "getOrgSettings", "tags": ["Orgs Setting"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "put": {"description": "Update Org Settings", "operationId": "updateOrgSettings", "tags": ["Orgs Setting"]}}, "paths": {"blacklist": {"specs": {"delete": {"description": "Delete Org Blacklist Station Clients", "operationId": "deleteOrgClientsBlocklist", "tags": ["Orgs Setting"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Blacklist Client List. \nIf there is already a blacklist, this API will replace it with the new one. \nMax number of blacklist clients is 1000. \nRetrieve the current blacklisted clients from \u2018blacklist_url\u2019 under Org:Setting\n", "operationId": "createOrgClientsBlocklist", "tags": ["Orgs Setting"]}}}, "pcap_bucket": {"paths": {"setup": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Provide Customer Bucket Name\nSetting up Custom PCAP Bucket Involves the following:\n\nprovide the bucket name\nwe\u2019ll attempt to write a file MIST_TOKEN\nyou have to verify the ownership of the bucket by providing the content of the MIST_TOKEN", "operationId": "setOrgCustomBucket", "tags": ["Orgs Setting"]}}}, "verify": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Verify Customer PCAP Bucket\n\nNOTE: If successful, a \u201cVERIFIED\u201d file will be created in the bucket", "operationId": "verifyOrgCustomBucket", "tags": ["Orgs Setting"]}}}}}}}, "sitegroups": {"specs": {"get": {"description": "Get Org Site Groups", "operationId": "getOrgSiteGroups", "tags": ["Orgs Sitegroups"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Site Group", "operationId": "createOrgSiteGroup", "tags": ["Orgs Sitegroups"]}}, "paths": {"{sitegroup_id}": {"specs": {"delete": {"description": "Delete Org Site Group", "operationId": "deleteOrgSiteGroup", "tags": ["Orgs Sitegroups"]}, "get": {"description": "Get Org Site Group", "operationId": "getOrgSiteGroup", "tags": ["Orgs Sitegroups"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sitegroup_id"}], "put": {"description": "Update Org Site Group", "operationId": "updateOrgSiteGroup", "tags": ["Orgs Sitegroups"]}}}}}, "sites": {"specs": {"get": {"description": "Get Org Sites", "operationId": "getOrgSites", "tags": ["Orgs Sites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Site", "operationId": "createOrgSite", "tags": ["Orgs Sites"]}}, "paths": {"count": {"specs": {"get": {"description": "Count Sites", "operationId": "countOrgSites", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "id", "enum": ["analytic_enabled", "app_waking", "asset_enabled", "auto_upgrade_enabled", "auto_upgrade_version", "country_code", "honeypot_enabled", "id", "locate_unconnected", "mesh_enabled", "name", "rogue_enabled", "remote_syslog_enabled", "rtsa_enabled", "vna_enabled", "wifi_enabled"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Sites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Sites", "operationId": "searchOrgSites", "parameters": [{"description": "if Advanced Analytic feature is enabled", "in": "query", "name": "analytic_enabled", "schema": {"type": "boolean"}}, {"description": "if App Waking feature is enabled", "in": "query", "name": "app_waking", "schema": {"type": "boolean"}}, {"description": "if Asset Tracking is enabled", "in": "query", "name": "asset_enabled", "schema": {"type": "boolean"}}, {"description": "if Auto Upgrade feature is enabled", "in": "query", "name": "auto_upgrade_enabled", "schema": {"type": "boolean"}}, {"description": "if Auto Upgrade feature is enabled", "in": "query", "name": "auto_upgrade_version", "schema": {"type": "boolean"}}, {"description": "site country code", "in": "query", "name": "country_code", "schema": {"type": "string"}}, {"description": "if Honeypot detection is enabled", "in": "query", "name": "honeypot_enabled", "schema": {"type": "boolean"}}, {"description": "site id", "in": "query", "name": "id", "schema": {"type": "string"}}, {"description": "if unconnected client are located", "in": "query", "name": "locate_unconnected", "schema": {"type": "boolean"}}, {"description": "if Mesh feature is enabled", "in": "query", "name": "mesh_enabled", "schema": {"type": "boolean"}}, {"description": "site name", "in": "query", "name": "name", "schema": {"type": "string"}}, {"description": "if Rogue detection is enabled", "in": "query", "name": "rogue_enabled", "schema": {"type": "boolean"}}, {"description": "if Remote Syslog is enabled", "in": "query", "name": "remote_syslog_enabled", "schema": {"type": "boolean"}}, {"description": "if managed mobility feature is enabled", "in": "query", "name": "rtsa_enabled", "schema": {"type": "boolean"}}, {"description": "if Virtual Network Assistant is enabled", "in": "query", "name": "vna_enabled", "schema": {"type": "boolean"}}, {"description": "if WIFI feature is enabled", "in": "query", "name": "wifi_enabled", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Sites"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{site_name}": {"paths": {"maps": {"paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/site_name"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign matching inventory to specific site, place ap if name or mac matches\n\n#### Request\n\n```\n\"json\": a JSON string describing your upload\n\"file\": a binary file\n```", "operationId": "importOrgMapToSite", "tags": ["Orgs Sites"]}}}}}}}}}, "ssoroles": {"specs": {"get": {"description": "Get Org SSO Roles", "operationId": "getOrgSsoRoles", "tags": ["Orgs SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org SSO Role", "operationId": "createOrgSsoRole", "tags": ["Orgs SSO Roles"]}}, "paths": {"{ssorole_id}": {"specs": {"delete": {"description": "Delete Org SSO Role", "operationId": "deleteOrgSsoRoles", "tags": ["Orgs SSO Roles"]}, "get": {"description": "Get Org SSO Role Details", "operationId": "getOrgSsoRole", "tags": ["Orgs SSO Roles"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/ssorole_id"}], "put": {"description": "Update Org SSO Role", "operationId": "updateOrgSsoRole", "tags": ["Orgs SSO Roles"]}}}}}, "ssos": {"specs": {"get": {"description": "Get Org SSO Configuration", "operationId": "getOrgSsos", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org SSO Configuration", "operationId": "createOrgSso", "tags": ["Orgs SSO"]}}, "paths": {"{sso_id}": {"specs": {"delete": {"description": "Delete Org SSO Configuration", "operationId": "deleteOrgSso", "tags": ["Orgs SSO"]}, "get": {"description": "Get Org SSO Configuration Details", "operationId": "getOrgSso", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}], "put": {"description": "Update Org SSO Configuration", "operationId": "updateOrgSso", "tags": ["Orgs SSO"]}}, "paths": {"failures": {"specs": {"get": {"description": "Get Org SSO Latest Failures", "operationId": "getOrgSsoLatestFailures", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata": {"specs": {"get": {"description": "Get Org SSO SAML Metadata", "operationId": "getOrgSsoSamlMetadata", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}]}}, "metadata.xml": {"specs": {"get": {"description": "Download Org SSO SAML Metdata", "operationId": "downloadOrgSsoSamlMetadata", "tags": ["Orgs SSO"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/sso_id"}]}}}}}}, "stats": {"specs": {"get": {"description": "Get Org Stats", "operationId": "getOrgStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"assets": {"specs": {"get": {"description": "Get Org Assets Stats", "operationId": "getOrgAssetsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "devices": {"specs": {"get": {"description": "Org Devices stats\nThis API renders some high-level device stats, pagination is assumed and returned in response header (as the response is an array)\n", "operationId": "getOrgDevicesStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateways", "all"], "type": "string"}}, {"in": "query", "name": "status", "schema": {"default": "all", "enum": ["all", "connected", "disconnected"], "type": "string"}}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "mxedges": {"specs": {"get": {"description": "Get Org MxEdge Stats", "operationId": "getOrgMxEdgesStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}, "paths": {"{mxedge_id}": {"specs": {"get": {"description": "Get Org MxEdge Details Stats", "operationId": "getOrgMxEdgeStats", "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/mxedge_id"}]}}}}, "tunnels": {"paths": {"count": {"specs": {"get": {"description": "Count Org Mx Tunnels", "operationId": "countOrgMxTunnelsStats", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "wxtunnel_id", "enum": ["mxcluster_id", "wxtunnel_id", "site_id", "org_id"], "type": "string"}}, {"in": "query", "name": "mxcluster_id", "schema": {"type": "string"}}, {"in": "query", "name": "org_id", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "wxtunnel_id", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org MxTunnels Stats", "operationId": "getOrgMxTunnelsStats", "parameters": [{"in": "query", "name": "mxcluster_id", "schema": {"type": "string"}}, {"in": "query", "name": "org_id", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"in": "query", "name": "wxtunnel_id", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Stats"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "vpn_peers": {"paths": {"count": {"specs": {"get": {"description": "Count Org Peer Path Statgs", "operationId": "countOrgPeerPathStats", "parameters": [{"in": "query", "name": "distinct", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": []}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Org Peer Path Stats", "operationId": "searchOrgPeerPathStats", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Orgs VPNs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}}}, "subscriptions": {"specs": {"delete": {"description": "Unsubscribe from Org Alarms/Reports\nSubscriptions define how Org Alarms/Reports are delivered to whom", "operationId": "unsubscribeOrgAlarmsReports", "tags": ["Orgs Subscriptions"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Subscribe to Org Alarms/Reports\nSubscriptions define how Org Alarms/Reports are delivered to whom", "operationId": "subscribeOrgAlarmsReports", "tags": ["Orgs Subscriptions"]}}}, "templates": {"specs": {"get": {"description": "Get Org Templates", "operationId": "getOrgTemplates", "tags": ["Orgs Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Template", "operationId": "createOrgTemplate", "tags": ["Orgs Templates"]}}, "paths": {"{template_id}": {"specs": {"delete": {"description": "Delete Org Template", "operationId": "deleteOrgTemplate", "tags": ["Orgs Templates"]}, "get": {"description": "Get Org Template Details", "operationId": "getOrgTemplate", "tags": ["Orgs Templates"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/template_id"}], "put": {"description": "Update Org Template", "operationId": "updateOrgTemplate", "tags": ["Orgs Templates"]}}, "paths": {"clone": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/template_id"}], "post": {"description": "Clone Org Template", "operationId": "cloneOrgTemplate", "tags": ["Orgs Templates"]}}}}}}}, "tickets": {"specs": {"get": {"description": "Get Tickets of an Org", "operationId": "getOrgTickets", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}], "tags": ["Orgs Tickets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create a support ticket", "operationId": "createOrgTicket", "tags": ["Orgs Tickets"]}}, "paths": {"{ticket_id}": {"specs": {"get": {"description": "Get support ticket details", "operationId": "getOrgTicket", "tags": ["Orgs Tickets"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/ticket_id"}], "put": {"description": "Update support ticket", "operationId": "updateOrgTicket", "tags": ["Orgs Tickets"]}}, "paths": {"comments": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/ticket_id"}], "post": {"description": "Add Comment to support ticket", "operationId": "addOrgTicketComment", "tags": ["Orgs Tickets"]}}}}}}}, "vpns": {"specs": {"get": {"description": "Get Org VPNs", "operationId": "getOrgsVpns", "tags": ["Orgs VPNs"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org VPN", "operationId": "createOrgVpns", "tags": ["Orgs VPNs"]}}}, "webhooks": {"specs": {"get": {"description": "Get Org Webhooks", "operationId": "getOrgWebhooks", "tags": ["Orgs Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Webhook", "operationId": "createOrgWebhook", "tags": ["Orgs Webhooks"]}}, "paths": {"{webhook_id}": {"specs": {"delete": {"description": "Delete Org Webhook", "operationId": "deleteOrgWebhook", "tags": ["Orgs Webhooks"]}, "get": {"description": "Get Org Webhook Details", "operationId": "getOrgWebhook", "tags": ["Orgs Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/webhook_id"}], "put": {"description": "Update Org Webhook", "operationId": "updateOrgWebhook", "tags": ["Orgs Webhooks"]}}}}}, "wired_clients": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Clients", "operationId": "countOrgWiredClients", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "vlan", "mac"], "type": "string"}}, {"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "search": {"specs": {"get": {"description": "Search Wired Clients", "operationId": "searchOrgWiredClients", "parameters": [{"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Orgs Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}}}, "wlans": {"specs": {"get": {"description": "Get Org Wlans", "operationId": "getOrgWlans", "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org Wlan", "operationId": "createOrgWlan", "tags": ["Orgs Wlans"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Org WLAN Derived", "operationId": "getOrgWlanDerived", "parameters": [{"description": "whether to resolve SITE_VARS", "example": true, "in": "query", "name": "resolve", "schema": {"type": "boolean"}}], "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{wlan_id}": {"specs": {"delete": {"description": "Delete Org WLAN", "operationId": "deleteOrgWlan", "tags": ["Orgs Wlans"]}, "get": {"description": "Get Org Wlan Detail", "operationId": "getOrgWLAN", "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update Org Wlan", "operationId": "updateOrgWlan", "tags": ["Orgs Wlans"]}}, "paths": {"portal_image": {"specs": {"delete": {"description": "Delete Org WLAN Portal Image", "operationId": "deleteOrgWlanPortalImage", "tags": ["Orgs Wlans"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wlan_id"}], "post": {"description": "Upload Org WLAN Portal Image", "operationId": "uploadOrgWlanPortalImage", "tags": ["Orgs Wlans"]}}}, "portal_template": {"specs": {"parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update Org WLAN Portal Template", "operationId": "updateOrgWlanPortalTemplate", "tags": ["Orgs Wlans"]}}}}}}}, "wxrules": {"specs": {"get": {"description": "Get Org WxRules", "operationId": "getOrgWxRules", "tags": ["Orgs WxRules"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org WxRule", "operationId": "createOrgWxRule", "tags": ["Orgs WxRules"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Derived Org WxRule", "operationId": "getOrgWxRulesDerived", "tags": ["Orgs WxRules"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{wxrules_id}": {"specs": {"delete": {"description": "Delete Org WxRule", "operationId": "deleteOrgWxRule", "tags": ["Orgs WxRules"]}, "get": {"description": "Get Org WxRule Details", "operationId": "getOrgWxRule", "tags": ["Orgs WxRules"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxrules_id"}], "put": {"description": "Update Org WxRule", "operationId": "updateOrgWxRule", "tags": ["Orgs WxRules"]}}}}}, "wxtags": {"specs": {"get": {"description": "Get WxLAN Tags", "operationId": "getOrgWxTags", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create WxLAN Tag", "operationId": "createOrgWxTag", "tags": ["Orgs WxTags"]}}, "paths": {"apps": {"specs": {"get": {"description": "Get Application List", "operationId": "getOrgApplicationList", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}]}}, "{wxtag_id}": {"specs": {"delete": {"description": "Delete WxLAN Tag", "operationId": "deleteOrgWxTag", "tags": ["Orgs WxTags"]}, "get": {"description": "Get WxLAN Tag Details", "operationId": "getOrgWxTag", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxtag_id"}], "put": {"description": "Update WxLAN Tag", "operationId": "updateOrgWxTag", "tags": ["Orgs WxTags"]}}, "paths": {"clients": {"specs": {"get": {"description": "Get Current Matching Clients of a WXLAN Tag", "operationId": "getOrgCurrentMatchingClientsOfAWxTag", "tags": ["Orgs WxTags"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxtag_id"}]}}}}}}, "wxtunnels": {"specs": {"get": {"description": "Get Org WxLAN Tunnels", "operationId": "getOrgWxTunnels", "tags": ["Orgs WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}], "post": {"description": "Create Org WxAN Tunnel", "operationId": "createOrgWxTunnel", "tags": ["Orgs WxTunnels"]}}, "paths": {"{wxtunnel_id}": {"specs": {"delete": {"description": "Delete Org WxLAN Tunnel", "operationId": "deleteOrgWxTunnel", "tags": ["Orgs WxTunnels"]}, "get": {"description": "Get Org WxLAN Tunnel Details", "operationId": "getOrgWxTunnel", "tags": ["Orgs WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/org_id"}, {"$ref": "#/components/parameters/wxtunnel_id"}], "put": {"description": "Update Org WxLAN Tunnel", "operationId": "updateOrgWxTunnel", "tags": ["Orgs WxTunnels"]}}}}}}}}}, "recover": {"specs": {"post": {"description": "Recover Password\nAn email will also be sent to the user with a link to https://manage.mist.com/verify/recover?token=:token", "operationId": "recoverPassword", "tags": ["Self"]}}, "paths": {"verify": {"paths": {"{token}": {"specs": {"parameters": [{"$ref": "#/components/parameters/token"}], "post": {"description": "Verify Recover Password\nWith correct verification, the user will be authenticated. UI can then prompt for new password", "operationId": "verifyRecoverPasssword", "tags": ["Self"]}}}}}}}, "register": {"specs": {"post": {"description": "Register a new admin and his/her org\nAn email will also be sent to the user with a link to https://manage.mist.com/verify/register?token=:token", "operationId": "registerNewAdmin", "tags": ["Admin"]}}, "paths": {"verify": {"paths": {"{token}": {"specs": {"parameters": [{"$ref": "#/components/parameters/token"}], "post": {"description": "Verify registration", "operationId": "verifyRegistration", "tags": ["Admin"]}}}}}}}, "self": {"specs": {"delete": {"description": "To delete ones account and every associated with it. The effects:\n\nthe account would be deleted\nany orphaned Org (that only has this account as admin) will be deleted\nalong with all data with Org (sites, wlans, devices) will be gone.", "operationId": "deleteSelf", "tags": ["Self"]}, "get": {"description": "Get Account information", "operationId": "getSelf", "tags": ["Self"]}, "put": {"description": "update Account Information", "operationId": "updateSelf", "tags": ["Self"]}}, "paths": {"apitokens": {"specs": {"get": {"description": "List Current API Tokens", "operationId": "getApiTokens", "tags": ["API Token"]}, "post": {"description": "Create API Token\nNote that the key is only available during creation time.", "operationId": "createApiToken", "tags": ["API Token"]}}, "paths": {"{apitoken_id}": {"specs": {"delete": {"description": "Delete an API Token", "operationId": "deleteApiToken", "tags": ["API Token"]}, "parameters": [{"in": "path", "name": "apitoken_id", "required": true, "schema": {"type": "string"}}]}}}}, "logs": {"specs": {"get": {"description": "Audit logs records all administrative activities done by current admin across all orgs\n\nGet a list of change logs across all Orgs for current admin", "operationId": "getSelfAuditLogs", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Self"]}}}, "oauth": {"paths": {"{provider}": {"specs": {"get": {"description": "Obtain Authorization URL for Linking", "operationId": "getOAuth2UrlForLinking", "parameters": [{"in": "query", "name": "forward", "schema": {"example": "http://manage.mist.com/oauth/callback.html", "type": "string"}}], "tags": ["Login With OAuth2"]}, "parameters": [{"in": "path", "name": "provider", "required": true, "schema": {"type": "string"}}], "post": {"description": "Link Mist account with an OAuth2 Provider", "operationId": "linkOAuth2MistAccount", "tags": ["Login With OAuth2"]}}}}}, "subscriptions": {"specs": {"get": {"description": "Get all the subscriptions", "operationId": "getAlarmSubscriptions", "tags": ["Self"]}}}, "two_factor": {"paths": {"token": {"specs": {"get": {"description": "Generate QR code for verification", "operationId": "generateQrCodeForVerification", "parameters": [{"in": "query", "name": "by", "schema": {"default": "qrcode", "enum": ["qrcode"], "type": "string"}}], "tags": ["Self"]}}}, "verify": {"specs": {"post": {"description": "Verify Two-factor (OTP)\nTo verify two-factor authentication by using a code generated by app (e.g. Google Authenticator, Authy) or by SMS. Upon successful verification, the otp_verified will be set to true if it hasn\u2019t already been.", "operationId": "verifyTwoFactor", "tags": ["Self"]}}}}}, "update": {"specs": {"post": {"description": "Change Email\nWe require the user to verify that they actually own the email address they intend to change it to.\n\nAfter the API call, the user will receive an email to the new email address with a link like https://manage.mist.com/verify/update?expire=:exp_time&email=:admin_email&token=:token\n\nUpon clicking the link, the user is provided with a login page to authenticate using existing credentials. After successful login, the email address of the user gets updated\n\nNote: The request parameter email can be used by UI to validate that the current session (if any) belongs to the admin or provide a login page (by pre-populating the email on login screen). UI can also use the request parameter expire to validate token expiry.", "operationId": "updateSelfEmail", "tags": ["Self"]}}, "paths": {"verify": {"paths": {"{token}": {"specs": {"get": {"description": "Verify Email change", "operationId": "verifySelfEmail", "tags": ["Self"]}, "parameters": [{"$ref": "#/components/parameters/token"}]}}}}}}}}, "sites": {"paths": {"{site_id}": {"specs": {"delete": {"description": "Delete Site", "operationId": "deleteSite", "tags": ["Sites"]}, "get": {"description": "Get Site Info", "operationId": "getSiteInfo", "tags": ["Sites"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "put": {"description": "Update Site Info", "operationId": "updateSiteInfo", "tags": ["Sites"]}}, "paths": {"alarms": {"paths": {"ack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Ack multiple Site Alarms", "operationId": "multiAckSiteAlarms", "tags": ["Sites Alarms"]}}}, "ack_all": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Ack all Site Alarms\n\n**N.B.**: Batch size for multiple alarm ack and unack has to be less or or equal to 1000.", "operationId": "ackSiteAllAlarms", "tags": ["Sites Alarms"]}}}, "count": {"specs": {"get": {"description": "Count Site Alarms", "operationId": "countSiteAlarms", "parameters": [{"description": "Group by and count the alarms by some distinct field", "in": "query", "name": "distinct", "schema": {"default": "type", "enum": ["type", "acked", "severity", "group"], "type": "string"}}, {"description": "Name of the admins who have acked the alarms; accepts multiple values separated by comma", "in": "query", "name": "ack_admin_name", "schema": {"type": "string"}}, {"in": "query", "name": "acked", "schema": {"type": "boolean"}}, {"description": "Key-name of the alarms; accepts multiple values separated by comma", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "Alarm severity; accepts multiple values separated by comma", "in": "query", "name": "severity", "schema": {"type": "string"}}, {"description": "Alarm group name; accepts multiple values separated by comma", "in": "query", "name": "group", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Alarms"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Site Alarms", "operationId": "getSiteAlarms", "parameters": [{"description": "Key-name of the alarms; accepts multiple values separated by comma", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "Name of the admins who have acked the alarms; accepts multiple values separated by comma", "in": "query", "name": "ack_admin_name", "schema": {"type": "string"}}, {"in": "query", "name": "acked", "schema": {"type": "boolean"}}, {"description": "Alarm severity; accepts multiple values separated by comma", "in": "query", "name": "severity", "schema": {"type": "string"}}, {"description": "Alarm group name; accepts multiple values separated by comma", "in": "query", "name": "group", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Alarms"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "unack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Unack multiple Site Alarms", "operationId": "multiUnackSiteAlarms", "tags": ["Sites Alarms"]}}}, "unack_all": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Unack all Site Alarms\n\n**N.B.**: Batch size for multiple alarm ack and unack has to be less or or equal to 1000.", "operationId": "unackSiteAllArlarms", "tags": ["Sites Alarms"]}}}, "{alarm_id}": {"paths": {"ack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/alarm_id"}], "post": {"description": "Ack Site Alarm", "operationId": "ackSiteAlarm", "tags": ["Sites Alarms"]}}}, "unack": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/alarm_id"}], "post": {"description": "Unack Site Alarm", "operationId": "unackSiteAlarm", "tags": ["Sites Alarms"]}}}}}}}, "anomaly": {"paths": {"client": {"paths": {"{client_mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get Client Anomaly Events", "operationId": "getSiteAnomalyEventsForClient", "tags": ["Sites Anomaly"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}, {"$ref": "#/components/parameters/metric"}]}}}}}}, "device": {"paths": {"{device_mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get Device Anomaly Events", "operationId": "getSiteAnomalyEventsforDevice", "tags": ["Sites Anomaly"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/metric"}, {"$ref": "#/components/parameters/device_mac"}]}}}}}}, "{metric}": {"specs": {"get": {"description": "Get Site Anomaly Events", "operationId": "getSiteAnomalyEvents", "tags": ["Sites Anomaly"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/metric"}]}}}}, "apps": {"specs": {"get": {"description": "Get Application List", "operationId": "getSiteApps", "tags": ["Sites Applications"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "assetfilters": {"specs": {"get": {"description": "Get Site Asset Filters", "operationId": "getSiteAssetFilters", "tags": ["Sites Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Asset Filter", "operationId": "createSiteAssetFilters", "tags": ["Sites Asset Filters"]}}, "paths": {"{assetfilter_id}": {"specs": {"delete": {"description": "Deletes an existing BLE asset filter for the given site.", "operationId": "deleteSiteAssetFilter", "tags": ["Sites Asset Filters"]}, "get": {"description": "Get Site Asset Filter Details", "operationId": "getSiteAssetFilter", "tags": ["Sites Asset Filters"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/assetfilter_id"}], "put": {"description": "Updates an existing BLE asset filter for the given site.", "operationId": "updateSiteAssetFilter", "tags": ["Sites Asset Filters"]}}}}}, "assets": {"specs": {"get": {"description": "Get Site Assets", "operationId": "getSiteAssets", "tags": ["Sites Assets"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Asset", "operationId": "createSiteAsset", "tags": ["Sites Assets"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Impert Site Assets. \n\nIt can be done via a CSV file or a JSON payload.\n\n## CSV File Format\n```\nname,mac\n\"asset_name\",5c5b53010101\n``` ", "operationId": "importSiteAssets", "parameters": [{"description": "API will replace the assets with same mac if provided `upsert`==`True`, otherwise will report in errors in response.", "in": "query", "name": "upsert", "schema": {"default": "False", "enum": ["True", "False"], "type": "string"}}], "tags": ["Sites Assets"]}}}, "{asset_id}": {"specs": {"delete": {"description": "Delete Site Asset", "operationId": "deleteSiteAsset", "tags": ["Sites Assets"]}, "get": {"description": "Get Site Asset Details", "operationId": "getSiteAsset", "tags": ["Sites Assets"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/asset_id"}], "put": {"description": "Update Site Asset", "operationId": "updateSiteAsset", "tags": ["Sites Assets"]}}}}}, "beacons": {"specs": {"get": {"description": "Get Site Beacons", "operationId": "getSiteBeacons", "tags": ["Sites Beacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Beacon", "operationId": "createSiteBeacon", "tags": ["Sites Beacons"]}}, "paths": {"{beacon_id}": {"specs": {"delete": {"description": "Delete Site Beacon", "operationId": "deleteSiteBeacons", "tags": ["Sites Beacons"]}, "get": {"description": "Get Site Beacon Details", "operationId": "getSiteBeacon", "tags": ["Sites Beacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/beacon_id"}], "put": {"description": "Update Site Beacon", "operationId": "updateSiteBeacons", "tags": ["Sites Beacons"]}}}}}, "clients": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Clients", "operationId": "countSiteByDistinctAttributesOfClients", "parameters": [{"example": "hostname", "in": "query", "name": "distinct", "required": true, "schema": {"default": "device", "enum": ["ssid", "ap", "ip", "vlan", "hostname", "os", "model", "device"], "type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"in": "query", "name": "ip", "schema": {"type": "string"}}, {"in": "query", "name": "vlan", "schema": {"type": "string"}}, {"in": "query", "name": "hostname", "schema": {"type": "string"}}, {"in": "query", "name": "os", "schema": {"type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "device", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "disconnect": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "To unauthorize multiple clients", "operationId": "disconnectSiteMultipleClients", "tags": ["Sites Clients"]}}}, "events": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Client-Events", "operationId": "countSiteByDistinctAttributesOfClientsEvents", "parameters": [{"description": "type / proto / band / channel / wlan_id / ssid", "example": "type", "in": "query", "name": "distinct", "schema": {"enum": ["type", "proto", "band", "channel", "wlan_id", "ssid"], "type": "string"}}, {"description": "event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "for assoc/disassoc events", "in": "query", "name": "reason_code", "schema": {"type": "integer"}}, {"description": "SSID Name", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "802.11 standard", "in": "query", "name": "proto", "schema": {"enum": ["b", "g", "n", "ac", "ax", "a"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Get Site Clients Events", "operationId": "searchSiteClientEvents", "parameters": [{"description": "event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "for assoc/disassoc events", "in": "query", "name": "reason_code", "schema": {"type": "integer"}}, {"description": "SSID Name", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "802.11 standard", "in": "query", "name": "proto", "schema": {"enum": ["b", "g", "n", "ac", "ax", "a"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"enum": ["24", "5"], "type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "search": {"specs": {"get": {"description": "Search Wireless Clients\n\nNOTE: fuzzy logic can be used with \u2018*\u2019, supported filters: mac, hostname, device, os, model. E.g. /clients/search?device=Mac*&hostname=jerry", "operationId": "searchSiteClients", "parameters": [{"description": "partial / full MAC address", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type, e.g. Mac, Nvidia, iPhone", "in": "query", "name": "device", "schema": {"type": "string"}}, {"description": "os, e.g. Sierra, Yosemite, Windows 10", "in": "query", "name": "os", "schema": {"type": "string"}}, {"description": "model, e.g. \u201cMBP 15 late 2013\u201d, 6, 6s, \u201c8+ GSM\u201d", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "AP mac where the client has connected to", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "full MAC address, hostname, username or ip", "in": "query", "name": "text", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "sessions": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Client Sessions", "operationId": "countSiteByDistinctAttributesOfClientSessions", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["ssid", "wlan_id", "ap", "mac", "client_family", "client_manufacture", "client_model", "client_os"], "type": "string"}}, {"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "24 /5", "in": "query", "name": "band", "schema": {"type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Client Sessions", "operationId": "searchSiteClientSessions", "parameters": [{"description": "AP MAC", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"description": "24 /5", "in": "query", "name": "band", "schema": {"type": "string"}}, {"description": "E.g. \u201cMac\u201d, \u201ciPhone\u201d, \u201cApple watch\u201d", "in": "query", "name": "client_family", "schema": {"type": "string"}}, {"description": "E.g. \u201cApple\u201d", "in": "query", "name": "client_manufacture", "schema": {"type": "string"}}, {"description": "E.g. \u201c8+\u201d, \u201cXS\u201d", "in": "query", "name": "client_model", "schema": {"type": "string"}}, {"description": "E.g. \u201cMojave\u201d, \u201cWindows 10\u201d, \u201cLinux\u201d", "in": "query", "name": "client_os", "schema": {"type": "string"}}, {"description": "SSID", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "wlan_id", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "unauthorize": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This unauthorize clients (if they are guest) and disconnect them. From the guest\u2019s perspective, they will see the splash page again and go through the flow (e.g. Terms of Use) again.", "operationId": "unauthorizeSiteMultipleClients", "tags": ["Sites Clients"]}}}, "{client_mac}": {"paths": {"disconnect": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}], "post": {"description": "This disconnect a client (and it\u2019s likely to connect back)", "operationId": "disconnectSiteClient", "tags": ["Sites Clients"]}}}, "events": {"specs": {"get": {"description": "Get the list of events for a specific client", "operationId": "getSiteEventsForClient", "parameters": [{"description": "e.g. MARVIS_EVENT_CLIENT_DHCP_STUCK", "in": "query", "name": "type", "schema": {"enum": ["b", "g", "n"], "type": "string"}}, {"description": "a / b / g / n / ac / ax", "in": "query", "name": "proto", "schema": {"enum": ["a", "b", "g", "n", "ac", "ax"], "type": "string"}}, {"description": "24 / 5", "in": "query", "name": "band", "schema": {"type": "string"}}, {"in": "query", "name": "channel", "schema": {"type": "string"}}, {"in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}]}}, "unauthorize": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}], "post": {"description": "This unauthorize a client (if it\u2019s a guest) and disconnect it. From the guest\u2019s perspective, s/he will see the splash page again and go through the flow (e.g. Terms of Use) again.", "operationId": "unauthorizeSiteClient", "tags": ["Sites Clients"]}}}}}}}, "devices": {"specs": {"get": {"description": "Get list of devices on the site.", "operationId": "getSiteDevices", "parameters": [{"description": "device type", "in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateway"], "type": "string"}}, {"$ref": "#/components/parameters/name"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create a device", "operationId": "createSiteDevice", "tags": ["Sites Devices"]}}, "paths": {"ap_channels": {"specs": {"get": {"description": "Get a list of allowed channels (per channel width)", "operationId": "getSiteDeviceRadioChannels", "parameters": [{"description": "country code for the site (for AP config generation), in two-character", "example": "US", "in": "query", "name": "country_code", "schema": {"type": "string"}}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "config_history": {"paths": {"count": {"specs": {"get": {"description": "Counts the number of entries in device config history for distinct field with given filters", "operationId": "countSiteDeviceConfigHistory", "parameters": [{"in": "query", "name": "distinct", "schema": {"type": "string"}}, {"in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search for entries in device config history", "operationId": "searchSiteDeviceConfigHistory", "parameters": [{"description": "AP Mac Address", "in": "query", "name": "ap", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "count": {"specs": {"get": {"description": "Counts the number of entries in ap events history for distinct field with given filters", "operationId": "countSiteDevices", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "model", "enum": ["model", "version", "map_id", "hostname", "mxtunnel_status", "mxedge_id", "lldp_system_name", "lldp_system_desc", "lldp_port_id", "lldp_mgmt_addr"], "type": "string"}}, {"in": "query", "name": "hostname", "schema": {"type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "mac", "schema": {"type": "string"}}, {"in": "query", "name": "version", "schema": {"type": "string"}}, {"in": "query", "name": "mxtunnel_status", "schema": {"type": "string"}}, {"in": "query", "name": "mxedge_id", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"in": "query", "name": "map_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "events": {"paths": {"count": {"specs": {"get": {"description": "Counts the number of entries in ap events history for distinct field with given filters", "operationId": "countSiteDeviceEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "model", "enum": ["model", "type", "type_code", "mac"], "type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"type": "string"}}, {"in": "query", "name": "type_code", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search AP Events", "operationId": "searchSiteDeviceEvents", "parameters": [{"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"type": "string"}}, {"in": "query", "name": "type_code", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "export": {"specs": {"get": {"description": "To download the exported device information\n\nResponse:\nmac,name,map_id,x,y,height,orientation,labels,type\n5c5b53010101,\"AP 1\",845a23bf-bed9-e43c-4c86-6fa474be7ae5,30,10,2.3,45,\"guest, campus, vip\",\"ap\"", "operationId": "exportSiteDeviceInformation", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "last_config": {"paths": {"count": {"specs": {"get": {"description": "Counts the number of entries in device config history for distinct field with given filters", "operationId": "countSiteDeviceLastConfig", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "ap", "enum": ["ap", "version", "name", "site_id"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Device Last Configs", "operationId": "searchSiteDeviceLastConfigs", "parameters": [{"in": "query", "name": "ap", "schema": {"type": "string"}}, {"in": "query", "name": "version", "schema": {"type": "string"}}, {"in": "query", "name": "name", "schema": {"type": "string"}}, {"in": "query", "name": "site_id", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "reprovision": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "To force all APs to reprovision itself again. ", "operationId": "reprovisionSiteAllAps", "tags": ["Sites Devices"]}}}, "reset_radio_config": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Reset all APs in the Site to use RRM", "operationId": "resetSiteAllApsToUseRrm", "tags": ["Sites Devices"]}}}, "restart": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Note that only the devices that are connected will be restarted.", "operationId": "multiRestartSiteDevices", "tags": ["Sites Devices"]}}}, "search": {"specs": {"get": {"description": "Search Device", "operationId": "searchSiteDevices", "parameters": [{"description": "partial / full hostname", "in": "query", "name": "hostname", "schema": {"type": "string"}}, {"description": "device type", "in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateway"], "type": "string"}}, {"description": "device model", "in": "query", "name": "model", "schema": {"type": "string"}}, {"description": "device MAC", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "version", "in": "query", "name": "version", "schema": {"type": "string"}}, {"description": "ip address", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"description": "MxTunnel status, up / down", "in": "query", "name": "mxtunnel_status", "schema": {"enum": ["up", "down"], "type": "string"}}, {"description": "Mist Edge id, if AP is connecting to a Mist Edge", "in": "query", "name": "mxedge_id", "schema": {"format": "uuid", "type": "string"}}, {"description": "LLDP system name", "in": "query", "name": "lldp_system_name", "schema": {"type": "string"}}, {"description": "LLDP system description", "in": "query", "name": "lldp_system_desc", "schema": {"type": "string"}}, {"description": "LLDP port id", "in": "query", "name": "lldp_port_id", "schema": {"type": "string"}}, {"description": "LLDP management ip address", "in": "query", "name": "lldp_mgmt_addr", "schema": {"type": "string"}}, {"description": "sort options", "in": "query", "name": "sort", "schema": {"default": "timestamp", "enum": ["timestamp", "mac", "model", "sku"], "type": "string"}}, {"description": "sort options in reverse order", "in": "query", "name": "desc-sort", "schema": {"enum": ["timestamp", "mac", "model", "sku"], "type": "string"}}, {"description": "whether to return device stats", "in": "query", "name": "stats", "schema": {"default": false, "type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "upgrade": {"specs": {"get": {"description": "Get all upgrades for site", "operationId": "getSiteDevicesUpgrade", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Upgrade Multiple Device\nNote that this call doesn\u2019t guarantee the devices to be upgraded right away (they may be offline)", "operationId": "multiUpgradeSiteDevices", "tags": ["Sites Devices"]}}, "paths": {"cancel": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Best effort to cancel an upgrade. Devices which are already upgraded wont be touched", "operationId": "cancelSiteDeviceUpgrade", "tags": ["Sites Devices"]}}}}}, "versions": {"specs": {"get": {"description": "Get Available Device Versions", "operationId": "getSiteAvailableDeviceVersions", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "zerioze": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Zeroize all FIPS APs in the Site", "operationId": "zeroizeSiteFipsAllAps", "tags": ["Sites Devices"]}}}, "{device_id}": {"specs": {"delete": {"description": "Delete Site Device", "operationId": "deleteSiteDevice", "tags": ["Sites Devices"]}, "get": {"description": "Get Device Configuration", "operationId": "getSiteDevice", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "put": {"description": "Update Device Configuration", "operationId": "updateSiteDevice", "tags": ["Sites Devices"]}}, "paths": {"arp": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "ARP can be performed on the Device. The output will be available through websocket. As there can be multiple command issued against the same AP at the same time and the output all goes through the same websocket stream, session is introduced for demux.", "operationId": "arpFromDevice", "tags": ["Sites Devices Utilities"]}}}, "bounce_port": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Port Bounce can be performed from the Switch.", "operationId": "portsBounceFromSwitch", "tags": ["Sites Devices Utilities"]}}}, "cable_test": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "TDR can be performed from the Switch. The output will be available through websocket. As there can be multiple command issued against the same Switch at the same time and the output all goes through the same websocket stream, session is introduced for demux.", "operationId": "cableTestFromSwitch", "tags": ["Sites Devices Utilities"]}}}, "clear_bpdu_error": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Clear bridge protocol data unit (BPDU) error condition caused by the detection of a possible bridging loop from Spanning Tree Protocol (STP) operation that renders the port unoperational.", "operationId": "clearBpduErrosFromPortsOnSwitch", "tags": ["Sites Devices Utilities"]}}}, "clear_macs": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Clear all learned MAC addresses, including persistent MAC addresses, on a port.", "operationId": "clearAllLearnedMacsFromPortOnSwitch", "tags": ["Sites Devices Utilities"]}}}, "config_cmd": {"specs": {"get": {"description": "Get Config CLI Commands\nFor a brown-field switch deployment where we adopted the switch through Adoption Command, we do not wipe out / overwrite the existing config automatically. Instead, we generate CLI commands that we would have generated. The user can inspect, modify, and incorporate this into their existing config manually.\n\nOnce they feel comfortable about the config we generate, they can enable allow_mist_config where we will take full control of their config like a claimed switch", "operationId": "getSiteDeviceConfigCmd", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}]}}, "iot": {"specs": {"get": {"description": "Returns the current state of each enabled IoT pin configured as an output.", "operationId": "getSiteDeviceIotPort", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "put": {"description": "Note: For each IoT pin referenced\u2026\n * The pin must be enabled using the Device \u2018iot_config\u2019 API\n * The pin must support the output direction", "operationId": "setSiteDeviceIotPort", "tags": ["Sites Devices"]}}}, "local_port_config": {"specs": {"delete": {"description": "Delete the local port config on a switch", "operationId": "deleteSiteSwitchLocalPortConfig", "tags": ["Sites Devices"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "device_id", "required": true, "schema": {"type": "string"}}], "put": {"description": "### How does it show up in Device Config\n\n`local_port_config` will show up separately from the `port_config` so it can be easily identified (and cleared)\n\n`````\n{\n \"local_port_config\": {\n \"ge-0/0/5-7\": { ... }\n }\n}\n`````", "operationId": "updateSiteSwitchLocalPortConfig", "tags": ["Sites Devices"]}}}, "locate": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Locate a Device by blinking it\u2019s LED, it\u2019s a persisted state that has to be stopped by calling Stop Locating API", "operationId": "startSiteLocateDevice", "tags": ["Sites Devices"]}}}, "ping": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Ping can be performed from the Device. The output will be available through websocket. As there can be multiple command issued against the same AP at the same time and the output all goes through the same websocket stream, session is introduced for demux.\n\n#### subscribe to Device Command outputs\n```\n{\n \"subscribe\": \"/sites/{site_id}/devices/{device_id}/cmd\"\n}\n```\n##### The Actual Output Data\n```\n{\n \"event\": \"data\",\n \"channel\": \"/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd\",\n \"data\": {\n \"session\": \"session_id\",\n \"raw\": \"64 bytes from 23.211.0.110: seq=8 ttl=58 time=12.323 ms\\n\"\n }\n}\n```", "operationId": "pingFromDevice", "tags": ["Sites Devices Utilities"]}}}, "poll_stats": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "This API can be used to poll statistics from the Switch proactively once. After it is called, the statistics will be pushed back to the cloud within the statistics interval.", "operationId": "pollSiteSwitchStats", "tags": ["Sites Devices"]}}}, "restart": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Restart / Reboot a device", "operationId": "restartSiteDevice", "tags": ["Sites Devices"]}}}, "support": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Support / Upload device support files\n\n#### Info Param\n**Parameter**|**Type**|**Description** \n :-------------: |:-------------: |:-------------: \nprocess|string|Upload 1 file with output of show system processes extensive\noutbound-ssh|string|Upload 1 file that concatenates all /var/log/outbound-ssh.log* files\nmessages|string|Upload 1 to 10 /var/log/messages* files\ncore-dumps|string|Upload all core dump files, if any\nfull|string|Upload 1 file with output of request support information, 1 file that concatenates all /var/log/outbound-ssh.log files, all core dump files, and the 3 most recent /var/log/messages files", "operationId": "uploadSiteDeviceSupportFile", "tags": ["Sites Devices"]}}}, "traceroute": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Traceroute can be performed from the Device. The output will be available through websocket. As there can be multiple command issued against the same AP at the same time and the output all goes through the same websocket stream, session is introduced for demux.", "operationId": "tracerouteFromDevice", "tags": ["Sites Devices Utilities"]}}}, "unlocate": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Stop Locate a Device", "operationId": "stopSiteLocateDevice", "tags": ["Sites Devices"]}}}, "upgrade": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Device Upgrade", "operationId": "upgradeSiteDevice", "tags": ["Sites Devices"]}}}, "vc": {"specs": {"delete": {"description": "When all the member switches of VC are removed and only member ID 0 is left, the cloud would detect this situation and automatically changes the single switch to non-VC role.\n\nFor some unexpected cases that the VC is gone and disconncted, the API below could be used to change the state of VC\u2019s switches to be standalone. After it is executed, all the switches will be shown as standalone switches under Inventory.\n", "operationId": "deleteSiteVirtualChassis", "tags": ["Sites Devices Virtual Chassis"]}, "get": {"description": "Get VC Status\nThe API returns a combined view of the VC status which includes topology and stats_", "operationId": "getSiteVirtualChassis", "tags": ["Sites Devices Virtual Chassis"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "For models (e.g. EX3400 and up) having dedicated VC ports, it is easier to form a VC by just connecting cables with the dedicated VC ports. Cloud will detect the new VC and update the inventory.\n\nIn case that the user would like to choose the dedicated switch as a VC master. Or for EX2300-C-12P and EX2300-C-12T which doesn\u2019t have dedicated VC ports, below are procedures to automate the VC creation:\n\n1. Power on the switch that is choosen as the VC master first. And the powering on the other member switches.\n2. Claim or adopt all these switches under the same organization\u2019s Inventory\n3. Assign these switches into the same Site\n4. Invoke vc command on the switch choosen to be the VC master. For EX2300-C-12P, VC ports will be created automatically.\n5. Connect the cables to the VC ports for these switches\n6. Wait for the VC to be formed. The Org\u2019s inventory will be updated for the new VC.", "operationId": "createSiteVirtualChassis", "tags": ["Sites Devices Virtual Chassis"]}, "put": {"description": "## Add new members\nFor models (e.g. EX4300 and up) having dedicated VC ports, it is easier to add new member switches into a VC by just connecting cables with the dedicated VC ports. Cloud will detect the new members and update the inventory.\n\nFor EX2300 VC, adding new members requires to follow the procedures below:\n1. Powering on the new member switches and ensuring cables are not connected to any VC ports.\n2. Claim or adopt all new member switches under the VC\u2019s organization Inventory\n3. Assign all new member switches to the same Site as the VC\n4. Invoke vc command to add switches to the VC.\n5. Connect the cables to the VC ports for these switches\n6. After a while, the Org\u2019s Inventory shows this new switches has been added into the VC.\n\n## Removing member switch\nTo remove a member switch from the VC, following the procedures below:\n\n1. Ensuring the VC is connected to the cloud first\n2. Unplug the cable from the VC port of the switch\n3. Waiting for the VC state (vc_state) of this switch is changed to not-present\n4. Invoke update_vc with remove to remove this switch from the VC\n5. The Org\u2019s Inventory shows the switch is removed.\n\nPlease notice that member ID 0 (fpc0) cannot be removed. When a VC has two switches left, unpluging the cable may result in the situation that fpc0 becomes a line card (LC). When this situation is happened, please re-plug in the cable, wait for both switches becoming present (show virtual-chassis) and then removing the cable again.\n\n## Renumber a member switch\nWhen a member switch doesn\u2019t work properly and needed to be replaced, the renumber API could be used. The following two types of renumber are supported:\n\n1. Replace a non-fpc0 member switch\n2. Replace fpc0. When fpc0 is relaced, PAPI device config and JUNOS config will be both updated.\n\nFor renumber to work, the following procedures are needed: \n1. Ensuring the VC is connected to the cloud and the state of the member switch to be replaced must be non present. \n2. Adding the new member switch to the VC \n3. Waiting for the VC state (vc_state) of this VC to be updated to API server \n4. Invoke vc with renumber to replace the new member switch from fpc X to", "operationId": "removeSiteVirtualChassisMember", "tags": ["Sites Devices Virtual Chassis"]}}, "paths": {"vc_port": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "post": {"description": "Set VC port", "operationId": "setSiteVcPort", "tags": ["Sites Devices Virtual Chassis"]}}}}}, "{image_name}": {"specs": {"delete": {"description": "Delete image from a device", "operationId": "deleteSiteDeviceImage", "tags": ["Sites Devices"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}, {"$ref": "#/components/parameters/image_name"}], "post": {"description": "Attach up to 3 images to a device", "operationId": "addSiteDeviceImage", "tags": ["Sites Devices"]}}}}}}}, "events": {"paths": {"fast_roam": {"specs": {"get": {"description": "Roaming Events data", "operationId": "getSiteRoamingEvents", "parameters": [{"description": "event type", "in": "query", "name": "type", "schema": {"enum": ["success", "fail", "none"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "interference": {"specs": {"get": {"description": "Get Interference Events", "operationId": "getSiteInterferenceEvents", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "system": {"paths": {"count": {"specs": {"get": {"description": "Count System Events", "operationId": "countSiteSystemEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "type", "enum": ["type"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search System Events", "operationId": "searchSiteSystemEvents", "parameters": [{"in": "query", "name": "type", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Events"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}}}, "evpn_topologies": {"specs": {"get": {"description": "Get the existing EVPN topology", "operationId": "getSiteEvpnTopologies", "tags": ["Sites Devices EVPN"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"type": "string"}}], "post": {"description": "While all the `evpn_id` / `downlink_ips` can be specifidd by hand, the easiest way is to call the `build_vpn_topology` API, allowing you to examine the diff, and update it yourself. You can also simply call it with `overwrite=true` which will apply the updates for you.\n\n*Notes:*\n1. You can use `core` / `distribution` / `access` to create a CLOS topology (or `super-spine` / `spine` / `leaf`)\n2. You can also use `core` / `distribution` to form a 2-tier EVPN topology where ESI-Lag is configured distribution to connect to access switches\n3. In a small/medium campus, `collapsed-core` can be used where core switches are the inter-connected to do EVPN\n4. The API uses a few pre-defined parameters and best-practices to generate the configs. It can be customized by using `evpn_options` in Site Setting / Network Template. (e.g. a different subnet for the underlay)\n\n## Collapsed Core\nIn a small-medium campus, EVPN can also be enabled only at the core switches (up to 4) by assigning all participating switches with `collapsed-core role`. When there are more than 2 switches, a ring-like topology will be formed.\n\n## ESI-Lag\nIf the access switchess does not have EVPN support, you can still take advantage of EVPN by setting up ESI-Lag on distribution switches\n\n## Leaf / Access / Collapsed-Core\nFor leaf nodes in a EVPN topology, you\u2019d have to configure the IPs for networks that would participate in EVPN. Optionally, VRFs to isolate traffic from one tenant verus another", "operationId": "createSiteEvpnTopology", "tags": ["Sites Devices EVPN"]}}, "paths": {"{evpn_topology_id}": {"specs": {"delete": {"description": "Delete the site EVPN Topology", "operationId": "deleteSiteEvpnTopology", "tags": ["Sites Devices EVPN"]}, "get": {"description": "Get One EVPN Topology Detail", "operationId": "getSiteEvpnTolopogy", "tags": ["Sites Devices EVPN"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/evpn_topology_id"}], "put": {"description": "Update the EVPN Topolgy", "operationId": "updateSiteEvpnTopology", "tags": ["Sites Devices EVPN"]}}}}}, "guests": {"specs": {"get": {"description": "Get Guest Authorizations", "operationId": "getSiteAllGuestAuthorizations", "parameters": [{"description": "UUID of single or multiple (Comma separated) WLAN under Site `site_id` (to filter by WLAN)", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}], "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"count": {"specs": {"get": {"description": "Count Authorized Guest", "operationId": "countSiteGuestAuthorizations", "parameters": [{"example": "auth_method", "in": "query", "name": "distinct", "schema": {"default": "auth_method", "enum": ["auth_method", "ssid", "company"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Authorized Guest", "operationId": "searchSiteGuestAuthorization", "parameters": [{"example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "wlan_id", "schema": {"type": "string"}}, {"in": "query", "name": "auth_method", "schema": {"type": "string"}}, {"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{guest_mac}": {"specs": {"delete": {"description": "Delete Guest Authorization", "operationId": "deleteSiteGuestAuthorization", "tags": ["Sites Guests"]}, "get": {"description": "Get Guest Authorization", "operationId": "getSiteGuestAuthorization", "tags": ["Sites Guests"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/guest_mac"}], "put": {"description": "Update Guest Authorization ", "operationId": "updateSiteGuestAuthorization", "tags": ["Sites Guests"]}}}}}, "insights": {"paths": {"client": {"paths": {"{client_mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get Client Insight Metrics\nSee metrics possibilities at /api/v1/const/insight_metrics", "operationId": "getSiteInsightMetricsForClient", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}, {"$ref": "#/components/parameters/metric"}]}}}}}}, "device": {"paths": {"{mac}": {"paths": {"{metric}": {"specs": {"get": {"description": "Get AP Insight Metrics\nSee metrics possibilities at /api/v1/const/insight_metrics", "operationId": "getSiteInsightMetricsForDevice", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, {"in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "mac", "required": true, "schema": {"type": "string"}}]}}}}}}, "rogues": {"specs": {"get": {"description": "Get Site Rogue/Neighbor APs", "operationId": "getSiteRogueAPs", "parameters": [{"$ref": "#/components/parameters/rogue_type"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"clients": {"specs": {"get": {"description": "Get Rogue Clients", "operationId": "getSiteRogueClients", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "{metric}": {"specs": {"get": {"description": "Get Site Insight Metrics\nSee metrics possibilities at /api/v1/const/insight_metrics", "operationId": "getSiteInsightMetrics", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Insights"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/metric"}]}}}}, "licenses": {"paths": {"usages": {"specs": {"get": {"description": "This shows license usage (i.e. needed) based on the features enabled for the site.", "operationId": "getSiteLicenseUsage", "tags": ["Sites Licenses"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "location": {"paths": {"coverage": {"specs": {"get": {"description": "Get Beam Coverage Overview", "operationId": "getSiteBeamCoverageOverview", "parameters": [{"description": "map_id (filter by map_id)", "example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "map_id", "schema": {"type": "string"}}, {"in": "query", "name": "type", "schema": {"default": "sdkclient", "enum": ["sdkclient", "client", "asset"], "type": "string"}}, {"description": "where the start time will be calculated (with end time is now)", "in": "query", "name": "duration", "schema": {"default": "1h", "enum": ["1d", "5h", "1h", "30m"], "type": "string"}}, {"$ref": "#/components/parameters/resolution"}, {"description": "client_type (as filter. optional)", "in": "query", "name": "client_type", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}], "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "ml": {"paths": {"current": {"specs": {"get": {"description": "Get Machine Learning Current Stat\nFor each VBLE AP, it has ML model parameters (e.g. Path-loss-estimate, Intercept) as well as completion indicators (Level and PercentageComplete). For the completeness, ML takes N sample to finish its first level and use N*0.25 samples to complete each successive level. When a device is moved, the completeness will be reset as it has to re-learn.", "operationId": "getSiteMachineLearningCurrentStat", "parameters": [{"description": "map_id (as filter, optional)", "example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "map_id", "schema": {"type": "string"}}], "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "defaults": {"specs": {"get": {"description": "Get Default PLF for Models", "operationId": "getSiteDefaultPlfForModels", "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "device": {"paths": {"{device_id}": {"specs": {"delete": {"description": "Clear ML Overwrite for Device", "operationId": "clearSiteMlOverwriteForDevice", "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}], "put": {"description": "Overwrite ML For Device", "operationId": "overwriteSiteMlForDevice", "tags": ["Sites Location"]}}}}}, "map": {"paths": {"{map_id}": {"specs": {"delete": {"description": "Clear ML Overwrite for Map", "operationId": "clearSiteMlOverwriteForMap", "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "put": {"description": "Overwrite ML For Map", "operationId": "overwriteSiteMlForMap", "tags": ["Sites Location"]}}}}}, "reset": {"paths": {"map": {"paths": {"{map_id}": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Reset ML Stats by Map", "operationId": "resetSiteMlStatsByMap", "tags": ["Sites Location"]}}}}}}}, "updates": {"specs": {"get": {"description": "Get Machine Learning Events", "operationId": "getSiteMachineLearningEvents", "parameters": [{"description": "device_id (as filter, optional)", "example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "device_id", "schema": {"type": "string"}}, {"description": "map_id (as filter, optional)", "in": "query", "name": "map_ip", "schema": {"type": "string"}}, {"description": "client_type (as filter, optional)", "in": "query", "name": "client_type", "schema": {"type": "string"}}, {"description": "instead of start, you can use 1d, 30m, 5h, where the start will be calculated", "in": "query", "name": "duration", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"in": "query", "name": "interval", "schema": {"type": "string"}}], "tags": ["Sites Location"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}}}, "maps": {"specs": {"get": {"description": "Get Site Maps", "operationId": "getSiteMaps", "tags": ["Sites Maps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Map", "operationId": "createSiteMap", "tags": ["Sites Maps"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Import data from files is a multipart POST which has an file, an optional json, and an optional csv, to create floorplan, assign matching inventory to specific site, place ap if name or mac matches\n\n# CSV File Format\n```\nVendor AP name,Mist AP Mac\nUS Office AP-2 - 5c:5b:35:00:00:02,5c5b35000002\n``` ", "operationId": "importSiteMaps", "tags": ["Sites Maps"]}}}, "{map_id}": {"specs": {"delete": {"description": "Delete Site Map", "operationId": "deleteSiteMap", "tags": ["Sites Maps"]}, "get": {"description": "Get Site Map Details", "operationId": "getSiteMap", "tags": ["Sites Maps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "put": {"description": "Update Site Map", "operationId": "updateSiteMap", "tags": ["Sites Maps"]}}, "paths": {"image": {"specs": {"delete": {"description": "Delete Site Map Image", "operationId": "deleteSiteMapImage", "tags": ["Sites Maps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Add image map is a multipart POST which has an file (Image) and an optional json parameter", "operationId": "addSiteMapImage", "tags": ["Sites Maps"]}}}, "replace": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "Replace Map Image\n\n\nThis works like an PUT where the image will be replaced. If transform is provided, all the locations of the objects on the map (AP, Zone, Vbeacon, Beacon) will be transformed as well (relative to the new Map)", "operationId": "replaceSiteMapImage", "tags": ["Sites Maps"]}}}, "wayfinding": {"paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}], "post": {"description": "This imports the vendor map meta data into the Map JSON. This is required by the SDK and App in order to access/render the vendor Map properly.", "operationId": "importSiteWayfinding", "tags": ["Sites Maps"]}}}}}}}}}, "mxtunnels": {"paths": {"{mxtunnel_id}": {"paths": {"preempt_aps": {"specs": {"parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "mxtunnel_id", "required": true, "schema": {"type": "string"}}], "post": {"description": "To preempt AP\u2019s which are not connected to preferred peer to the preferred peer", "operationId": "preemptSitesMxTunnel", "tags": ["Sites MxTunnels"]}}}}}}}, "pcaps": {"specs": {"get": {"description": "Get a list of captures", "operationId": "getSitePacketCaptures", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"description": "optional client mac filter", "in": "query", "name": "client_mac", "schema": {"type": "string"}}], "tags": ["Sites Pcaps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"capture": {"specs": {"delete": {"description": "Stop current capture", "operationId": "stopSitePacketCapture", "tags": ["Sites Pcaps"]}, "get": {"description": "Get Capturing status", "operationId": "getSiteCapturingStatus", "tags": ["Sites Pcaps"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Initiate a Packet Capture", "operationId": "startSiteRadiotapPacketCapture", "tags": ["Sites Pcaps"]}}}}}, "psks": {"specs": {"get": {"description": "Get Site PSKs", "operationId": "getSitePsks", "parameters": [{"in": "query", "name": "ssid", "schema": {"type": "string"}}, {"in": "query", "name": "role", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/name"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}], "tags": ["Sites Psks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site PSK", "operationId": "createSitePsk", "tags": ["Sites Psks"]}, "put": {"description": "Update multi PSKs", "operationId": "updateSitePsks", "tags": ["Sites Psks"]}}, "paths": {"import": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Import PSK from CSV file or JSON\n\n## CSV File Format\n```\nPSK Import CSV File Format:\nname,ssid,passphrase,usage,vlan_id,mac\nCommon,warehouse,foryoureyesonly,single,35,a31425f31278\nJustin,reception,visible,multi,1002\n```", "operationId": "importSitePsk", "tags": ["Sites Psks"]}}}, "{psk_id}": {"specs": {"delete": {"description": "Delete Site PSK", "operationId": "deleteSitePsk", "tags": ["Sites Psks"]}, "get": {"description": "Get Site PSK Details", "operationId": "getSitePsk", "tags": ["Sites Psks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/psk_id"}], "put": {"description": "Update Site PSK", "operationId": "updateSitePsk", "tags": ["Sites Psks"]}}}}}, "rfdiags": {"specs": {"get": {"description": "List RF Glass Recording", "operationId": "getSiteSiteRfdiagRecording", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Rfdiags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Start RF Glass Recording", "operationId": "startSiteRecording", "tags": ["Sites Rfdiags"]}}, "paths": {"{rfdiag_id}": {"specs": {"delete": {"description": "Delete Recording", "operationId": "deleteSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}, "get": {"description": "Get RF Diage Recording Details", "operationId": "getSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rfdiag_id"}], "put": {"description": "Update Recording", "operationId": "updateSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}}, "paths": {"download": {"specs": {"get": {"description": "Download Recording\nDownload raw_events blob", "operationId": "downloadSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rfdiag_id"}]}}, "stop": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rfdiag_id"}], "post": {"description": "If the recording session is active for the given rfdiag_id, it will finish the recording. duration and end_time will be updated to reflect the correct values.", "operationId": "stopSiteRfdiagRecording", "tags": ["Sites Rfdiags"]}}}}}}}, "rogues": {"paths": {"events": {"paths": {"count": {"specs": {"get": {"description": "Count Rogue Events", "operationId": "countSiteRogueEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "bssid", "enum": ["bssid", "ssid", "ap", "type"], "type": "string"}}, {"$ref": "#/components/parameters/rogue_type"}, {"description": "ssid of the network detected as threat", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "bssid of the network detected as threat", "in": "query", "name": "bssid", "schema": {"type": "string"}}, {"description": "mac of the device that had strongest signal strength for ssid/bssid pair", "in": "query", "name": "ap_mac", "schema": {"type": "string"}}, {"description": "channel over which ap_mac heard ssid/bssid pair", "in": "query", "name": "channel", "schema": {"type": "string"}}, {"description": "whether the reporting AP see a wireless client (on LAN) connecting to it ", "in": "query", "name": "seen_on_lan", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Rogues"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Rogue Events", "operationId": "searchSiteRogueEvents", "parameters": [{"$ref": "#/components/parameters/rogue_type"}, {"description": "ssid of the network detected as threat", "in": "query", "name": "ssid", "schema": {"type": "string"}}, {"description": "bssid of the network detected as threat", "in": "query", "name": "bssid", "schema": {"type": "string"}}, {"description": "mac of the device that had strongest signal strength for ssid/bssid pair", "in": "query", "name": "ap_mac", "schema": {"type": "string"}}, {"description": "channel over which ap_mac heard ssid/bssid pair", "in": "query", "name": "channel", "schema": {"type": "string"}}, {"description": "whether the reporting AP see a wireless client (on LAN) connecting to it ", "in": "query", "name": "seen_on_lan", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Rogues"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "{rogue_bssid}": {"specs": {"get": {"description": "Get Rogue AP Details", "operationId": "getSiteRogueAP", "parameters": [], "tags": ["Sites Rogues"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rogue_bssid"}]}, "paths": {"deauth_clients": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rogue_bssid"}], "post": {"description": "Send Deauth frame to clients connected to a Rogue AP", "operationId": "deauthSiteClientsConnectedToARogue", "tags": ["Sites Rogues"]}}}}}}}, "rrm": {"paths": {"current": {"specs": {"get": {"description": "Get Current Channel Planning", "operationId": "getSiteCurrentChannelPlanning", "tags": ["Sites RRM"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"devices": {"paths": {"{device_id}": {"paths": {"band": {"paths": {"{band}": {"specs": {"get": {"description": "Get Current RRM Considerations for an AP on a Specific Band", "operationId": "getSiteCurrentRrmConsiderationsForAnApOnASpecificBand", "tags": ["Sites RRM"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}, {"description": "radio band", "in": "path", "name": "band", "required": true, "schema": {"enum": ["24", "5", "6"], "type": "string"}}]}}}}}}}}}}, "events": {"specs": {"get": {"description": "Get Site RRM Events", "operationId": "getSiteRrmEvents", "parameters": [{"in": "query", "name": "band", "required": true, "schema": {"enum": ["24", "5", "6"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites RRM"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "optimize": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Optimize Site RRM", "operationId": "optimizeSiteRrm", "tags": ["Sites RRM"]}}}}}, "rssizones": {"specs": {"get": {"description": "Get RSSI Zone is RSSI-based", "operationId": "getSiteRssiZones", "tags": ["Sites Rssizones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create RSSI Zone", "operationId": "createSiteRssiZone", "tags": ["Sites Rssizones"]}}, "paths": {"{rssizone_id}": {"specs": {"delete": {"description": "Delete Site RSSI Zone", "operationId": "deleteSiteRssiZone", "tags": ["Sites Rssizones"]}, "get": {"description": "Get Site RSSI Zone details", "operationId": "getSiteRssiZone", "tags": ["Sites Rssizones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/rssizone_id"}], "put": {"description": "Update Site RSSI Zone", "operationId": "updateSiteRssiZone", "tags": ["Sites Rssizones"]}}}}}, "setting": {"specs": {"get": {"description": "Get Site Settings", "operationId": "getSiteSetting", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "put": {"description": "Update Site Settings", "operationId": "updateSiteSettings", "tags": ["Sites Setting"]}}, "paths": {"blacklist": {"specs": {"delete": {"description": "Delete Site Blacklist Station Clients", "operationId": "deleteSiteClientsBlocklist", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This endpoint is to provide list of client macs for annotation blacklist.\n\nRetrieve the current clients list `blacklist_url` under Site:Setting", "operationId": "createSiteClientsBlocklist", "tags": ["Sites Setting"]}}}, "watched_station": {"specs": {"delete": {"description": "Delete Site Watched Station Clients", "operationId": "deleteSiteWatchedStations", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This endpoint is to provide list of client macs for annotation as watched station.\n\nRetrieve the current clients list from `watched_station_url` under Site:Setting", "operationId": "createSiteWatchedStations", "tags": ["Sites Setting"]}}}, "whitelist": {"specs": {"delete": {"description": "Delete Site Whitelist Station Clients", "operationId": "deleteSiteClientsAllowlist", "tags": ["Sites Setting"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "This endpoint is to provide list of client macs for annotation as whitelist.\n\nRetrieve the current clients list from `whitelist_url` under Site:Setting", "operationId": "createSiteClientsAllowlist", "tags": ["Sites Setting"]}}}}}, "skyatp": {"paths": {"events": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Skyatp Events (WIP)", "operationId": "countSiteByDistringAttributesOfSkyatpEvents", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "type", "enum": ["type", "mac", "device_mac", "threat_level"], "type": "string"}}, {"description": "event type, e.g. cc, fs, mw", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "client MAC", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device MAC", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "threat level", "in": "query", "name": "threat_level", "schema": {"type": "integer"}}, {"description": "client ip", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Skyatp"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Skyatp Events (WIP)", "operationId": "searchSiteSkyatpEvents", "parameters": [{"description": "event type, e.g. cc, fs, mw", "in": "query", "name": "type", "schema": {"type": "string"}}, {"description": "client MAC", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device MAC", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "threat level", "in": "query", "name": "threat_level", "schema": {"type": "integer"}}, {"description": "client ip", "in": "query", "name": "ip", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Skyatp"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}}}, "sle": {"paths": {"site": {"paths": {"{site_id}": {"paths": {"metric": {"paths": {"{metric}": {"paths": {"impacted-aps": {"specs": {"get": {"description": "Get impacted APs optionally filtered by classifier and failure type", "operationId": "getSiteSleImpactedAps", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "classifier", "schema": {"type": "string"}}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}}}}}}}}}, "{scope}": {"paths": {"{scope_id}": {"paths": {"metric": {"paths": {"{metric}": {"paths": {"classifier": {"paths": {"{classifier}": {"paths": {"summary": {"specs": {"get": {"description": "Get SLE classifier details", "operationId": "getSiteSleClassifierDetails", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites SLEs"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "classifier", "required": true, "schema": {"type": "string"}}]}}}}}}, "histogram": {"specs": {"get": {"description": "Get the histogram for the SLE metric", "operationId": "getSiteSleHistogram", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "impact-summary": {"specs": {"get": {"description": " Get impact summary counts optionally filtered by classifier and failure type", "operationId": "getSiteSleImpactSummary", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "fields", "schema": {"enum": ["wlan", "device_type", "device_os", "band"], "type": "string"}}, {"in": "query", "name": "classifier", "schema": {"type": "string"}}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "impacted-users": {"specs": {"get": {"description": "Get impacted users optionally filtered by classifier and failure type", "operationId": "getSiteSleImpactedClients", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "classifier", "schema": {"type": "string"}}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "summary": {"specs": {"get": {"description": " Get the summary for the SLE metric", "operationId": "getSiteSleSummary", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}]}}, "threshold": {"specs": {"get": {"description": "Get the SLE threshold", "operationId": "getSiteSleThreshold", "tags": ["Sites SLEs"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, {"description": "values from /api/v1/sites/{site_id}/sle/{scope}/{scope_id}/metrics", "in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}], "post": {"description": "Replace the SLE threshold", "operationId": "replaceSiteSleThreshold", "tags": ["Sites SLEs"]}, "put": {"description": "Update the SLE threshold", "operationId": "updateSiteSleThreshold", "tags": ["Sites SLEs"]}}}}}}}, "metrics": {"specs": {"get": {"description": "Get the list of metrics for the given scope", "operationId": "getSiteSlesMetrics", "tags": ["Sites SLEs"]}, "parameters": [{"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, {"in": "path", "name": "scope", "required": true, "schema": {"enum": ["site", "ap", "client"], "type": "string"}}, {"in": "path", "name": "scope_id", "required": true, "schema": {"format": "uuid", "type": "string"}}]}}}}}}}}, "stats": {"specs": {"get": {"description": "Get Site Stats", "operationId": "getSiteStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"assets": {"specs": {"get": {"description": "Get Site Assets Stats", "operationId": "getSiteAssetsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"asset_id": {"specs": {"get": {"description": "Get Site Asset Details", "operationId": "getSiteAssetStats", "parameters": [{"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "beacons": {"specs": {"get": {"description": "Get Site Beacons Stats", "operationId": "getSiteBeaconsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "clients": {"specs": {"get": {"description": "Get Site Clients Stats", "operationId": "getSiteClientsStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"{client_mac}": {"specs": {"get": {"description": "Get Site Client Stats Details", "operationId": "getSiteClientStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/client_mac"}]}}}}, "devices": {"specs": {"get": {"description": "Get Site Devices Stats", "operationId": "getSiteDevicesStats", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}, {"in": "query", "name": "type", "schema": {"default": "ap", "enum": ["ap", "switch", "gateways", "all"], "type": "string"}}, {"in": "query", "name": "status", "schema": {"default": "all", "enum": ["all", "connected", "disconnected"], "type": "string"}}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"{device_id}": {"specs": {"get": {"description": "Get Site Device Stats Details", "operationId": "getSiteDeviceStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}]}, "paths": {"clients": {"specs": {"get": {"description": "Get wireless client stat per Device", "operationId": "getSiteAllClientsStatsOnDevice", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/device_id"}]}}}}}}, "discovered_assets": {"specs": {"get": {"description": "Get Discovered BLE Assets\nGet a list of Discovered Assets that doesn\u2019t match any of the Asset / Assetfilters", "operationId": "getSiteDiscoveredAssets", "parameters": [{"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "discovered_switch_metrics": {"paths": {"search": {"specs": {"get": {"description": "Search Discovered Switch Metrics", "operationId": "searchSiteDiscoveredSwitchesMetrics", "parameters": [{"description": "metric scope, optional", "in": "query", "name": "scope", "schema": {"default": "site", "enum": ["site", "switch"], "type": "string"}}, {"description": "metric type, inactive_wired_vlans/switch_ap_affinity/poe_compliance/version_compliance, optional", "in": "query", "name": "type", "schema": {"enum": ["inactive_wired_vlans", "switch_ap_affinity", "poe_compliance", "version_compliance"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "discovered_switches": {"paths": {"count": {"specs": {"get": {"description": "Count Discovered Switches", "operationId": "countSiteDiscoveredSwitches", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "system_name", "enum": ["system_name", "version", "model", "mgmt_addr"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "metrics": {"specs": {"get": {"description": "Discovered switches related metrics, lists related switch system names & details if not compliant", "operationId": "getSiteDiscoveredSwitchesMetrics", "parameters": [{"description": "configurable # ap per switch threshold, default 12", "in": "query", "name": "threshold", "schema": {"type": "string"}}, {"description": "system name for switch level metrics, optional", "in": "query", "name": "system_name", "schema": {"type": "string"}}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Count Discovered Switches", "operationId": "getSiteDiscoveredSwitches", "parameters": [{"in": "query", "name": "system_name", "schema": {"type": "string"}}, {"in": "query", "name": "mgmt_addr", "schema": {"type": "string"}}, {"in": "query", "name": "model", "schema": {"type": "string"}}, {"in": "query", "name": "version", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "maps": {"paths": {"{map_id}": {"paths": {"clients": {"specs": {"get": {"description": "Get Site Clients Stats By Map", "operationId": "getSiteClientsStatsByMap", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}]}}, "discovered_assets": {"specs": {"get": {"description": "Get a list of BLE beacons that we discovered (whether they\u2019re defined as assets or not)", "operationId": "getSiteDiscoveredAssetByMap", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}]}}, "sdkclients": {"specs": {"get": {"description": "Get SdkClient Stats By Map", "operationId": "getSiteSdkStatsByMap", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}]}}, "unconnected_clients": {"specs": {"get": {"description": "Unconnected Client Location", "operationId": "getSiteUnconnectedClientStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/map_id"}]}}}}}}, "mxedges": {"specs": {"get": {"description": "Get Site MxEdges Stats", "operationId": "getSiteMxEdgesStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}, "paths": {"{mxedge_id}": {"specs": {"get": {"description": "Get One Site MxEdge Stats", "operationId": "getSiteMxEdgeStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/mxedge_id"}]}}}}, "ports": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Switch/Gateway Ports", "operationId": "countSiteByDisctinctAttributesOPorts", "parameters": [{"description": "port_id, port_mac, full_duplex, mac, neighbor_macneighbor_port_desc, neighbor_system_name, poe_disabled, poe_mode, poe_on, speed, up", "in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "port_mac", "full_duplex", "mac", "neighbor_mac", "neighbor_port_desc", "neighbor_system_name", "poe_disabled", "poe_mode", "poe_on", "speed", "up"], "type": "string"}}, {"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true` && has Authenticator role", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Switch / Gateway Ports", "operationId": "searchSitePorts", "parameters": [{"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Output errors", "in": "query", "name": "tx_errors", "schema": {"type": "integer"}}, {"description": "Input errors", "in": "query", "name": "rx_errors", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "Limit on number of dynamically learned macs", "in": "query", "name": "mac_limit", "schema": {"type": "integer"}}, {"description": "Number of mac addresses in the forwarding table", "in": "query", "name": "mac_count", "schema": {"type": "integer"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true` && has Authenticator role", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "sdkclients": {"paths": {"{sdkclient_id}": {"specs": {"get": {"description": "Get Detail Stats of a SdkClient", "operationId": "getSiteSdkStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/sdkclient_id"}]}}}}, "switch_ports": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Switch/Gateway Ports", "operationId": "countSiteByDisctinctAttributesOfSwitchPorts", "parameters": [{"description": "port_id, port_mac, full_duplex, mac, neighbor_macneighbor_port_desc, neighbor_system_name, poe_disabled, poe_mode, poe_on, speed, up", "in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "port_mac", "full_duplex", "mac", "neighbor_mac", "neighbor_port_desc", "neighbor_system_name", "poe_disabled", "poe_mode", "poe_on", "speed", "up"], "type": "string"}}, {"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Switch / Gateway Ports", "operationId": "searchSiteSwitchPorts", "parameters": [{"description": "indicates full or half duplex", "in": "query", "name": "full_duplex", "schema": {"type": "boolean"}}, {"description": "device identifier", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "Chassis identifier of the chassis type listed", "in": "query", "name": "neighbor_mac", "schema": {"type": "string"}}, {"description": "Description supplied by the system on the interface E.g. \u201cGigabitEthernet2/0/39\u201d", "in": "query", "name": "neighbor_port_desc", "schema": {"type": "string"}}, {"description": "Name supplied by the system on the interface E.g. neighbor system name E.g. \u201cKumar-Acc-SW.mist.local\u201d", "in": "query", "name": "neighbor_system_name", "schema": {"type": "string"}}, {"description": "is the POE configured not be disabled.", "in": "query", "name": "poe_disabled", "schema": {"type": "boolean"}}, {"description": "poe mode depending on class E.g. \u201c802.3at\u201d", "in": "query", "name": "poe_mode", "schema": {"type": "string"}}, {"description": "is the device attached to POE", "in": "query", "name": "poe_on", "schema": {"type": "boolean"}}, {"description": "interface name", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "interface mac address", "in": "query", "name": "port_mac", "schema": {"type": "string"}}, {"description": "Amount of power being used by the interface at the time the command is executed. Unit in watts.", "in": "query", "name": "power_draw", "schema": {"type": "number"}}, {"description": "Output packets", "in": "query", "name": "tx_pkts", "schema": {"type": "integer"}}, {"description": "Input packets", "in": "query", "name": "rx_pkts", "schema": {"type": "integer"}}, {"description": "Input bytes", "in": "query", "name": "rx_bytes", "schema": {"type": "integer"}}, {"description": "Output rate", "in": "query", "name": "tx_bps", "schema": {"type": "integer"}}, {"description": "Input rate", "in": "query", "name": "rx_bps", "schema": {"type": "integer"}}, {"description": "Multicast output packets", "in": "query", "name": "tx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast output packets", "in": "query", "name": "tx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "Multicast input packets", "in": "query", "name": "rx_mcast_pkts", "schema": {"type": "integer"}}, {"description": "Broadcast input packets", "in": "query", "name": "rx_bcast_pkts", "schema": {"type": "integer"}}, {"description": "port speed", "in": "query", "name": "speed", "schema": {"type": "integer"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_state", "schema": {"enum": ["forwarding", "blocking", "learning", "listening", "disabled"], "type": "string"}}, {"description": "if `up`==`true`", "in": "query", "name": "stp_role", "schema": {"enum": ["designated", "backup", "alternate", "root", "root-prevented"], "type": "string"}}, {"description": "if `up`==`true` && has Authenticator role", "in": "query", "name": "auth_state", "schema": {"enum": ["init", "authenticated", "authenticating", "held"], "type": "string"}}, {"description": "indicates if interface is up", "in": "query", "name": "up", "schema": {"type": "boolean"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "wxrules": {"specs": {"get": {"description": "Get Wxlan Rule usage", "operationId": "getSiteWxRulesUsage", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "zones": {"specs": {"get": {"description": "Get Zones Stats", "operationId": "getSiteZonesStats", "parameters": [{"example": "00000000-0000-0000-0000-000000000000", "in": "query", "name": "map_id", "schema": {"type": "string"}}], "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{zone_type}": {"paths": {"{zone_id}": {"specs": {"get": {"description": "Get Detail Zone Stats", "operationId": "getSiteZoneStats", "tags": ["Sites Stats"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_type"}, {"$ref": "#/components/parameters/zone_id"}]}}}}}}, "subscriptions": {"specs": {"delete": {"description": "Unsubscribe to Site Alarms", "operationId": "UnsubscribeSite", "tags": ["Sites Subscriptions"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Subscribe to Site Alarms", "operationId": "SubscribeSite", "tags": ["Sites Subscriptions"]}}}, "uisettings": {"specs": {"get": {"description": "CURD site UI settings", "operationId": "getSiteCurdSettings", "tags": ["Sites UI Settings"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "CURD site UI settings", "operationId": "createSiteCurdSettings", "tags": ["Sites UI Settings"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get both site UI settings(for_site=true) and org UI settings (for_site=false)", "operationId": "getSiteDerivedCurdSetting", "tags": ["Sites UI Settings"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{uisetting_id}": {"specs": {"delete": {"description": "CURD site UI settings", "operationId": "deleteSiteCurdSetting", "tags": ["Sites UI Settings"]}, "get": {"description": "CURD site UI settings", "operationId": "getSiteCurdSetting", "tags": ["Sites UI Settings"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/uisetting_id"}], "post": {"description": "CURD site UI settings", "operationId": "updateSiteCurdSetting", "tags": ["Sites UI Settings"]}}}}}, "vbeacons": {"specs": {"get": {"description": "Get Site Virtual Beacons", "operationId": "getSiteVBeacons", "tags": ["Sites vBeacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Virtual Beacon", "operationId": "createSiteVBeacon", "tags": ["Sites vBeacons"]}}, "paths": {"{vbeacon_id}": {"specs": {"delete": {"description": "Delete Site Virtual Beacon", "operationId": "deleteSiteVBeacon", "tags": ["Sites vBeacons"]}, "get": {"description": "Get Site Virtual Beacon Details", "operationId": "getSiteVBeacon", "tags": ["Sites vBeacons"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/vbeacon_id"}], "put": {"description": "Update Site Virtual Beacon", "operationId": "updateSiteVBeacon", "tags": ["Sites vBeacons"]}}}}}, "webhooks": {"specs": {"get": {"description": "Get Site Webhooks", "operationId": "getSiteWebhooks", "tags": ["Sites Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Webhook", "operationId": "createSiteWebhook", "tags": ["Sites Webhooks"]}}, "paths": {"{webhook_id}": {"specs": {"delete": {"description": "Delete Site Webhook", "operationId": "deleteSiteWebhook", "tags": ["Sites Webhooks"]}, "get": {"description": "Get Site Webhook Details", "operationId": "getSiteWebhook", "tags": ["Sites Webhooks"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/webhook_id"}], "put": {"description": "Update Site Webhook", "operationId": "updateSiteWebhook", "tags": ["Sites Webhooks"]}}, "paths": {"ping": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/webhook_id"}], "post": {"description": "send a Ping event to the webhook", "operationId": "pingSiteWebhook", "tags": ["Sites Webhooks"]}}}}}}}, "wired_clients": {"paths": {"count": {"specs": {"get": {"description": "Count by Distinct Attributes of Clients", "operationId": "countSiteWiredClients", "parameters": [{"in": "query", "name": "distinct", "schema": {"default": "mac", "enum": ["port_id", "vlan", "mac"], "type": "string"}}, {"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "search": {"specs": {"get": {"description": "Search Wired Clients", "operationId": "searchSiteWiredClients", "parameters": [{"description": "client mac", "in": "query", "name": "mac", "schema": {"type": "string"}}, {"description": "device mac", "in": "query", "name": "device_mac", "schema": {"type": "string"}}, {"description": "port id", "in": "query", "name": "port_id", "schema": {"type": "string"}}, {"description": "vlan", "in": "query", "name": "vlan", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Wired Clients"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}}}, "wlans": {"specs": {"get": {"description": "Get Site WLANs", "operationId": "getSiteWlans", "tags": ["Sites Wlans"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WLAN", "operationId": "createSiteWlan", "tags": ["Sites Wlans"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Wlans Derived", "operationId": "getSiteWlanDerived", "parameters": [{"description": "whether to resolve SITE_VARS", "example": true, "in": "query", "name": "resolve", "schema": {"default": false, "type": "boolean"}}], "tags": ["Sites Wlans"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{wlan_id}": {"specs": {"delete": {"description": "Delete Site WLAN", "operationId": "deleteSiteWlan", "tags": ["Sites Wlans"]}, "get": {"description": "Get Site WLAN", "operationId": "getSiteWlan", "tags": ["Sites Wlans"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update Site WLAN", "operationId": "updateSiteWlan", "tags": ["Sites Wlans"]}}, "paths": {"portal_image": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wlan_id"}], "post": {"description": "Wlan Portal Image Upload", "operationId": "uploadSiteWlanPortalImage", "tags": ["Sites Wlans"]}}}, "portal_template": {"specs": {"parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wlan_id"}], "put": {"description": "Update a Portal Template", "operationId": "updateSiteWlanPortalTemplate", "tags": ["Sites Wlans"]}}}}}}}, "wxrules": {"specs": {"get": {"description": "Get Site WxLan Rules", "operationId": "getSiteWxRules", "tags": ["Sites WxRules"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WxLan Rule", "operationId": "createSiteWxRule", "tags": ["Sites WxRules"]}}, "paths": {"derived": {"specs": {"get": {"description": "Get Site WxLan Rule Derived", "operationId": "getSiteWxRulesDerived", "tags": ["Sites WxRules"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{wxrules_id}": {"specs": {"delete": {"description": "Delete Site WxLan Rule", "operationId": "deleteSiteWxRule", "tags": ["Sites WxRules"]}, "get": {"description": "Get Site WxLan Rule Details", "operationId": "getSiteWxRule", "tags": ["Sites WxRules"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxrules_id"}], "put": {"description": "Update Site WxLan Rule", "operationId": "updateSiteWxRule", "tags": ["Sites WxRules"]}}}}}, "wxtags": {"specs": {"get": {"description": "Get Site WxTags", "operationId": "getSiteWxTags", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WxTag", "operationId": "createSiteWxTag", "tags": ["Sites WxTags"]}}, "paths": {"apps": {"specs": {"get": {"description": "Get Application List", "operationId": "getSiteApplicationList", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}]}}, "{wxtag_id}": {"specs": {"delete": {"description": "Delete Site WxTag", "operationId": "deleteSiteWxTag", "tags": ["Sites WxTags"]}, "get": {"description": "Get Site WxTag Details", "operationId": "getSiteWxTag", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxtag_id"}], "put": {"description": "Update Site WxTag", "operationId": "updateSiteWxTag", "tags": ["Sites WxTags"]}}, "paths": {"clients": {"specs": {"get": {"description": "Get Current Matching Clients of a WXLAN Tag", "operationId": "getSiteCurrentMatchingClientsOfAWxTag", "tags": ["Sites WxTags"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxtag_id"}]}}}}}}, "wxtunnels": {"specs": {"get": {"description": "Get Site WxLan Tunnels", "operationId": "getSiteWxTunnels", "tags": ["Sites WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site WxLan Tunnel", "operationId": "createSiteWxTunnel", "tags": ["Sites WxTunnels"]}}, "paths": {"{wxtunnel_id}": {"specs": {"delete": {"description": "Delete Site WxLan Tunnel", "operationId": "deleteSiteWxTunnel", "tags": ["Sites WxTunnels"]}, "get": {"description": "Get Site WxLan tunnel Details", "operationId": "getSiteWxTunnel", "tags": ["Sites WxTunnels"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/wxtunnel_id"}], "put": {"description": "Update Site WxLan Tunnel", "operationId": "updateSiteWxTunnel", "tags": ["Sites WxTunnels"]}}}}}, "zones": {"specs": {"get": {"description": "Get Site Zones", "operationId": "getSiteZones", "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}], "post": {"description": "Create Site Zone ", "operationId": "createSiteZone", "tags": ["Sites Zones"]}}, "paths": {"{zone_id}": {"specs": {"delete": {"description": "Delete Site Zone", "operationId": "deleteSiteZone", "tags": ["Sites Zones"]}, "get": {"description": "Get Site Zone Details", "operationId": "getSiteZone", "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_id"}], "put": {"description": "Update Site Zone", "operationId": "updateSiteZone", "tags": ["Sites Zones"]}}}}}, "{zone_type}": {"paths": {"count": {"specs": {"get": {"description": "Count Site Zone Sessions", "operationId": "countSiteZoneSessions", "parameters": [{"example": "scope_id", "in": "query", "name": "distinct", "schema": {"default": "scope_id", "enum": ["user_type", "user", "scope_id", "scope"], "type": "string"}}, {"description": "user type", "in": "query", "name": "user_type", "schema": {"default": "client", "enum": ["client", "sdkclient", "asset"], "type": "string"}}, {"description": "client MAC / Asset MAC / SDK UUID", "in": "query", "name": "user", "schema": {"type": "string"}}, {"description": "if `scope`==`map`/`zone`/`rssizone`, the scope id", "in": "query", "name": "scope_id", "schema": {"type": "string"}}, {"description": "scope", "in": "query", "name": "scope", "schema": {"default": "site", "enum": ["site", "map", "zone", "rssizone"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_type"}]}}, "visits": {"paths": {"search": {"specs": {"get": {"description": "Search Zone Sessions", "operationId": "searchSiteZoneSessions", "parameters": [{"description": "user type, client (default) / sdkclient / asset", "in": "query", "name": "user_type", "schema": {"default": "client", "enum": ["client", "sdkclient", "asset"], "type": "string"}}, {"description": "client MAC / Asset MAC / SDK UUID", "in": "query", "name": "user", "schema": {"type": "string"}}, {"description": "if `scope`==`map`/`zone`/`rssizone`, the scope id", "in": "query", "name": "scope_id", "schema": {"type": "string"}}, {"description": "scope", "in": "query", "name": "scope", "schema": {"default": "site", "enum": ["site", "map", "zone", "rssizone"], "type": "string"}}, {"$ref": "#/components/parameters/page"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/start"}, {"$ref": "#/components/parameters/end"}, {"$ref": "#/components/parameters/duration"}], "tags": ["Sites Zones"]}, "parameters": [{"$ref": "#/components/parameters/site_id"}, {"$ref": "#/components/parameters/zone_type"}]}}}}}}}}}}, "utils": {"paths": {"test_twilio": {"specs": {"post": {"description": "Allows validation of twilio setup\nIn case of success, a text message confirming successful setup should be received. In case of error, twilio error code and message are returned.", "operationId": "testSiteWlanTwilioSetup", "tags": ["Sites"]}}}}}}}}}, "webhook_alarm_uri": {"specs": {"post": {"description": "Webhook sample for `alarm` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages", "operationId": "alarms", "tags": ["Webhook Samples"]}}}, "webhook_asset_raw_uri": {"specs": {"post": {"description": "Webhook sample for `asset_raw` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "assetRaw", "tags": ["Webhook Samples"]}}}, "webhook_audit_uri": {"specs": {"post": {"description": "Webhook sample for `audit` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "audits", "tags": ["Webhook Samples"]}}}, "webhook_client_join_uri": {"specs": {"post": {"description": "Webhook sample for `clilent_join` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "clientJoin", "tags": ["Webhook Samples"]}}}, "webhook_client_sessions_uri": {"specs": {"post": {"description": "Webhook sample for `client_sessions` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "clientSessions", "tags": ["Webhook Samples"]}}}, "webhook_device_events_uri": {"specs": {"post": {"description": "Webhook sample for `device_events` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "deviceEvents", "tags": ["Webhook Samples"]}}}, "webhook_device_updowns_uri": {"specs": {"post": {"description": "Webhook sample for `device_updowns` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "deviceUpDown", "tags": ["Webhook Samples"]}}}, "webhook_location_uri": {"specs": {"post": {"description": "Webhook sample for `location` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "location", "tags": ["Webhook Samples"]}}}, "webhook_occupancy_alerts_uri": {"specs": {"post": {"description": "Webhook sample for `occupancy_alerts` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "occupancyAlerts", "tags": ["Webhook Samples"]}}}, "webhook_ping_uri": {"specs": {"post": {"description": "Webhook sample for `ping` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "ping", "tags": ["Webhook Samples"]}}}, "webhook_sdkclient_scan_data_uri": {"specs": {"parameters": [], "post": {"description": "Webhook sample for `sdkclient_scan_data` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "sdkclientScanData", "tags": ["Webhook Samples"]}}}, "webhook_zone_uri": {"specs": {"post": {"description": "Webhook sample for `zone` topic\n**Note**: The server host will be your own server FQDN where the Mist Cloud is sending the webhook messages\n", "operationId": "zone", "tags": ["Webhook Samples"]}}}}, "components": {"parameters": {"admin_id": {"in": "path", "name": "admin_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "alarm_id": {"in": "path", "name": "alarm_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "alarmtemplate_id": {"in": "path", "name": "alarmtemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "apitoken_id": {"in": "path", "name": "apitoken_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "aptemplate_id": {"in": "path", "name": "aptemplate_id", "required": true, "schema": {"format": "uuid", "type": "string"}}, "asset_id": {"in": "path", "name": "asset_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "assetfilter_id": {"in": "path", "name": "assetfilter_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "beacon_id": {"in": "path", "name": "beacon_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "client_mac": {"in": "path", "name": "client_mac", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "country_code": {"description": "country code, in two-character", "in": "query", "name": "country_code", "required": true, "schema": {"example": "US", "pattern": "^[a-zA-Z]{2}$", "type": "string"}}, "device_id": {"in": "path", "name": "device_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "device_mac": {"in": "path", "name": "device_mac", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "deviceprofile_id": {"in": "path", "name": "deviceprofile_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "duration": {"in": "query", "name": "duration", "required": false, "schema": {"default": "1d", "enum": ["1d", "1h", "10m"], "type": "string"}}, "end": {"in": "query", "name": "end", "schema": {"default": 0, "minimum": 0, "type": "integer"}}, "evpn_topology_id": {"in": "path", "name": "evpn_topology_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "gatewaytemplate_id": {"in": "path", "name": "gatewaytemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "guest_mac": {"in": "path", "name": "guest_mac", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "image_name": {"in": "path", "name": "image_name", "required": true, "schema": {"type": "string"}}, "invite_id": {"in": "path", "name": "invite_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "ip": {"description": "ip address", "in": "query", "name": "ip", "schema": {"format": "ipv4", "type": "string"}}, "limit": {"in": "query", "name": "limit", "required": false, "schema": {"default": 100, "minimum": 0, "type": "integer"}}, "map_id": {"in": "path", "name": "map_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "metric": {"in": "path", "name": "metric", "required": true, "schema": {"type": "string"}}, "msp_id": {"in": "path", "name": "msp_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "mxcluster_id": {"in": "path", "name": "mxcluster_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "mxedge_id": {"in": "path", "name": "mxedge_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "mxtunnel_id": {"in": "path", "name": "mxtunnel_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "name": {"in": "query", "name": "name", "required": false, "schema": {"default": "", "type": "string"}}, "network_id": {"in": "path", "name": "network_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "networktemplate_id": {"in": "path", "name": "networktemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "org_id": {"in": "path", "name": "org_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "orggroup_id": {"in": "path", "name": "orggroup_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "page": {"in": "query", "name": "page", "required": false, "schema": {"default": 1, "minimum": 1, "type": "integer"}}, "psk_id": {"description": "PSK ID", "in": "path", "name": "psk_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "psk_id_query": {"description": "PSK ID", "in": "query", "name": "psk_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "psk_name": {"description": "PSK name", "in": "query", "name": "psk_name", "required": true, "schema": {"default": "", "type": "string"}}, "q": {"description": "search string", "in": "query", "name": "q", "required": true, "schema": {"default": "", "example": "search", "type": "string"}}, "resolution": {"in": "query", "name": "resolution", "required": true, "schema": {"default": "default", "enum": ["default", "fine"], "type": "string"}}, "rfdiag_id": {"in": "path", "name": "rfdiag_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "rftemplate_id": {"in": "path", "name": "rftemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "rogue_bssid": {"in": "path", "name": "rogue_bssid", "required": true, "schema": {"example": "0000000000ab", "pattern": "^[0-9a-fA-F]{12}$", "type": "string"}}, "rogue_type": {"in": "query", "name": "type", "required": true, "schema": {"enum": ["honeypot", "lan", "others", "spoof"], "type": "string"}}, "rssizone_id": {"in": "path", "name": "rssizone_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sdkclient_id": {"in": "path", "name": "sdkclient_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sdkinvite_id": {"in": "path", "name": "sdkinvite_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sdktemplate_id": {"in": "path", "name": "sdktemplate_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "secpolicy_id": {"in": "path", "name": "secpolicy_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "secret": {"in": "path", "name": "secret", "required": true, "schema": {"type": "string"}}, "site_id": {"in": "path", "name": "site_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "site_name": {"in": "path", "name": "site_name", "required": true, "schema": {"type": "string"}}, "sitegroup_id": {"in": "path", "name": "sitegroup_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "sso_id": {"in": "path", "name": "sso_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "ssorole_id": {"in": "path", "name": "ssorole_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "start": {"in": "query", "name": "start", "schema": {"default": 0, "minimum": 0, "type": "integer"}}, "template_id": {"in": "path", "name": "template_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "ticket_id": {"in": "path", "name": "ticket_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "token": {"in": "path", "name": "token", "required": true, "schema": {"type": "string"}}, "uisetting_id": {"in": "path", "name": "uisetting_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "vbeacon_id": {"in": "path", "name": "vbeacon_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "webhook_id": {"in": "path", "name": "webhook_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wlan_id": {"in": "path", "name": "wlan_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wxrules_id": {"in": "path", "name": "wxrules_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wxtag_id": {"in": "path", "name": "wxtag_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "wxtunnel_id": {"in": "path", "name": "wxtunnel_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "zone_id": {"in": "path", "name": "zone_id", "required": true, "schema": {"example": "000000ab-00ab-00ab-00ab-0000000000ab", "format": "uuid", "type": "string"}}, "zone_type": {"in": "path", "name": "zone_type", "required": true, "schema": {"enum": ["zones", "rssizones"], "type": "string"}}}}}
\ No newline at end of file
diff --git a/src/angular/src/assets/icon128.png b/src/angular/src/assets/icon128.png
deleted file mode 100644
index f2add38..0000000
Binary files a/src/angular/src/assets/icon128.png and /dev/null differ
diff --git a/src/angular/src/assets/icon16.png b/src/angular/src/assets/icon16.png
deleted file mode 100644
index 86b4297..0000000
Binary files a/src/angular/src/assets/icon16.png and /dev/null differ
diff --git a/src/angular/src/assets/icon48.png b/src/angular/src/assets/icon48.png
deleted file mode 100644
index b0fce70..0000000
Binary files a/src/angular/src/assets/icon48.png and /dev/null differ
diff --git a/src/angular/src/assets/manual.svg b/src/angular/src/assets/manual.svg
new file mode 100644
index 0000000..0b66023
--- /dev/null
+++ b/src/angular/src/assets/manual.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/angular/src/manifest.json b/src/angular/src/manifest.json
index 422165e..88a6130 100644
--- a/src/angular/src/manifest.json
+++ b/src/angular/src/manifest.json
@@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Mist Extension",
"short_name": "mist-chrome-extension",
- "version": "1.4.0",
+ "version": "2.0.0",
"description": "Chrome Extension for Mist Developpers to provide easier access to Mist APIs",
"icons": {
"16": "assets/favicon-16x16.png",
diff --git a/src/angular/src/styles.scss b/src/angular/src/styles.scss
index 05f74bb..95eccac 100644
--- a/src/angular/src/styles.scss
+++ b/src/angular/src/styles.scss
@@ -25,6 +25,57 @@ h2 {
cursor: default;
}
-input:focus, textarea:focus, select:focus{
+input:focus,
+textarea:focus,
+select:focus {
outline: none;
+}
+
+.notice-text {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: 1em;
+ text-align: center;
+ font-weight: 200;
+ height: 100%;
+}
+
+///////////////////////
+// TOOTLTIP
+.tooltip {
+ position: relative;
+ display: inline-block;
+}
+
+.tooltip .tooltiptext {
+ visibility: hidden;
+ width: 80px;
+ background-color: rgb(0 0 0 / 59%);
+ color: #fff;
+ text-align: center;
+ border-radius: 6px;
+ padding: 4px;
+ position: absolute;
+ z-index: 1;
+ margin-left: -30px;
+ font-size: smaller;
+ font-weight: 300;
+}
+
+.tooltip .tooltiptext::after {
+ content: "";
+ position: absolute;
+ bottom: 100%;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px;
+ border-style: solid;
+ border-color: transparent transparent #00000061 transparent;
+}
+
+.tooltip:hover .tooltiptext {
+ visibility: visible;
+ transition: visibility 0.2s ease-in-out, opacity 0.2s ease-in-out;
}
\ No newline at end of file
diff --git a/src/angular/tsconfig.json b/src/angular/tsconfig.json
index a249f64..3c82156 100644
--- a/src/angular/tsconfig.json
+++ b/src/angular/tsconfig.json
@@ -6,6 +6,8 @@
"sourceMap": true,
"declaration": false,
"module": "esnext",
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
diff --git a/src/chrome/src/serviceWorker.ts b/src/chrome/src/serviceWorker.ts
index 2ec44a1..4eddd96 100644
--- a/src/chrome/src/serviceWorker.ts
+++ b/src/chrome/src/serviceWorker.ts
@@ -25,18 +25,25 @@ function checkUrl(tabUrl: string) {
const base_re = /https:\/\/(manage|integration)\.(?[a-z0-1.]*(mist|mistsys)\.com)\/admin\/\?org_id=(?[0-9a-f-]*)#!/yis;
const base = base_re.exec(tabUrl);
+ const api_re = /https:\/\/api\.(?[a-z0-1.]*(mist|mistsys)\.com)\/api\/v1\/(?const|installer|invite|login|logout|mobile|msps|orgs|recover|register|self|sites|utils)/yis;
+ const api = api_re.exec(tabUrl);
if (base) {
- apiBadge(true);
+ apiBadge(true, false);
+ } else if (api) {
+ apiBadge(false, true);
} else {
- apiBadge(false);
+ apiBadge(false, false);
}
}
-function apiBadge(show: boolean) {
- if (show) {
+function apiBadge(showManage: boolean, showDjango: boolean) {
+ if (showManage) {
chrome.action.setBadgeBackgroundColor({ color: "#4caf50" })
chrome.action.setBadgeText({ "text": "\u2713" });
+ } else if (showDjango) {
+ chrome.action.setBadgeBackgroundColor({ color: "#f38019" })
+ chrome.action.setBadgeText({ "text": "\u2713" });
} else {
chrome.action.setBadgeText({ "text": "" });
}
diff --git a/src/package.json b/src/package.json
index f883433..8a113e3 100644
--- a/src/package.json
+++ b/src/package.json
@@ -1,54 +1,54 @@
{
- "name": "mist-chrome-extension",
- "version": "1.0.0",
- "description": "Generated with @larscom/ng-chrome-extension",
- "scripts": {
- "ng": "ng",
- "start": "npm run watch",
- "build:angular": "ng build",
- "build:angular-production": "ng build --prod",
- "watch:angular": "ng build --source-map=true --plugin ~angular/sourcemaps-plugin.js --watch --delete-output-path false",
- "build:chrome": "webpack --config chrome/webpack.config.js",
- "build:chrome-production": "webpack -p --config chrome/webpack.config.prod.js",
- "watch:chrome": "webpack --config chrome/webpack.config.js -w",
- "build": "npm run clean && npm run build:angular && npm run build:chrome",
- "build:production": "npm run build:angular-production && npm run build:chrome-production && npm run pack",
- "watch": "npm run clean && npm-run-all --parallel watch:*",
- "clean": "rimraf angular/dist",
- "pack": "cd angular/dist && bestzip ../../extension-build.zip *"
- },
- "private": true,
- "dependencies": {
- "@angular/animations": "^11.0.2",
- "@angular/cdk": "^11.2.13",
- "@angular/common": "^11.0.2",
- "@angular/compiler": "^11.0.2",
- "@angular/core": "^11.0.2",
- "@angular/forms": "^11.0.2",
- "@angular/material": "^11.2.13",
- "@angular/platform-browser": "^11.0.2",
- "@angular/platform-browser-dynamic": "^11.0.2",
- "@angular/router": "^11.0.2",
- "rxjs": "~6.6.0",
- "tslib": "^2.2.0",
- "zone.js": "~0.11.4"
- },
- "devDependencies": {
- "@angular-devkit/build-angular": "^0.1100.2",
- "@angular/cli": "^11.0.2",
- "@angular/compiler-cli": "^11.0.2",
- "@angular/language-service": "^11.0.2",
- "@types/chrome": "0.0.141",
- "@types/node": "^12.12.32",
- "awesome-typescript-loader": "^5.2.1",
- "bestzip": "^2.1.7",
- "codelyzer": "^6.0.0",
- "ngx-build-plus": "^12.0.1",
- "npm-run-all": "^4.1.5",
- "rimraf": "^2.7.1",
- "ts-node": "~7.0.0",
- "typescript": "~4.0.5",
- "webpack": "^4.42.1",
- "webpack-cli": "^3.3.11"
- }
-}
+ "name": "mist-chrome-extension",
+ "version": "2.0.0",
+ "description": "Generated with @larscom/ng-chrome-extension",
+ "scripts": {
+ "ng": "ng",
+ "start": "npm run watch",
+ "build:angular": "ng build",
+ "build:angular-production": "ng build --prod",
+ "watch:angular": "ng build --source-map=true --plugin ~angular/sourcemaps-plugin.js --watch --delete-output-path false",
+ "build:chrome": "webpack --config chrome/webpack.config.js",
+ "build:chrome-production": "webpack -p --config chrome/webpack.config.prod.js",
+ "watch:chrome": "webpack --config chrome/webpack.config.js -w",
+ "build": "npm run clean && npm run build:angular && npm run build:chrome",
+ "build:production": "npm run build:angular-production && npm run build:chrome-production && npm run pack",
+ "watch": "npm run clean && npm-run-all --parallel watch:*",
+ "clean": "rimraf angular/dist",
+ "pack": "cd angular/dist && bestzip ../../extension-build.zip *"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular/animations": "^11.0.2",
+ "@angular/cdk": "^11.2.13",
+ "@angular/common": "^11.0.2",
+ "@angular/compiler": "^11.0.2",
+ "@angular/core": "^11.0.2",
+ "@angular/forms": "^11.0.2",
+ "@angular/material": "^11.2.13",
+ "@angular/platform-browser": "^11.0.2",
+ "@angular/platform-browser-dynamic": "^11.0.2",
+ "@angular/router": "^11.0.2",
+ "rxjs": "~6.6.0",
+ "tslib": "^2.2.0",
+ "zone.js": "~0.11.4"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^0.1100.2",
+ "@angular/cli": "^11.0.2",
+ "@angular/compiler-cli": "^11.0.2",
+ "@angular/language-service": "^11.0.2",
+ "@types/chrome": "0.0.141",
+ "@types/node": "^12.12.32",
+ "awesome-typescript-loader": "^5.2.1",
+ "bestzip": "^2.1.7",
+ "codelyzer": "^6.0.0",
+ "ngx-build-plus": "^12.0.1",
+ "npm-run-all": "^4.1.5",
+ "rimraf": "^2.7.1",
+ "ts-node": "~7.0.0",
+ "typescript": "~4.0.5",
+ "webpack": "^4.42.1",
+ "webpack-cli": "^3.3.11"
+ }
+}
\ No newline at end of file