Site

A site represents a project, a deployment. For MSP, it can be as small as a coffee shop or a five-star 600-room hotel. A site contains a set of Maps, Wlans, Policies, Zones.

Wlan

Wireless LAN definition

Wlans are the wireless networks created under a site.

Base URI

/api/v1/sites/:site_id/wlans

Example

{
    "ssid": "corporate",
    "enabled": true,
    "auth": {
        "type": "psk",

        // type is psk
        "psk": "foryoureyesonly",
        "enable_mac_auth": false,
        "multi_psk_only": false,
        "pairwise": [ "wpa1-ccmp", "wpa2-tkip", "wpa1-tkip", "wpa2-ccmp", "wpa3" ],
        "wep_as_secondary_auth": false,

        // type = wep
        "keys": [ "1234567890", null, "0987654321", null ],
        "key_idx": 1

        // type = eap
        "eap_reauth": false

        // type = open
        "owe": "enabled",  // disabled (default) / enabled (transitional) / required

        // whether to enable Private WLAN
        "private_wlan": true,

        // sae anti-clogging token threshold
        "anticlog_threshold": 16,  // default: 16, range: 16-32
    },

    "dynamic_psk": {
        // dynamic_psk allows PSK to be selected at runtime depending on context (wlan/site/user/...)
        // thus following configurations are assumed (currently)
        // - PSK will come from RADIUS server if source is radius
        //   - AP sends client MAC as username ans password (i.e. `enable_mac_auth` is assumed)
        //   - AP sends BSSID:SSID as Caller-Station-ID
        //   - `auth_servers` is required
        // - PSK will come from cloud WLC if source is cloud_psks
        //   - default_psk will be used if cloud WLC is not available
        // - `multi_psk_only` and `psk` is ignored
        // - `pairwise` can only be wpa2-ccmp (for now, wpa3 support on the roadmap)
        "enabled": true

        "source": "radius",  // radius (default), cloud_psks
        "default_vlan_id": 999,
        "default_psk": "foryoureyesonly",  // 8-63 characters

        // optional, when 11r is enabled, we'll try to use the cached PMK, this can be disabled
        "force_lookup": false,  // default is false (meaning auto)
    },

    "roam_mode": "none",

    // radius-related
    "auth_servers_nas_id": "5c5b350e0101-nas",
    "auth_servers_nas_ip": "15.3.1.5",
    "auth_servers_timeout": 5,
    "auth_servers_retries": 3,
    "auth_server_selection": "ordered",
    "auth_servers": [
        {
            "host": "1.2.3.4",
            "port": 1812,
            "secret": "testing123"
        },
        {
            "host": "radius.internal",
            "port": 1812,
            "secret": "testing123"
        },
        {
            "host": "radius2",
            "port": 1812,
            "secret": "testing123",
            "keywrap_enabled": true, // enable keywrap algorithm. Default is false
            "keywrap_format": "hex", // key format: hex or ascii
            “keywrap_kek”: “1122334455", // Key encryption key
            “keywrap_mack” “1122334455", // Message Authentication Code Key
        },
    ],
    "acct_servers": [
        {
            "host": "1.2.3.4",
            "port": 1812,
            "secret": "testing123"
        },
        {
            "host": "radius2",
            "port": 1812,
            "secret": "testing123",
            "keywrap_enabled": true, // enable keywrap algorithm. Default is false
            "keywrap_format": "hex", // key format: hex or ascii
            “keywrap_kek”: “1122334455", // Key encryption key
            “keywrap_mack” “1122334455", // Message Authentication Code Key
        },
    ],
    "acct_interim_interval": 0,
    "dynamic_vlan": {
        "enabled": true,
        "type": "airespace-interface-name",
        "vlans": {
            "131": "default",
            "322": "fast,video"
        }
        "default_vlan_id": 999
        "local_vlan_ids": []
    },
    "dns_server_rewrite": {
        "enabled": true,
        "radius_groups": {
            "contractor": "172.1.1.1",
            "guest": "8.8.8.8"
        }
    },
    "coa_servers": [
        {
            "enabled": false,
            "ip": "1.2.3.4",
            "port": 3799,
            "secret": "testing456",
            "disable_event_timestamp_check": false
        }
    ],
    "radsec": {
        // this schema applies to
        //    /api/v1/orgs/:org_id/wlans
        //    /api/v1/sites/:site_id/wlans
        //    /api/v1/sites/:site_id/devices/:device_id

        "enabled": true,

        // either specify the list of radsec servers
        "server_name": "radsec.abc.com",
        "servers": [
            {
                "host": "1.1.1.1",
                "port": 1812
            },
            {
                "host": "radsec",
                "port": 1812
            }
        ],
        "idle_timeout": 60,

        // or use mxedge(s) as radsecproxy
        "use_mxedge": true,
        "coa_enabled": true,  // default is false
        "mxcluster_ids": ["572586b7-f97b-a22b-526c-8b97a3f609c4"], // to use mxclusters.radsec.proxy_hosts
        "use_site_mxedge": false,  // else, to use radsec.proxy_hosts; default is false
        "proxy_hosts": ["mxedge1.local"], // default is site.mxedge.radsec.proxy_hosts which must be a superset of all wlans[*].radsec.proxy_hosts
        // when radsec.proxy_hosts are not used, tunnel peers (org or site mxedges) are used irrespective of use_site_mxedge
    },
    "mist_nac": {
        // when enabled
        // - auth_servers ignored
        // - acct_servers ignored
        // - coa_servers ignored
        // - radsec ignored
        "enabled": true,
        "auth_servers_timeout": 5,
        "auth_servers_retries": 3,
        "fast_dot1x_timers": true,
        "acct_interim_interval": 1,
        "coa_enabled": true,
        "coa_port": 2880
        "network": "guest",
        "source_ip": "1.2.3.4", 
    },
    "airwatch": {
        "enabled": true,
        "console_url": "https://hs1.airwatchportals.com",
        "api_key": "aHhlbGxvYXNkZmFzZGZhc2Rmc2RmCg==",
        "username": "user1",
        "password": "test123"
    },
    "cisco_cwa": {
        "enabled": false,

        "allowed_subnets": [
            "63.5.3.0/24"
        ],
        "blocked_subnets": [
            "192.168.0.0/16",
            "172.16.0.0/12"
        ],
        "allowed_hostnames": [
            "snapchat.com",
            "ibm.com"
        ]
    },

    // band is deprecated and kept for backward compability. Use bands instead.
    "band": "24",
    // for a tri-band AP
    "bands": ["24", "5", "6"],
    "band_steer": true,
    "band_steer_force_band5": true,

    "rateset": {
        "24": {
            "min_rssi": 0,
            "template": "default"
            "legacy": [ "1", "2b", "5.5", "11", "6", "9", "12", "18", "24", "36", "48", "54" ],
            "ht": "00ff00ff00ff",
        },
        "5": {
            "min_rssi": -70,
            "template": "custom",
            "legacy": [ "6", "9", "12", "18", "24b", "36", "48", "54" ],
            "ht": "00ff00ff00ff",
            "vht": "03ff03ff03ff01ff",
            "he": "0fff0fff0fff0fff",
            "eht": "3fff0fff0fff03ff",
        }
    },
    // no-legacy (no 11b, copied from Cisco):
    //    2.4: 6(B), 9, 12, 18, 24, 36, 48, 54 + HT + VHT
    //    5:   6(B), 9, 12(B), 18, 24(B), 36, 48, 54 + HT + VHT

    // compatible (all, like before, default setting that Broadcom/Atheros used):
    //    2.4: 1(B), 2(B), 5.5(B), 6, 9, 11(B), 12, 18, 24, 36, 48, 54 + HT + VHT
    //    5:   6(B), 9, 12(B), 18, 24(B), 36, 48, 54 + HT + VHT

    // high-density (no 11b, no low rates):
    //    2.4: 24(B), 36, 48, 54 + HT/MCS3-7,11-15,19-23,27-31 + VHT/MCS3-9
    //    5:   24(B), 36, 48, 54 + HT/MCS3-7,11-15,19-23,27-31 + VHT/MCS3-9

    // for disable ht or vht rates (boolean)
    "disable_ht_vht_rates": true, 

    // for model supporting 11AX only
    "disable_11ax": false,

    // for Wi-Fi 7
    "disable_11be": true,  // default is false

    // if interface is all / eth0 / eth1 / eth2 / eth3, vlan can be specified
    "interface": "all",
    "vlan_enabled": false,
    "vlan_id": 3,

    // vlan pooling allows AP to place client on different VLAN using a deterministic algorithm
    "vlan_pooling": false,
    "vlan_ids": [3, 4, 5],

    // data tunnel - L2TP/IPSec tunnel
    "interface": "wxtunnel",
    "wxtunnel_id": "7dae216d-7c98-a51b-e068-dd7d477b7216",
    "wxtunnel_remote_id": "wifiguest"

    // data tunnel - Mist Tunnel
    "interface": "mxtunnel",
    "mxtunnel_ids": [ "08cd7499-5841-51c8-e663-fb16b6f3b45e" ],
    // disable the WLAN if
    "disable_when_mxtunnel_down": false,  // default is false
    // when different mxcluster is on different subnet, we'd want to disconnect clients (so they'll reconnect and get new IPs)
    "reconnect_clients_when_roaming_mxcluster": false,  // default is false

    // data tunnel = Mist Tunnel over Site MXEdges
    "interface": "site_mxedge",
    "mxtunnel_names": [ "default" ],

    // whether to hide SSID
    "hide_ssid": false,

    // other advanced options
    "dtim": 2,
    "disable_wmm": false,
    "disable_uapsd": false,
    "use_eapol_v1": false,
    "legacy_overds": false,
    "hostname_ie": false,
    // enable AP-AP keycaching via multicast
    "enable_local_keycaching": true,  // default is false
    "max_num_clients": 0,  // 0 (default is unlimited), 1-128

    // filters
    "isolation": false,
    "l2_isolation": false,
    "arp_filter": true
    "limit_bcast": false,
    "allow_mdns": false,
    "allow_ssdp": false,
    "allow_ipv6_ndp": true,
    "no_static_ip": false,
    "no_static_dns": false,
    "limit_probe_response": false,

    // by default, we'd inspect all DHCP packets and drop those unrelated to the wireless client itself
    // in the case where client is a wireless bridge (DHCP packets for other MACs will need to be forwarded), wireless_bridging can be enabled
    "enable_wireless_bridging": false,
    // if the client bridge is doing DHCP on behalf of other devices (L2-NAT), enable dhcp_tracking will cut down DHCP response packets to be forwarded to wireless
    "enable_wireless_bridging_dhcp_tracking": false,

    // when any of the following is true, this WLAN will be disabled
    // - cannot get IP
    // - cannot obtain default gateway
    // - cannot reach default gateway
    "disable_when_gateway_unreachable": false,  // default is false

    // access control,
    "block_blacklist_clients": false,

    // apply_to
    "apply_to": "site",
    "wxtag_ids": [],
    "ap_ids": [],

    // bandwidth limiting
    "wlan_limit_up_enabled": true,
    "wlan_limit_up": 10240,
    "wlan_limit_down_enabled": true,
    "wlan_limit_down": 20480,
    "client_limit_up_enabled": true,
    "client_limit_up": 512,
    "client_limit_down_enabled": true,
    "client_limit_down": 1024,

    "schedule": {
        "enabled": true,
        "hours": {
            "mon": "09:00-17:00",
            "fri": "09:00-17:00"
        }
    },

    "qos": {
        "overwrite": true,
        // same access class for all traffic
        "class": "best_effort"
    },

    "app_limit": {
        "enabled": true,
        "apps": {
            "netflix": 60,
            "dropbox": 300
        },
        "wxtag_ids": {
            "f99862d9-2726-931f-7559-3dfdf5d070d3": 30
        }
    },

    "app_qos": {
        "enabled": true,
        "apps": {
            "skype-business-voice": {
                // all optional
                "dscp": 46, // a reasonable default will be used if omitted
            },
            "skype-business-video": {
                // all optional
                "dscp": 32,
                "src_subnet": "10.2.0.0/16", // subnet filter is not required but helps AP to only inspect certain traffic (thus reducing AP load)
                "dst_subnet": "10.2.0.0/16"
            }
        },
        "others": [
            {
                "protocol": "udp",
                "src_subnet": "10.2.0.0/16",
                "dst_subnet": "10.2.0.0/16",
                "port_ranges": "80,1024-65535",
                "dscp": 32
            }
        ]
    },

    // bonjour support is draft/experimental/subject to change
    "bonjour": {
        "enabled": true,
        "services": {
            "airprint": {
                "scope": "same_map",  // same_ap, same_map, same_site (default)
            },
            "airplay": {
                "scope": "same_ap",

                // optional 
                "radius_groups": ["teachers"]
            }
        },
        "additional_vlan_ids": [80],
        // to prevent wireless clients to discover bonjour devices on the same WLAN
        "disable_local": false
    },

    “hotspot20”: {
         “enabled”: true,
         “operators”: ["google", "att"],
         “venue_name”: ”some_name”,
         "domain_name": ["mist.com"],
         "rcoi": ["5A03BA0000"],
         "nai_realms":[
          {
            "id":"mistsys.com",
            "eap_type":"tls"
          }
        ]
    },

    // whether to inject option 82 when forwarding DHCP packets
    "inject_dhcp_option_82": {
        "enabled": true,
        "circuit_id": "{{SSID}}:{{AP_MAC}}",
    },

    "max_idletime": 1800,

    "sle_excluded": false,

    "disable_v1_roam_notify": true,
    "disable_v2_roam_notify": false,

    // portal - none / password / multi
    "portal": {
        "enabled": true,
        "bypass_when_cloud_down": false,
        "auth": "multi",
        "passphrase_enabled": true,
        "passphrase_expire": none,
        "password": "let me in",
        "forward": true,
        "forward_url": "http://abc.com/promotions",
        "expire": 1440,
        "privacy": false,

        "facebook_enabled": true,
        "facebook_client_id": ...,
        "facebook_client_secret": .....,
        "facebook_email_domains": [],
        "facebook_expire": none,

        "google_enabled": true,
        "google_email_domains": ["mydomain.edu", "mydomain.org"],
        "google_expire": none,

        "amazon_enabled": false,
        "amazon_client_id": ...,
        "amazon_client_secret": .....,
        "amazon_email_domains": [],
        "amazon_expire": none,

        "microsoft_enabled": false,
        "microsoft_client_id": ....,
        "microsoft_client_secret": .....,
        "microsoft_email_domains": [],
        "microsoft_expire": none,

        "azure_enabled": true,
        "azure_tenant_id": .....,
        "azure_client_id": ....,
        "azure_client_secret": .....,
        "azure_expire": none,

        "sponsor_enabled": false,
        "sponsor_email_domains": ["reserved.net", "reserved.org"],
        "sponsors": {"sponsor1@company.com": "FirstName1 LastName1", "sponsor2@company.com": "FirstName2 LastName2"}
        "sponsor_link_validity_duration": 30,
        "sponsor_notify_all": false,
        "sponsor_expire": none,
        "predefined_sponsors_enabled": true, // will show sponsor emails as dropdown list
        "predefined_sponsors_hide_email": false, // if enabled, hides sponsor's email from list
        "sponsor_auto_approve": false,  // automatically approve guest, sponsor will receive an email and can reject the access
        "sponsor_status_notify": false, // if enabled, guest will get email about sponsor's action (approve/deny)

        "sms_enabled": true,
        "sms_provider": "twilio",
        "sms_expire": none,
        "twilio_sid":  "AC72ec6ba0ec5af30e6731c5e47abcdefgh",
        "twilio_auth_token": "af9dac44c344a875ab5d31cb7abcdefg",
        "twilio_phone_number": "+18548888888",
        "broadnet_user_id": "juniper",
        "broadnet_password": "password",
        "broadnet_sid": "string", //default is 'MIST'
        "clickatell_api_key": "string",
        "puzzel_service_id": "string",
        "puzzel_username": "string",
        "puzzel_password": "string",
        "gupshup_userid": "string",
        "gupshup_password": "string",
        "telstra_client_id": "string",
        "telstra_client_secret": "string",
        "smsglobal_api_key": "string",
        "smsglobal_api_secret": "string",

        "email_enabled": false,
        "cross_site": false,
    },
    "portal_template_url": "https://......",
    "portal_image": "https://url/to/image.png",
    "thumbnail": "https://url/to/image.png",

    // portal - external
    "portal": {
        "enabled": true,
        "auth": "external",
        "external_portal_url": "http://myportal.abc.com"
    },
    "portal_api_secret": "EIfPMOykI3lMlDdNPub2WcbqT6dNOtWwmYHAd6bY"

    // portal - sso
    "portal": {
        "enabled": true,
        "auth": "sso",
        "sso_issuer": "https://app.onelogin.com/saml/metadata/138130"
        "sso_idp_cert": "-----BEGIN CERTIFICATE-----\nMIIFZjCCA06gAwIBAgIIP61/1qm/uDowDQYJKoZIhvcNAQELBQE\n-----END CERTIFICATE-----",
        "sso_idp_sign_algo": "sha256",
        "sso_idp_sso_url": "https://yourorg.onelogin.com/trust/saml2/http-post/sso/138130",
        "sso_nameid_format": "email",
        // optional
        "sso_forced_role": "desired",  // ignore any Role attributes and use this instead
        "sso_default_role": "guest" // use this role if Role attribute not returned (when sso_forced_role is not defined)
    },
    "portal_sso_url": "https://portal.mist.com/saml/be22bba7-8e22-e1cf-5185-b880816fe2cf/login"

    // portal - none / multi / external
    "portal_allowed_subnets": [
        "63.5.3.0/24"
    ],
    "portal_allowed_hostnames": [
        "snapchat.com",
        "ibm.com"
    ],
    "portal_denied_hostnames": [
        "msg.snapchat.com"
    ]
}

N.B portal_template will be forked out of wlan objects soon. To fetch portal_template, please query portal_template_url. To update portal_template, use Wlan Portal Template.

Parameters

Name Type Description
ssid string the name of the SSID
enabled boolean if this wlan is enabled, default is True
auth object authentication/security policies
type string open / psk / wep / eap / eap192 / psk-tkip / psk-wpa2-tkip, default is open
pairwise list when type=psk / eap, one of more of wpa2-ccmp / wpa1-tkip / wpa1-ccmp / wpa2-tkip, default is [“wpa2-ccmp”]
psk string when type=psk, 8-64 characters, or 64 hex characters
wep_as_secondary_auth boolean enable WEP as secondary auth
keys list when type=wep, four 10-character or 26-character hex string, null can be used. All keys, if provided, have to be in the same length
key_idx int when type=wep, 1 to 4, default is 1
multi_psk_only boolean whether to only use multi_psk, default is false
private_wlan boolean whether private wlan is enabled. only applicable to multi_psk mode
enable_mac_auth boolean whether to enable MAC Auth, uses the same auth_servers, default is false
eap_reauth boolean whether to trigger EAP reauth when the session ends, default is false
roam_mode string none (default) / OKC / 11r
apply_to string site / wxtags / aps
wxtag_ids list list of wxtag_ids
ap_ids list list of device ids
band string which radio the wlan should apply to, both (default) / 24 / 5
bands list list of radios that the wlan should apply to. one of more of 24 / 5 / 6. Default is 24 and 5 if not specified.
band_steer boolean whether to enable band_steering, this works only when band==both, default is false
band_steer_force_band5 boolean force dual-band capable client to connect to 5G, default is false
isolation boolean whether to stop clients to talk to each other, default is false
l2_isolation boolean if isolation is enabled, whether to deny clients to talk to L2 on the LAN, default is false
arp_filter boolean whether to enable smart arp filter, default is false
limit_bcast boolean whether to limit broadcast packets going to wireless (i.e. only allow certain bcast packets to go through), default is false
allow_mdns boolean only applicable when limit_bcast==true, which allows mDNS / Bonjour packets to go through, default is false
allow_ssdp boolean only applicable when limit_bcast==true, which allows SSDP, default is false
allow_ipv6_ndp boolean only applicable when limit_bcast==true, which allows or disallows ipv6 Neighbor Discovery packets to go through, default is true
no_static_ip boolean whether to only allow client that we’ve learned from DHCP exchange to talk, default is false
no_static_dns boolean whether to only allow client to use DNS that we’ve learned from DHCP response, default is false
enable_wireless_bridging boolean whether to enable wireless bridging, which allows more broadcast packets to go through
limit_probe_response boolean limit probe response base on some heuristic rules
block_blacklist_clients boolean whether to block the clients in the blacklist (up to first 256 macs)
vlan_enabled boolean if vlan tagging is enabled, default is false
vlan_id int 1-4094
vlan_pooling boolean vlan pooling allows AP to place client on different VLAN using a deterministic algorithm, default is false
vlan_ids list list of VLAN ids
hide_ssid boolean whether to hide SSID in beacon, default is false
schedule object WLAN operating schedule, default is disabled
hours object time ranges, the key is mon / tue / wed / thu / fri / sat / sun, the value is time range in “HH:MM-HH:MM” (24-hour format), the minimum resolution is 30 minute
max_idletime int max idle time in seconds, default is 1800. valid range is 60-86400
sle_excluded boolean whether to exclude this WLAN from SLE metrics, default is false
disable_v1_roam_notify boolean disable sending v1 roam notification messages
disable_v2_roam_notify boolean disable sending v2 roam notification messages

NOTE: specifically, enable_wireless_bridging allows forwarding of DHCP response to client not associated with the AP

RADIUS

Name Type Description
auth_servers_nas_id string optional, up to 48 bytes, will be dynamically generated if not provided. used only for authentication servers
auth_servers_nas_ip string optional, NAS-IP-ADDRESS to use
auth_servers_timeout int radius auth session timeout, default is 5. Following fast timers are set if “fast_dot1x_timers” knob is enabled. ‘quite-period’ and ‘transmit-period’ are set to half the value of auth_servers_timeout. ‘supplicant-timeout’ is also set when setting auth_servers_timeout and is set to default value of 10.
auth_servers_retries int radius auth session retries, default is 2. Following fast timers are set if “fast_dot1x_timers” knob is enabled. ‘retries’ are set to value of auth_servers_retries. ‘max-requests’ is also set when setting auth_servers_retries and is set to default value to 3.
fast_dot1x_timers boolean if set to true, sets default fast-timers with values calculated from ‘auth_servers_timeout’ and ‘auth_server_retries’.
acct_immediate_update boolean if set to true, it will enable coa-immediate-update and address-change-immediate-update on the access profile.
auth_server_selection string ordered (default) / unordered. When ordered, AP will prefer and go back to the first server if possible
auth_servers list list of RADIUS authentication servers, at least one is needed if auth type == eap, order matters where the first one is treated as primary
host string ip / hostname of RADIUS server
port int port of RADIUS server, default is 1812 for auth server and 1813 for acct server
secret string secret of RADIUS server
acct_servers list list of RADIUS accounting servers, optional, order matters where the first one is treated as primary
acct_interim_interval int how frequently should interim accounting be reported, 60-65535. default is 0 (use one specified in Access-Accept request from RADIUS Server). Very frequent messages can affect the performance of the radius server, 600 and up is recommended when enabled
coa_servers list list of COA (change of authorization) servers, optional
disable_event_timestamp_check boolean whether to disable Event-Timestamp Check, which is used to replay-protection, default is false (i.e. for better security)
dynamic_vlan object for 802.1x
enabled boolean whether to enable dynamic vlan, default is false
type string standard (using Tunnel-Private-Group-ID, widely supported), airespace-interface-name (Airespace/Cisco)
vlans object map between vlan_id (as string) to airespace interface names (comma-separated) or null for stndard mapping
default_vlan_id int vlan_id to use when there’s no match from RADIUS, default is 999
default_vlan_ids list vlan_ids to use when there’s no match from RADIUS, default is [“999”]
local_vlan_ids list vlan_ids to be locally bridged
radsec object RadSec related, once enabled, auth_servers / acct_servers / coa_servers will be ignored
server_name string name of the server to verify (against the cacerts in Org Setting)
use_mxedge string mxedge can be used as radsecproxy, see Mist Edge Cluster and Site Setting
dns_server_rewrite object for radius_group-based DNS server (rewrite DNS request depending on the Group RADIUS server returns)
radius_groups object map between radius_group and the desired DNS server (IPv4 only)
dynamic_psk object for dynamic PSK where we get per-user PSK from Radius / Cloud WLC
default_psk string default PSK to use if cloud WLC is not available, 8-63 characters

MIST NAC

Name Type Description
enabled boolean whether to enable mist nac
auth_servers_timeout int radius auth session timeout, default is 5. Following fast timers are set if “fast_dot1x_timers” knob is enabled. ‘quite-period’ and ‘transmit-period’ are set to half the value of auth_servers_timeout. ‘supplicant-timeout’ is also set when setting auth_servers_timeout and is set to default value of 10.
auth_servers_retries int radius auth session retries, default is 2. Following fast timers are set if “fast_dot1x_timers” knob is enabled. ‘retries’ are set to value of auth_servers_retries. ‘max-requests’ is also set when setting auth_servers_retries and is set to default value to 3.
fast_dot1x_timers boolean if set to true, sets default fast-timers with values calculated from ‘auth_servers_timeout’ and ‘auth_server_retries’.
acct_interim_interval int how frequently should interim accounting be reported, 60-65535. default is 0 (use one specified in Access-Accept request from Server). Very frequent messages can affect the performance of the radius server, 600 and up is recommended when enabled
coa_enabled boolean allows a RADIUS server to dynamically modify the authorization status of a user session
coa_port int the communication port used for “Change of Authorization” (CoA) messages
network string which network the mist nac server resides in
source_ip string In case there is a static IP for this network, we can specify it using source ip

AirWatch

Name Type Description
airwatch object Airwatch related
console_url string console URL
api_key string API Key
username string username
password string password

Cisco CWA

Cisco CWA (central web authentication) required RADIUS with COA in order to work. See CWA for more details.

Name Type Description
cisco_cwa object Cisco CWA Related
enabled boolean whether to enable CWA,
allowed_subnets list list of CIDRs
blocked_subnets list list of blocked CIDRs
allowed_hostnames list list of hostnames without http(s):// (matched by substring)

QoS

Name Type Description
overwrite boolean whether to overwrite QoS
class string background / best_effort (default) / video / voice

Bonjour

Name Type Description
bonjour object bonjour-related
enabled boolean whether to enable bonjour for this WLAN, default is false. Once enabled, limit_bcast is assumed true, allow_mdns is assumed false
services object what services are allowed
scope string how bonjour services should be discovered for the same WLAN, same_site (default) / same_map / same_ap
disable_local boolean whether to prevent wireless clients to discover bonjour devices on the same WLAN, default is false
radius_groups list optional, if the service is further restricted for certain RADIUS groups
additional_vlan_ids list additional VLAN IDs (on the LAN side or from other WLANs) should we be forwarding bonjour queries/responses

Note: bonjour settings supercedes allow_mdns

Data Tunnel

Name Type Description
interface string where this WLAN will be connected to. all (all external ports, default) / eth0 / eth1 / eth2 / eth3 / wxtunnel / mxtunnel / site_mxedge
wxtunnel_id string when interface=wxtunnel, id of the WXLAN Tunnel
wxtunnel_remote_id string when interface=wxtunnel, remote tunnel identifier
mxtunnel_id string (deprecated, use mxtunnel_ids instead) when interface=mxtunnel, id of the Mist Tunnel
mxtunnel_ids list when interface=mxtunnel, ids of the Mist Tunnels
mxtunnel_name string when interface=site_medge, name of the mxtunnel that in mxtunnels under Site Setting, default is default
mxtunnel object when interface=site_medge, the definition of the Mist Tunnels (key is the name)

Others

Name Type Description
dtim int dtim, default is 2
disable_wmm boolean whether to disable WMM, default is false
disable_uapsd boolean whether to disable U-APSD, default is false
use_eapol_v1 boolean if auth.type==’eap’ or ‘psk’, should only be set for legacy client, such as pre-2004, 802.11b devices
legacy_overds boolean legacy devices requires the Over-DS (for Fast BSS Transition) bit set (while our chip doesn’t support it). Warning! Enabling this will cause problem for iOS devices.
hostname_ie boolean include hostname inside IE in AP beacons / probe responses, default is false
enable_local_keycaching boolean enable AP-AP keycaching via multicast, default is false

Date Rates

Name Type Description
rateset object rateset (data rates to support)
min_rssi int Minimum RSSI for client to connect, 0 means not enforcing
template string no-legacy (basically no 11b and only supports 6 or 12 and up for 11a/g) / compatible (allow more, the default for now) / high-density (only 11n and 11ac) / custom / legacy-only (disable HT/VHT IEs)
legacy list list of supported rates (IE=1) and extended supported rates (IE=50) for custom template, append ‘b’ at the end to indicate a rate being basic/mandatory. If template=custom is configured and legacy does not define at least one basic rate, it will use no-legacy default values
ht string MCS bitmasks for 4 streams (16-bit for each stream, MCS0 is least significant bit), e.g. 00ff 00f0 001f limits HT rates to MCS 0-7 for 1 stream, MCS 4-7 for 2 stream (i.e. MCS 12-15), MCS 1-5 for 3 stream (i.e. MCS 16-20)
vht string MCS bitmasks for 4 streams (16-bit for each stream, MCS0 is least significant bit), e.g. 03ff 01ff 00ff limits VHT rates to MCS 0-9 for 1 stream, MCS 0-8 for 2 streams, and MCS 0-7 for 3 streams.
he string HE MCS bitmasks for 4 streams (16-bit for each stream, MCS0 is least significant bit)
eht string EHT MCS bitmasks for 4 streams (16-bit for each stream, MCS0 is least significant bit)
disable_11be boolean disable Wi-Fi 7 EHT IEs, default is false
disable_11ax boolean some old WLAN drivers may not be compatible , default is false
disable_ht_vht_rates object disable ht or vht rates

Rate Limit

Name Type Description
wlan_limit_up_enabled boolean if uplink limiting for whole wlan is enabled, default is false
wlan_limit_up int kbps
wlan_limit_down_enabled boolean if downlink limiting for whole wlan is enabled, default is false
wlan_limit_down int kbps
client_limit_up_enabled boolean if uplink limiting per-client is enabled, default is false
client_limit_up int kbps
client_limit_down_enabled boolean if downlink limiting per-client is enabled, default is false
client_limit_down int kbps
app_limit object bandwidth limiting for apps (applies to up/down)
apps object map from app key to bandwidth in kbps. app key defined in Get Application List
wxtag_ids object map from wxtag_id of Hostname Wxlan Tags to bandwidth in kbps

Hotspot 2.0

Name Type Description
hotspot20 object hotspot 2.0
enabled boolean whether to enable hotspot 2.0 config
operators list list of operators to support, options: att, google, tmobile, charter, boingo, hughes_systique, single_digits, global_reach
venue_name string venue name, default is site name
domain_name list list of domain names to overwrite default template, optional
rcoi list list of roaming consortium to overwrite default template, optional
nai_realms list list of NAI Realm to overwrite default template, optional, eap_type options: tls, aka, ttls

Guest Portal

Name Type Description
portal object portal-related configurations
enabled boolean whether guest portal is enabled, default is false
auth string authentication scheme, none (default, supporting multi auth) / external (external portal) / sso
forward boolean whether to forward the user to another URL after authorized, default is false, this takes precedence
forward_url string the URL to forward the user to
external_portal_url string external portal URL (e.g. https://host/url) where we can append our query parameters to
privacy boolean if enabled, personal information will not be stored (email, name, fields*), default is false
password string passphrase
passphrase_expire long interval for which guest remains authorized using passphrase auth (in minutes), default is none, if not provided, uses expire
sms_enabled boolean when auth=multi, whether sms is enabled
sms_expire long interval for which guest remains authorized using sms auth (in minutes), default is none, if not provided, uses expire
passphrase_enabled boolean whether password is enabled
facebook_enabled boolean whether facebook is enabled as a login method
facebook_client_id string facebook OAuth2 app id. This is mandatory, if facebook_enabled is true
facebook_client_secret string facebook OAuth2 app secret. This is mandatory, if facebook_enabled is true
facebook_email_domains list Matches authenticated user email against provided domains. If null or [], all authenticated emails will be allowed.
facebook_expire long interval for which guest remains authorized using facebook auth (in minutes), default is none, if not provided, uses expire
google_enabled boolean whether google is enabled as login method
google_email_domains list Matches authenticated user email against provided domains. If null or [], all authenticated emails will be allowed.
google_expire long interval for which guest remains authorized using google auth (in minutes), default is none, if not provided, uses expire
amazon_enabled boolean whether amazon is enabled as a login method
amazon_client_id string amazon OAuth2 client id. This is optional. If not provided, it will use a default one.
amazon_client_secret string amazon OAuth2 client secret. If amazon_client_id was provided, provide a correspoinding value. Else leave blank.
amazon_email_domains list Matches authenticated user email against provided domains. If null or [], all authenticated emails will be allowed.
amazon_expire long interval for which guest remains authorized using amazon auth (in minutes), default is none, if not provided, uses expire
microsoft_enabled boolean whether microsoft 365 is enabled as a login method
microsoft_client_id string microsoft 365 OAuth2 client id. This is optional. If not provided, it will use a default one.
microsoft_client_secret string microsoft 365 OAuth2 client secret. If microsoft_client_id was provided, provide a correspoinding value. Else leave blank.
microsoft_email_domains list Matches authenticated user email against provided domains. If null or [], all authenticated emails will be allowed.
microsoft_expire long interval for which guest remains authorized using microsoft auth (in minutes), default is none, if not provided, uses expire
azure_enabled boolean whether Azure Active Directory is enabled as a login method
azure_tenant_id string azure active directory tenant id. This is mandatory if azure_enabled is true.
azure_client_id string azure active directory app client id.This is mandatory if azure_enabled is true.
azure_client_secret string azure active directory app client secret. This is mandatory if azure_enabled is true.
azure_expire long interval for which guest remains authorized using azure auth (in minutes), default is none, if not provided, uses expire
sms_enabled boolean whether sms is enabled as a login method
email_enabled boolean whether email (access code verification) is enabled as a login method
email_expire long interval for which guest remains authorized using email auth (in minutes), default is none, if not provided, uses expire
sms_provider string how the sms is routed. choices are manual, twilio,broadnet,clickatell, puzzel, gupshup, telstra, smsglobal. default is manual, where user has to select carrier.
twilio_sid string Account SID provided by Twilio
twilio_auth_token string Auth token account with twilio account
twilio_phone_number string Twilio phone number associated with the account. See example for accepted format.
broadnet_user_id string User name supplied by BroadNet
broadnet_password string Password supplied by BroadNet
broadnet_sid string Sender Id for BroadNet (default is ‘MIST’)
clickatell_api_key string API key provided by Clickatell
puzzel_service_id string Service ID provided by Puzzel
puzzel_username string Username provided by Puzzel
puzzel_password string Password provided by Puzzel
gupshup_userid string User id provided by Gupshup
gupshup_password string Password provided by Gupshup
telstra_client_id string Client ID provided by Telstra
telstra_client_secret string Client secret provided by Telstra
smsglobal_api_key string Api key provided by SMSGlobal
smsglobal_api_secret string Api secret provided by SMSGlobal
expire long how long to remain authorized, in minutes, default is 1440 (24 hours)
sponsor_enabled boolean whether sponsor is enabled
sponsor_email_domains list list of domain allowed for sponsor email. Required if sponsor_enabled is true and sponsors is empty.
sponsors object object of allowed sponsors email with name. Required if sponsor_enabled is true and sponsor_email_domains is empty.
sponsor_link_validity_duration int how long to remain valid sponsored guest request approve/deny link received in email, in minutes, default is 60 minutes, min is 5 minutes and max is 60 minutes.
sponsor_notify_all boolean whether to notify all sponsors that are mentioned in sponsors object. Both sponsor_notify_all and predefined_sponsors_enabled should be true in order to notify sponsors. If true, email sent to 10 sponsors in no particular order.
predefined_sponsors_enabled boolean whether to show list of sponsor emails mentioned in sponsors object as a dropdown. If both sponsor_notify_all and predefined_sponsors_enabled are false, behaviour is acc to sponsor_email_domains
sponsor_auto_approve boolean whether to automatically approve guest and allow sponsor to revoke guest access, needs predefined_sponsors_enabled enabled and sponsor_notify_all disabled
predefined_sponsors_hide_email boolean whether to hide sponsor’s email from list of sponsors, default is false
sponsor_status_notify boolean whether to notify guest about sponsor’s status via email
sponsor_expire long interval for which guest remains authorized using sponsor auth (in minutes), default is none, if not provided, uses expire
portal_api_secret string api secret (auto-generated) that can be used to sign guest authorization requests
portal_image string Url of portal background image
thumbnail string Url of portal background image thumbnail
portal_allowed_subnets list list of CIDRs
portal_allowed_hostnames list list of hostnames without http(s):// (matched by substring)
portal_denied_hostnames list list of hostnames without http(s):// (matched by substring), this takes precedence over portal_allowed_hostnames
bypass_when_cloud_down boolean whether to bypass the guest portal when cloud not reachable (and apply the default policies), default is false
sso_issuer string IDP issuer URL
sso_idp_cert string IDP Cert (used to verify the signed response)
sso_idp_sso_url string IDP Single-Sign-On URL
sso_idp_sign_algo string signing algorithm for SAML Assertion
sso_nameid_format string email (default) / unspecified
sso_default_role string default role to assign if there’s no match. By default, an assertion is treated as invalid when there’s no role matched
portal_sso_url string for SAML, this is used as the ACS URL
cross_site boolean whether to allow guest to roam between WLANs (with same WLAN.ssid, regardless of variables) of different sites of same org without reauthentication. default is false. (disable random_mac for seamless roaming)

Wlan Portal Image Upload

Upload background image for Portal

POST /api/v1/sites/:site_id/wlans/:wlan_id/portal_image

Request

A multi-part POST

"json": a JSON string describing your upload
"file": a binary file

Wlan Portal Image Delete

Delete background image for Portal

DELETE /api/v1/sites/:site_id/wlans/:wlan_id/portal_image

If image is not uploaded or is deleted, portal will use default image.

Wlan Portal Template

Portal template will be separated from Wlan object and storage of portal_template object in Wlan object will soon be deprecated

PUT /api/v1/sites/:site_id/wlans/:wlan_id/portal_template

Request

{
    "pageTitle": "Welcome",
    "message": "Please enjoy the complimentary Wifi",
    "authLabel": "Connect to WIFI with",
    "color": "#1074bc",
    "colorDark": "#0b5183",
    "colorLight": "#3589c6",
    "alignment": "left",

    "passphraseCancel": "Cancel",
    "passphraseLabel": "Passphrase",
    "passphraseError": "Invalid Passphrase",
    "passphraseMessage": "Enter the secret passphrase to access the WiFi network.",
    "passphraseSubmit": "Sign In",
    "passphraseTitle": "Sign in with Passphrase",

    "tos": true,
    "tosText": "terms of service",
    "tosAcceptLabel": "I accept the Terms of Service",
    "tosLink": "Terms of Service",
    "backLink": "Back to Sign In",
    "tosError": "Please review and accept terms of service",

    "optout": false,
    "optoutDefault": true,
    "optoutLabel": "Do not store"

    "email": true,
    "emailLabel": "Email",
    "emailError": "Please provide valid email",

    "emailCodeCancel": "I did not receive the code",
    "emailCodeFieldLabel": "Access Code",
    "emailCodeMessage": "Enter the access number that was sent to your email address.",
    "emailCodeSubmit": "Sign In",
    "emailCodeTitle": "Access Code",

    "name": true,
    "nameLabel": "Name",
    "nameError": "Please provide your name",

    "company": true,
    "companyLabel": "Company",
    "companyError": "Please provide company name",

    "field1": true,
    "field1Label": "Custom1",
    "field1Required": true,
    "field1Error": "Please provide field1",
    "field2": true,
    "field2Label": "Custom1",
    "field2Required": false,
    "field2Error": "Please provide field2",
    "field3": true,
    "field3Label": "Custom1",
    "field3Required": false,
    "field3Error": "Please provide field3",
    "field4": true,
    "field4Label": "Custom1",
    "field4Required": false,
    "field4Error": "Please provide field4",

    "requiredFieldLabel": "required",

    "signInLabel": "Sign In",

    "poweredBy": true,

    "authButtonAmazon": "Sign in with Amazon",
    "authButtonAzure": "Sign in with Azure",
    "authButtonEmail": "Sign in with Email",
    "authButtonMicrosoft": "Sign in with Microsoft",
    "authButtonPassphrase": "Sign in with Passphrase",
    "authButtonGoogle": "Sign in with Google",
    "authButtonFacebook" : "Sign in with Facebook",
    "authButtonSms": "Sign in with Text Message",

    "emailAccessDomainError": "Access is restricted by email domain",

    "smsNumberFieldLabel": "Mobile Number",
    "smsCarrierFieldLabel": "Mobile Carrier",
    "smsCarrierDefault": "Please Select",
    "smsCarrierError": "Please select a mobile carrier",
    "smsNumberSubmit": "Sign In",
    "smsNumberCancel": "Cancel",
    "smsNumberTitle": "Text Message Confirmation",
    "smsCodeMessage": "Enter the confirmation code",
    "smsCodeFieldLabel": "Confirmation Code",
    "smsCodeSubmit": "Sumbit Code",
    "smsCodeCancel": "Cancel",
    "smsCodeError": "Invalid Access Code",
    "smsCodeTitle": "Access Code",
    "smsCountryFieldLabel": "Country Code",
    "smsCountryFormat": "+1",
    "smsHaveAccessCode": "I have an access code",
    "smsValidityDuration": 5,
    "smsMessageFormat": "Code {{code}} expires in {{duration}} minutes.",
    "smsNumberError": "Invalid Mobile Number",
    "smsNumberFormat": "2125551212 (digits only)",
    "smsNumberMessage": "We will send an access code to your mobile number which you can use to "
                            "connect to the WiFi network. Message and data rates may apply.",
    "smsUsernameFormat": "username",
    "emailTitle": "Sign in with Email",
    "emailMessage": "We will email you an authentication code which you can use to connect to the WiFi network.",
    "accessCodeAlternateEmail": "Use alternate email address",
    "emailFieldLabel": "Enter your email address" ,
    "emailSubmit": "Send Access Code",
    "emailCancel": "Cancel",
    "emailCodeError": "Please provide valid alternate email",

    "authButtonSponsor": "Sign in as Guest",
    "sponsorEmailError": "Please provide valid sponsor email",
    "sponsorNameError": "Please provide sponsor name",
    "sponsorBackLink": "Go back and edit request form",
    "sponsorCancel": "Cancel",
    "sponsorEmail": "Sponsor Email",
    "sponsorName": "Sponsor Name",
    "sponsorInfoApproved": "Your request was approved by",
    "sponsorInfoDenied": "Your request was denied by",
    "sponsorInfoPending": "Your notification has been sent to",
    "sponsorsInfoApproved": "Your request was approved,
    'sponsorsInfoDenied': 'Your request was denied',
    'sponsorsInfoPending': 'Your notification has been sent to the sponsors',
    "sponsorNotePending": "Please wait for them to acknowledge.",
    "sponsorRequestAccess": "Request Wifi Access",
    "sponsorSelectEmail": "Select Sponsor",
    'sponsorsError': 'Please select a sponsor',
    "sponsorStatusApproved": "Your request was approved",
    "sponsorStatusDenied": "Your request was denied",
    "sponsorStatusPending": "Notification Sent",
    'sponsorAutoApproved': 'Your request was approved.',
    'sponsorAutoApprovedNote': "Your notification has been sent to",
    'sponsorsAutoApprovedNote': "Your notification has been sent to the sponsors.",
    "sponsorSubmit": "Notify Sponsor",


    // Email Customization
    "sponsorEmailTemplate": "<html template to replace/override default sponsor email template>",

    "privacyPolicy": false,
    "privacyPolicyText": "privacy notice content",
    "privacyPolicyAcceptLabel": "I accept the Privacy Notice",
    "privacyPolicyLink": "Privacy Notice",
    "privacyPolicyError": "Please review and accept privacy notice",
    "marketingPolicyOptIn": false,
    "marketingPolicyOptInText": "Marketing policy content",
    "marketingPolicyOptInLabel": "I wish to receive Marketing notifications",
    "marketingPolicyLink": "Marketing Policy"
}

Parameters

Name Type Description
pageTitle string “Welcome”
message string “Please enjoy the complimentary Wifi”
color string “#1074bc”
colorDark string “#0b5183”
colorLight string “#3589c6”
alignment string defines alignment on portal. “left” is default.
passphraseLabel string Passphrase
passphraseError string error message when invalid passphrase is provided
tos boolean default is true
tosText string text of the Terms of Service
tosAcceptLabel string prefix of the label of the link to go to /tos
tosLink string label of the link to go to /tos
tosError string error message when tos not accepted
backLink string label of the link to go back to /logon
signInLabel string label of the button to /signin
poweredBy string whether to show “Powered by Mist”, default is true
email boolean whether email field is required, default is false
emailLabel string label of email field
emailError string error message when email not provided
name boolean whether name field is required, default is false
nameLabel string label of name field
nameError string error message when name not provided
company boolean whether company field is required, default is false
companyLabel string label of company field
companyError string error message when company not provided
requiredFieldLabel string label to denote required field
field1 boolean whether to ask field1
field1Label string label of field1
field1Required boolean whether field1 is required field
field1Error string error message when field1 not provided
field2 boolean whether to ask field2
field2Label string label of field2
field2Required boolean whether field2 is required field
field2Error string error message when field2 not provided
field3 boolean whether to ask field3
field3Label string label of field3
field3Required boolean whether field3 is required field
field3Error string error message when field3 not provided
field4 boolean whether to ask field4
field4Label string label of field4
field4Required boolean whether field4 is required field
field4Error string error message when field4 not provided
optout boolean whether to display “Do Not Store My Personal Information”
optoutLabel string label for “Do Not Store My Personal Information”
authButtonPassphrase string label for passphrase auth button
passphraseTitle string Title for passphrase details page
passphraseMessage string “Login using passphrase”
passphraseSubmit string “Sign in”
passphraseCancel string “Cancel”
authButtonGoogle string label for Google auth button
authButtonFacebook string label for Facebook auth button
authButtonSms string label for SMS auth button
emailAccessDomainError string error message when a user has valid social login but doesn’t match specified email domains.
smsNumberFieldLabel string label for field to provide mobile number
smsCarrierFieldLabel string label for mobile carrier drop-down list
smsNumberSubmit string label for submit button for code generation
smsNumberCancel string label for canceling mobile details for SMS auth
smsNumberTitle string Title for phone number details
smsCodeMessage string “Enter the confirmation code”
smsCodeFieldLabel string “Confirmation Code”
smsCodeSubmit string Label for confirmation code submit button
smsCodeCancel string Label for cancel confirmation code submission
smsCodeError string error message when confirmation code is invalid
smsHaveAccessCode string Label for checkbox to specify that the user has access code
smsValidityDuration int how long confirmation code should be considered valid (in minutes)
smsMessageFormat string format of access code sms message. {{code}} and {{duration}} are place holders and should be retained as is.
sponsorEmail string label for Sponsor Email
sponsorName string label for Sponsor Name
sponsorRequestAccess string ‘submit button label request Wifi Access and notify sponsor about guest request
sponsorSubmit string submit button label to notify sponsor about guest request
sponsorStatusDenied string text to display when sponsor denies request
sponsorStatusApproved string text to display if sponsor approves request
sponsorStatusPending string text to display if request is still pending
sponsorEmailError string “Please provide valid sponsor email”
sponsorNameError string “Please provide sponsor’s name”
sponsorBackLink string “Go back and edit request form”
sponsorCancel string “Cancel”
sponsorInfoApproved string “Your request was approved by”
sponsorInfoDenied string “Your request was denied by”
sponsorInfoPending string “Your notification has been sent to”
sponsorsInfoApproved string “Your request was approved”
sponsorsInfoDenied string “Your request was denied”
sponsorsInfoPending string “Your notification has been sent to the sponsors”
sponsorNotePending string “Please wait for them to acknowledge.”
sponsorSelectEmail string “Select Sponsor”
sponsorsError string “Please select a sponsor”
authButtonSponsor string label for Sponsor auth button
authButtonAmazon string label for Amazon auth button
authButtonAzure string label for Azure auth button
authButtonEmail string label for Email auth button
authButtonMicrosoft string label for Microsoft auth button
smsCarrierDefault string “Please Select”
smsCarrierError string “Please select a mobile carrier”
smsCodeTitle string “Access Code”
smsCountryFieldLabel string “Country Code”
smsCountryFormat string “+1”
smsNumberError string “Invalid Mobile Number”
smsNumberFormat string “2125551212 (digits only)”
smsNumberMessage string “We will send an access code to your mobile number which you can use to connect to the WiFi network. Message and data rates may apply.”
smsUsernameFormat string “username”
accessCodeAlternateEmail string “Use alternate email address”
emailMessage string “We will email you an authentication code which you can use to connect to the WiFi network.”
emailCodeError string “Please provide valid alternate email”
emailCancel string “Cancel”
emailFieldLabel string “Enter your email address”
emailTitle string “Sign in with Email”
emailSubmit string Label for confirmation code submit button using email auth
emailCodeCancel string Label for cancel confirmation code submission using email auth
emailCodeFieldLabel string “Confirmation Code”,
emailCodeMessage string “Enter the access number that was sent to your email address.”,
emailCodeSubmit string “Sign In”,
emailCodeTitle string “Access Code”,

authLabel|string|”Connect to WiFi with” sponsorEmailTemplate|string|html template to replace/override default sponsor email template; See Sponsor Email Template for more details privacyPolicy|boolean|default is false privacyPolicyText|string|privacy notice text privacyPolicyAcceptLabel|string|prefix of the label of the link to go to /privacy_notice, privacyPolicyLink|string|label of the link to go to /privacy_notice, privacyPolicyError|string|error message when privacy notice is not accepted”, marketingPolicyOptIn|boolean| whether marketing policy optin is enabled, marketingPolicyOptInText|string| marketing policy text, marketingPolicyOptInLabel|string| label for marketing optin, marketingPolicyLink|string| label of the link to go to /marketing_policy

Sponsor Email Template supports following template variables:

Name Description
approve_url Renders URL to approve the request; optionally &minutes=N query param can be appended to change the Authorization period of the guest, where N is a valid integer denoting number of minutes a guest remains authorized
deny_url Renders URL to reject the request
guest_email Renders Email ID of the guest
guest_name Renders Name of the guest
field1 Renders value of the Custom Field 1
field2 Renders value of the Custom Field 2
company Renders value of the Company field
sponsor_link_validity_duration Renders validity time of the request (i.e. Approve/Deny URL)
auth_expire_minutes Renders Wlan-level configured Guest Authorization Expiration time period (in minutes), If not configured then default (1 day in minutes)

Get Wlans Derived

GET /api/v1/sites/:site_id/wlans/derived?resolve=false&wlan_id=:wlan_id

Request

Name Type Description
resolve boolean whether to resolve SITE_VARS, default is false (as filter, optional)
wlan_id string filter by UUID of wlan

Response

[
    {
        "ssid": "Guest",
        "for_site": false,
        "template_id": "867860f2-dd82-3677-54a5-4d6b139c96ca",
        "template_name" "west coast",
        ...
    }
]

Response Definitions

Name Type Description
for_site boolean whether this is a site-level WLAN
template_id string the template id (if this is an org-level wlan with template_id)
template_name string name of the template

Get Guests Derived

GET /api/v1/sites/:site_id/guests/derived?cross_site=false

Request

Name Type Description
cross_site boolean whether to get org level guests, default is false i.e get site level guests

Response

[
    {
        "ssid": "Guest",
        "auth_method": "passphrase",
        "wlan_id": "867860f2-dd82-3677-54a5-4d6b139c96ca"
        ...
    }
]

To Crop Or Resize A Image

POST /api/v1/utils/resize_image

Request

A multi-part POST

"json": a JSON string
"file": a binary file

// for the JSON payload
{
    "width": 300,
    "height": 200",
    "topleft": [ 10, 50 ],
    "bottomright: [100, 100 ]
}

Test Twilio Setup

Allows validation of twilio setup

POST /api/v1/utils/test_twilio

Request

{
    "twilio_sid": "AC5f4366878d193fb4865ab151739999eb",
    "twilio_auth_token": "2135be04736a1a0a314bce432d61721a",
    "from": "+185051234567",
    "to": "+19999999999"
}

Parameters

Name Type Definition
twilio_sid string Twilio Account SID
twilio_auth_token string Auth Token associated with twilio account
from string One of the numbers you have in your Twilio account
to string Phone number of the recipient of SMS

In case of success, a text message confirming successful setup should be received. In case of error, twilio error code and message are returned.

Test Broadnet Setup

Allows validation of broadnet setup

POST /api/v1/utils/test_broadnet

Request

{
    "broadnet_user_id": "juniper",
    "broadnet_password": "sherlocked",
    "broadnet_sid": "MIST",
    "to": "+911122334455"
}

Parameters

Name Type Definition
broadnet_user_id string Broadnet account user id
broadnet_password string Broadnet account password
broadnet_sid string Sender Id, for the sms (default is ‘MIST’, if not provided)
to string Phone number of the recipient of SMS with country code

In case of success, a text message confirming successful setup should be received. In case of error, broadnet error message are returned.

Test Clickatell Setup

Allows validation of Clickatell setup

POST /api/v1/utils/test_clickatell

Request

{
    "clickatell_api_key": "Hk-ZWX4ZStWR29yS1pMvBQ=+",
    "to": "+911122334455"
}

Parameters

Name Type Definition
clickatell_api_key string Api Key for clickatell account
to string Phone number of the recipient of SMS with country code

In case of success, a text message confirming successful setup should be received. In case of error, clickatell error message are returned.

Test Puzzel Setup

Allows validation of puzzel setup

POST /api/v1/utils/test_puzzel

Request

{
    "puzzel_service_id": "2210",
    "puzzel_username": "puzzel",
    "puzzel_password": "sherlocked",
    "to": "+911122334455"
}

Parameters

Name Type Definition
puzzel_service_id string Puzzel account service id
puzzel_username string Puzzel account username
puzzel_password string Puzzel account password
to string Phone number of the recipient of SMS with country code

In case of success, a text message confirming successful setup should be received. In case of error, puzzel error message are returned.

Test Gupshup Setup

Allows validation of gupshup setup

POST /api/v1/utils/test_gupshup

Request

{
    "gupshup_userid": "juniper",
    "gupshup_password": "sherlocked",
    "to": "+911122334455"
}

Parameters

Name Type Definition
gupshup_userid string Gupshup account user id
gupshup_password string Gupshup account password
to string Phone number of the recipient of SMS with country code

In case of success, a text message confirming successful setup should be received. In case of error, gupshup error message are returned.

Test Telstra Setup

Allows validation of Telstra sms gateway credentials

POST /api/v1/utils/test_telstra

Request

{
    "telstra_client_id": "123456",
    "telstra_client_secret": "abcdef",
    "to": "+911122334455"
}

Parameters

Name Type Definition
telstra_client_id string Telstra client id
telstra_client_secret string Telstra client secret
to string Phone number of the recipient of SMS with country code

In case of success, a text message confirming successful setup should be received. In case of error, telstra error message are returned.

Test SMSGlobal Setup

Allows validation of SMSGlobal sms gateway credentials

POST /api/v1/utils/test_smsglobal

Request

{
    "smsglobal_api_key": "123456",
    "smsglobal_api_secret": "abcdef",
    "to": "+911122334455"
}

Parameters

Name Type Definition
smsglobal_api_key string SMSGlobal api key
smsglobal_api_secret string SMSGlobal api secret
to string Phone number of the recipient of SMS with country code

In case of success, a text message confirming successful setup should be received. In case of error, smsglobal error message are returned.

Map

Map definition

Maps may represent multiple floor one on top of another or just a collections of maps where the user decide to put into a single site.

Base URI

/api/v1/sites/:site_id/maps

For a map with type==’image’, use multi-part POST to insert a map as well as the image. To update attributes without updating image, PUT without the image. GET will contain an ‘url’ attribute with an URL to the image

Example

// for image map
{
    "name": "Mist Office",
    "type": "image",
    "ppm": 40.94,
    "width": 1250,
    "height": 1500,
    "origin_x": 35,
    "origin_y": 60,
    "orientation": 30,
    "locked": false,
    "wayfinding": {
        "snap_to_path": true,
        "micello": {
            "account_key": "adasdf",
            "map_id": "c660f81dd250c",
            "default_level_id": 5
        }
    },
    "wayfinding_path": {
        "coordinate": "actual",
        "nodes": [
            {
                "name": "N1",
                "position": {
                    "x": 746,
                    "y": 104
                },
                "edges": {
                    "N2": "1"
                }
            },
            {
                "name": "N2",
                "position": {
                    "x": 740,
                    "y": 318
                },
                "edges": {
                    "N1": "1",
                }
            }
        ]
    },
    "wall_path": {
        "coordinate": "actual",
        "nodes": [
            {
                "name": "N1",
                "position": {
                    "x": 746,
                    "y": 104
                },
                "edges": {
                    "N2": "1"
                }
            },
            {
                "name": "N2",
                "position": {
                    "x": 740,
                    "y": 318
                },
                "edges": {
                    "N1": "1",
                }
            }
        ]
    },
    "sitesurvey_path": [
        {
            "coordinate": "actual",
            "nodes": [
                {
                    "name": "W0",
                    "position": {
                        "x": 372,
                        "y": 192
                    },
                    "edges": {
                        "W1": 1
                    }
                },
                {
                    "name": "W1",
                    "position": {
                        "x": 485,
                        "y": 205
                    },
                    "edges": {
                        "W2": 1
                    }
                },
                {
                    "name": "W2",
                    "position": {
                        "x": 400,
                        "y": 295
                    },
                    "edges": {
                        "W0": 1
                    }
                },
            ],
            "name": "Default",
            "id": "cbdb7f0b-3be0-4872-88f9-58790b509c23-j68kows8"
        }
    ],
    "flags": {
        "assetHoldTime": 5,
        "storeTime": 10
    },
    "url": "https://url/to/image.png",
    "thumbnail_url": "https://url/to/image.png"
}

// for google map
{
    "name": "Oakridge Mall",
    "type": "google",
    "view": "roadmap",
    "origin_x": -122.033010,
    "origin_y": 37.295080,
    "latlng_tl": { "lat": 37.295057, "lng": -122.033095 },
    "latlng_br": { "lat": 37.295285, "lng": -122.032789 }
}

Parameters

Name Type Description
name string The name of the map
type string image / google, default is image
ppm float when type=image, pixels per meter
width int when type=image, width of the image map
height int when type=image, height of the image map
url string when type=image, the url
thumbnail_url string when type=image, the url for the thumbnail image / preview
view string when type=google. roadmap / satellite / hybrid / terrain
origin_x int the user-annotated x origin, pixels
origin_y int the user-annotated y origin, pixels
orientation int orientation of the map, 0 means up is north, 90 means up is west. default is 0
latlng_tl latlng when type=google, latitude / longitude of the top-left corner
latlng_br latlng when type=google, latitude / longitude of the bottom-right corner
wayfinding object properties related to wayfinding
wayfinding_path object a JSON blob for wayfinding (using Dijkstra’s algorithm)
wall_path object a JSON blob for wall definition (same format as wayfinding_path)
sitesurvey_path list a list of JSON blob for site survey path (same format as wayfinding_path)
locked boolean whether this map is considered locked down
flags list name/val pair objects for location engine to use

Add an image map

Add image map is a multipart POST which has an file (Image) and an optional json parameter

POST /api/v1/sites/:site_id/maps/:map_id/image

Request

"json": a JSON string describing your upload
"file": a binary file

Delete an image map

Delete image added to the map

DELETE /api/v1/sites/:site_id/maps/:map_id/image

Map Import

Import data from files is a multipart POST which has a file, a json, and an optional csv, to create floorplan and place matching ap automatically if supported, name ap if not exists

POST /api/v1/sites/:site_id/maps/import

Request

A multi-part POST

"json": a JSON string, includes vendor options: ekahau, ibwave, import_all_floorplans: optional, false by default,
import_height: optional, default: true, import_orientation: optional, default: true
"file": a binary file, option: .esx file (ekahau)
"csv": a csv file for ap name mapping, optional
// for the JSON payload
{
    "vendor_name": "ekahau",
    "import_all_floorplans": true  // optional
    "import_height": true, // optional
    "import_orientation": false // optional
}

Device Import CSV File Format

Vendor AP name,Mist AP Mac
US Office AP-2 - 5c:5b:35:00:00:02,5c5b35000002

Response

{
    "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
    "aps": [
        {
            "mac": "5c5b35000001",
            // placed 
            "action": "placed" 
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5"
            // named and placed
            "action": "named-placed"
            // if we ignore it (did nothing with it)
            "action": "ignored",
            "reason": "not found on current site",
            // floorplan id, height, orientation for ignored ap
            "floorplan_id": "cbdb7f0b-3be0-4872-88f9-58790b509c23-j68kows8"
            "orientation": 45,
            "height": 3
        }
    ],
    "floorplans": [
        {
            // whatever ID vendor has
            "id": "cbdb7f0b-3be0-4872-88f9-58790b509c23-j68kows8",
            "name": "map1",
            "action": "imported",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5"
        }
    ],
    "summary": {
        "num_ap_assigned": 1,
        "num_map_assigned": 1
    }
}

Import Micello Info

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.

POST /api/v1/sites/:site_id/maps/:map_id/wayfinding/import

Request

{
    "vendor_name": "micello",
    "account_key": "adasdf",
    "map_id": "c660f81dd250c",
    "default_level_id": 5
}
Name Type Description
vendor_name string the vendor ‘micello’
account_key string the account key that has access to the map
map_id string micello map id
default_level_id int micello floor/level id

Import Jibestream Info

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.

POST /api/v1/sites/:site_id/maps/:map_id/wayfinding/import

Request

{
    "vendor_name": "jibestream",
    "venue_id": 123,
    "map_id": "123",
    "ppm": 4.479186910505666,
    "client_id": "199d6770-0f6f-407a-9bd5-fc33c7840194",
    "client_secret": "/9Nog3yDzcYj0bY91XJZQLCt+m9DXaIVhx+Ghk3ddd",
    "customer_id": 123,
    "endpoint_url": "https://api.jibestream.com",
    "mmpp": 223.2548049411735
}
Name Type Description
vendor_name string the vendor ‘jibestream’
venue_id int the venue or organization id
map_id string the jibestream map id
ppm float pixel per meter, same as the map JSON value.
client_id int the client id
client_secret string the client secret
customer_id string the jibestream customer record id
endpoint_url_url string the map contents endpoint host
mmpp float millimeter per pixel

Replace Map Image

This 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)

POST /api/v1/sites/:site_id/maps/:map_id/replace

Request

"json": a JSON string of
{
    // for a 600x400 src image, 400x200 new image
    // this means the new image is positioned at (200, 150) with the same scale, no rotation
    "transform": {
        "x": 200,
        "y": 150,
        "scale": 1.0,
        "rotate": 0
    }
}
"file": a binary file

Parameters

Name Type Description
transform object The name of the map, optional
x float where the (0, 0) of the new image is relative to the original map, default is 0
y float where the (0, 0) of the new image is relative to the original map, default is 0
scale float whether to scale the replacing image, default is 1
rotation int whether to rotate the replacing image, default is 0, in degrees

Bulk Assign APs to a Map

POST /api/v1/sites/:site_id/maps/:map_id/set_map

Usage

This API can be used to assign a list of AP Macs associated with site_id to the specified map_id. Note that map_id must be associated with corresponding site_id. This API obeys the following rules 1. if AP is unassigned to any Map, it gets associated with map_id 2. Any moved APs are returned in the response 3. If the AP is considered a locked AP, no action will be taken

Request Payload

{
    "macs": [
        "5c5b35000001",
        "5c5b35584a6f"
    ]
}

Assigns the devices present in input list of devices to :map_id

Response

{
    "moved": ["5c5b35584a6f"],
    "locked": ["5c5b35000001"]
}

Zone

Zone schema

Zones are areas on a map defined by the admin for different purposes. e.g. different Wlans, occupancies, policies.

Base URI

/api/v1/sites/:site_id/zones

Example

{
    "name": "Board Room",
    "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
    "vertices": [
        { "x":1119, "y":518 },
        { "x":1393, "y":518 },
        { "x":1393, "y":740 },
        { "x":1119, "y":740 }
    ]
}

Parameters

Name Type Description
name string The name of the zone
map_id string map where this zone is defined
vertices list vertices used to define an area. It’s assumed that the last point connects to the first point and forms an closed area
x float x in pixel
y float y in pixel

Virtual Beacons

Virtual beacons appear to consumer of our VBLE Mobile SDK as regular BLE beacons.

Base URI

/api/v1/sites/:site_id/vbeacons

Example

{
    "uuid": "31375aeb-b8d3-1ea6-83bf-a31eb04e1c38",
    "major": 1356,
    "minor": 21,

    "power_mode": "default",
    "message": "Welcome to Mist",

    "url": "http://www.mist.com/any",
    "wayfinding_nodename": "node1",

    "name": "conference room",
    "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
    "x": 53.5,
    "y": 173.1
}

Parameters

Name Type Description
uuid string bluetooth tag UUID
major int bluetooth tag major
minor int bluetooth tag minor
power_mode string default / custom
power int required if power_mode==custom, -30 - 100, in dBm. For default power_mode, power = 4 dBm.
name string name / label of the device
message string a message that can be displayed when the sdkclient gets near the vbeacon
url string URL to show, optional
wayfinding_nodename string the name to be used in wayfinding_path or wayfinding_grid blob
map_id string map where the device belongs to
x float x in pixel
y float y in pixel

RSSI Zone

RSSI Zone schema

RSSI Zone is RSSI-based

Base URI

/api/v1/sites/:site_id/rssizones

Example

{
    "name": "Board Room",
    "devices": [
        {
            "device_id": "00000000-0000-0000-1000-5c5b35bd76bb",
            "rssi": -80
        }
    ]
}

Parameters

Name Type Description
name string The name of the zone
devices list List of devices and the respective RSSI values to be considered in the zone
rssi int RSSI threshold

Beacons

Beacons represents a physical 3rd-party beacon. The customer will need to tell us the properties of this BLE beacon. So we can use it in our locationing.

Base URI

/api/v1/sites/:site_id/beacons

Example

{
    // for iBeacon
    "type": "ibeacon",
    "ibeacon_uuid": "31375aeb-b8d3-1ea6-83bf-a31eb04e1c38",
    "ibeacon_major": 1356,
    "ibeacon_minor": 21,

    // for Eddystone using UID
    "type": "eddystone-uid",
    "eddystone_namespace": "2818e3868dec25629ede",
    "eddystone_instance": "5c5b35000001",

    // for Eddystone using URL
    "type": "eddystone-url",
    "eddystone_url": "https://www.abc.com",

    "power": 4,

    "name": "conference room",
    "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
    "x": 53.5,
    "y": 173.1,

    "mac": "c4887201b5a8",
}

Parameters

Name Type Description
type string default is eddystone-uid
ibeacon_uuid string bluetooth tag UUID
ibeacon_major int bluetooth tag major
ibeacon_minor int bluetooth tag minor
eddystone_namespace string Eddystone-UID namespace (10 bytes) in hexstring format
eddystone_instance string Eddystone-UID instance (6 bytes) in hexstring format
eddystone_url string Eddystone-URL url
power int in dBm, default is -12
name string name / label of the device
map_id string map where the device belongs to
x float x in pixel
y float y in pixel
mac string optiona, MAC of the beacon, currently used only to identify battery voltage

Get Beacon Stats

GET /api/v1/sites/:site_id/stats/beacons

Response

[
    {
        "mac": "c4887201b5a8",
        "name": "conference room",
        "type": "eddystone-uid",
        "eddystone_namespace": "2818e3868dec25629ede",
        "eddystone_instance": "5c5b35000001",
        "power": 4,
        "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
        "x": 53.5,
        "y": 173.1,

        "battery_voltage": 3370,
        "last_seen": 1492110810
    }
]
Name Type Description
battery_voltage int battery voltage, in mV

Asset Filters

Base URI

/api/v1/sites/:site_id/assetfilters

Example

{
    // required
    "name": "Visitor Tags",
    "disabled": false,

    // must contain at-least one of the following filter properties
    "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
    "ibeacon_major": 13,
    "eddystone_uid_namespace": "2818e3868dec25629ede",
    "eddystone_url": "https://www.abc.com",
    "mfg_company_id": 935,
    "service_uuid": "0000fe6a-0000-1000-8000-0030459b3cfb"
}

Parameters

Name Type Description
name string asset filter name
disabled boolean optional; whether the asset filter is disabled, default is false
ibeacon_uuid string optional; ibeacon uuid used to filter assets
ibeacon_major int optional; ibeacon major value used to filter assets
eddystone_uid_namespace string optional; eddystone uid namespace used to filter assets
eddystone_url string optional; eddystone url used to filter assets
mfg_company_id int optional; ble manufacturing-specific company-id used to filter assets
service_uuid string optional; ble service data uuid used to filter assets

Get Asset Filters

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 ‘AND’ of each filter property). For example, the “Visitor Tags” filter below will match an asset when both the “ibeacon_uuid” and “ibeacon_major” properties match the asset. All non-matching assets are ignored.

GET /api/v1/sites/:site_id/assetfilters

Response

[
    {
        // Filter #1: each filter can contain any subset of filter properties
        "name": "Visitor Tags",
        "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
        "ibeacon_major": 13
    },
    {
        // Filter #2: each filter can contain any subset of filter properties
        "name": "Company Tags",
        "eddystone_uid_namespace": "2818e3868dec25629ede",
        "eddystone_url": "https://www.abc.com",
        "mfg_company_id": 935
    }
]

Get Single Asset Filter

Gets a single asset filter by id.

GET /api/v1/sites/:site_id/assetfilters/:filter_id

Create Asset Filter

Creates 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 ‘AND’).

POST /api/v1/sites/:site_id/assetfilters

Request

{
    "name": "Visitor Tags",
    "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
    "ibeacon_major": 13,
    "eddystone_uid_namespace": "2818e3868dec25629ede",
    "eddystone_url": "https://www.abc.com",
    "mfg_company_id": 935,
    "service_uuid": "0000fe6a-0000-1000-8000-0030459b3cfb"
    "disabled": False,
}

Parameters

Name Type Description
name string name of Asset Filter
ibeacon_uuid string ibeacon_uuid
ibeacon_major int ibeacon_major
eddystone_uid_namespace string eddystone_uid_namespace
eddystone_uid_namespace string eddystone_uid_namespace
mfg_company_id int mfg_company_id
service_uuid string service_uuid
disabled bool whether to disable Asset Filter

Response

Status: 200 OK
Status: 400 At least one filter must be specified

Update Asset Filter

Updates an existing BLE asset filter for the given site.

PUT /api/v1/sites/:site_id/assetfilters/:filter_id

Delete Asset Filter

Deletes an existing BLE asset filter for the given site.

DELETE /api/v1/sites/:site_id/assetfilters/:filter_id

Assets

Base URI

/api/v1/sites/:site_id/assets

Example

{
    "name": "Expensive Instrument",
    "mac": "a31eb04e1c38"
}

Parameters

Name Type Description
name string name / label of the device
mac string bluetooth MAC

Import assets

API will replace the assets with same mac if provided upsert=True, otherwise will report in errors in response.

POST /api/v1/sites/:sites_id/assets/import?upsert=True

Upload via CSV file

A multi-part POST

"file": CSV File

CSV File Format

name,mac
"asset_name",5c5b53010101

Upload via JSON Payload

[
    {
        "name": "Expensive Instrument",
        "mac": "a31eb04e1c38"
    },
    {
        "name": "Cheap Instrument",
        "mac": "a31eb04e1c37"
    }
]

Get Asset Stats

GET /api/v1/sites/:site_id/stats/assets

Response

[
    {
        "name": "Expensive Instrument",

        "mac": "a31eb04e1c38",

        // populated automatically
        "last_seen": 1492110810,
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "x": 60,
        "y": 80,

        "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
        "ibeacon_major": 13,
        "ibeacon_minor": 138,
        "eddystone_uid_namespace": "2818e3868dec25629ede",
        "eddystone_uid_instance": "5c5b35000001",
        "eddystone_url_url": "https://www.abc.com",

        "battery_voltage": 3370
    }
]

Parameters

Name Type Description
name string name / label of the device
mac string bluetooth MAC
last_seen int last seen timestamp
map_id string map where the device belongs to
x float x in pixel
y float y in pixel
battery_voltage int battery voltage, in mV

Get Detail Asset Stats

GET /api/v1/sites/:site_id/stats/assets/:asset_id

Response

{
    "name": "Expensive Instrument",

    "mac": "a31eb04e1c38",

    // populated automatically
    "last_seen": 1492110810,
    "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
    "x": 60,
    "y": 80
    "battery_voltage": 3370

    // only send this for individual asset stat
    "zones": [
        {
            "id": "8ac84899-32db-6327-334c-9b6d58544cfe",
            "since": 1428939600
        }
    ],
    "rssizones": [
        {
            "id": "b2af5d7b-c3d0-c5c9-57e9-4d740871db47",
            "since": 1428939600
        }
    ]
}

Get BLE Assets of interest

Get a list of BLE beacons that matches Asset or AssetFilter

GET /api/v1/sites/:site_id/stats/filtered_assets?duration=1d

Response

[
    {
        "mac": "5c5b350eaaaa",
        "curr_site": "67970e46-4e12-11e6-9188-0242ac11aaaa",
        "device_name": "",
        "manufacture": "Mist Systems",
        "id": "3c0c8abc-aaaa-4070-9dd0-b9a18e7ec6fa",
        "name": "asset4",
        "by": "asset",
        "last_seen": 1643837316.760462,
        "map_id": "f5d26c7f-1670-4921-a79d-09f887f4aaaa",
        "_checkpoint_preparer": 1635888509,
        "_checkpoint_scan": 1636148467,
        "_checkpoint_prep": 1636148467,
        "_timestamp": 1643837316,
        "_ttl": 86349,
        "_id": "5c5b350eaaaa",
        "ap_mac": "5c5bbbbeaaaa",
        "beam": 6,
        "rssi": -30
    }
]

Get Discovered BLE Assets

Get a list of Discovered Assets that doesn’t match any of the Asset / Assetfilters

GET /api/v1/sites/:site_id/stats/discovered_assets

Get Discovered BLE Assets by Map

Get a list of BLE beacons that we discovered (whether they’re defined as assets or not)

GET /api/v1/sites/:site_id/stats/maps/:map_id/discovered_assets

Response

[
    {
        "mac": "6fa474be7ae5",
        "device_name": "[TV] UN65JU670D",
        "x": 60,
        "y": 80,
        "manufacture": "Apple",
        "last_seen": 1428939600,

        // optionally populated
        "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
        "ibeacon_major": 13,
        "ibeacon_minor": 138,
        "eddystone_uid_namespace": "2818e3868dec25629ede",
        "eddystone_uid_instance": "5c5b35000001",
        "eddystone_url_url": "https://www.abc.com",
        "mfg_company_id": 935,
        "mfg_data": "648520a1020000",
        "duration": 120

    }
]

Definitions

Name Type Description
mac string mac address of the (unconnected) client
map_id string map_id of the sdk client (if known), or null
x int x (in pixels) of user location on the map (if known)
y int y (in pixels) of user location on the map (if known)
manufacture string device manufacture, through fingerprinting or OUI
ibeacon_uuid string bluetooth tag UUID
ibeacon_major int bluetooth tag major
ibeacon_minor int bluetooth tag minor
eddystone_namespace string Eddystone-UID namespace (10 bytes) in hexstring format
eddystone_instance string Eddystone-UID instance (6 bytes) in hexstring format
eddystone_url string Eddystone-URL url
last_seen long last seen timestamp
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
duration int optional (60-86400; default=60); time duration TTL filter (secs) for each returned asset
GET /api/v1/sites/:site_id/stats/assets/search
GET /api/v1/sites/:site_id/stats/assets/search?mac='fbc721cc3022'

Parameters

Name Type In Description
site_id string path UUID of the site
query string mac,map_id,ibeacon_uuid,ibeacon_major,ibeacon_minor, eddystone_uid_namespace, eddystone_uid_instance, eddystone_url, by, name, device_name, ap_mac,beam,rssi

Response

{
    "results": [
        {
            "battery_voltage": "283",
            "eddystone_uid_namespace": "f7826da6bc5b71e0893e",
            "last_seen": 1633971808,
            "eddystone_uid_instance": "424c43527039",
            "eddystone_url": "eddystone_url",
            "mac": "fbc721cc3022",
            "manufacture": "Unknown",
            "timestamp": 1633971808667,
            "map_id": "map_id",
            "org_id": "org_id",
            "by": "assetfilter",
            "site_id": "site_id",
            "name": "name",
            "temperature": "0.0",
            "ap_mac": "fbc721ccaaaa",
            "rssi": -30,
            "beam": "7"
        },
    ],
    "start": 1633367108.3799882,
    "end": 1633971908.3799632,
    "limit": 100,
    "total": 1
}

Count Asset by distinct field

GET /api/v1/sites/:site_id/stats/assets/count     
GET /api/v1/sites/:site_id/stats/assets/count?distinct=ibeacon_uuid

Parameters

Name Type In Description
site_id string path UUID of the site
distinct string mac,map_id,ibeacon_uuid,ibeacon_major,ibeacon_minor, eddystone_uid_namespace, eddystone_uid_instance, eddystone_url, by, name, device_name, default is site_id

Response

{
    "results": [
        {
            "site_id": "site_id",
            "count": 19
        }
    ],
    "start": 1633368208.7445683,
    "end": 1633973008.7445416,
    "limit": 100,
    "distinct": "site_id",
    "total": 1,
}

Subscribe to Discovered BLE Assets Stream

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/maps/:map_id/discovered_assets"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/stats/maps/63eda950-c6da-11e4-a628-60f81dd250cc/discovered_assets",
    "data": {
         "mac": "4a0222000e31",
         "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
         "x": 51.0,
         "y": 29.0,
         "manufacture": "Unknown",
         "last_seen": 1480716946
    }
}

Subscribe to BLE Assets Stream

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/maps/:map_id/assets"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/stats/maps/63eda950-c6da-11e4-a628-60f81dd250cc/assets",
    "data": {
         "mac": "4a0222000e31",
         "x": 51.0,
         "y": 29.0,
         "last_seen": 1480716946
    }
}

## Subscribe to MxEdges Stream

 WS /api-ws/v1/stream

### Request

{ "subscribe": "/sites/:site_id/mxedges" }

### Response

{ "event": "data", "channel": "/sites/67970e46-4e12-11e6-9188-0242ac110007/mxedges", "data": { "device_id": "00000000-0000-0000-1000-5c5b3524500b", "event_type": "fwupdate", "detail": { "timestamp": 1485381027, "status": "inprogress", "progress": 45 } } }

### Definition

Name Type Description
device_id string device_id of the device corresponding to the event
event_type string type of the event that occurred. currently, on device updates are reported on the stream.
detail object detail will be specific to the event_type.

Subscribe to streaming PCAP

WS /api-ws/v1/stream

Request

{
    {subscribe: "/sites/:site_id/pcaps"}
}

Response (Wireless/RadioTap)

{
    "event": "data"
    "channel": "/sites/:site_id/pcaps"
    "data": {
         "capture_id": "6b1be4fb-b239-44d9-9d3b-cb1ff3af1721"
         "pcap_dict": {
             "channel_frequency": 2412,
             "channel": "1",
             "datarate": "1.0 Mbps",
             "rssi": -75, 
             "dst": "78:bd:bc:ca:0b:0a",
             "src": "18:b8:1f:4c:91:c0",
             "bssid": "18:b8:1f:4c:91:c0",
             "frame_type": "Management", 
             "frame_subtype": "Probe Response",
             "proto": "802.11", 
             "ap_mac": "d4:20:b0:81:99:2e", 
             "direction": "tx", 
             "timestamp": 1652246543, 
             "length": 416.0,
             "interface": "radiotap",
             "info": "1652246544.467733 1683216786us tsft 1.0 Mb/s 2412 MHz 11g -75dBm signal -82dBm noise antenna 0 Probe Response (ATTKmsWiVS) [1.0* 
                      2.0* 5.5* 11.0* 18.0 24.0 36.0 54.0 Mbit] CH: 2, PRIVACY\\n",
         }, 
        "pcap_raw":         "1MOyoQIABAAAAAAAAAAAAP//AAABAAAAEEh7Yh5VBwCgAQAAoAEAAAAAKwBvCADAAQAAAIw7reCS2VNkAAAAABACbAmABLWuAAEAEBgAAwACAABQADoBeL28ygsKGLgfTJHAGLgfTJHAcIZ2WDlBJQAAAGQAERUACkFUVEttc1dpVlMBCIKEi5YkMEhsAwECBwZVUyABCx4gAQAjAhkAKgEEMgQMEhhgMBQBAAAPrAQBAAAPrAQBAAAPrAIMAAsFAQAbAABGBTIIAQAALRqtCR////8AAAAAAAAAAAAAAAAAAAAAAAAAAD0WAggVAAAAAAAAAAAAAAAAAAAAAAAAAH8IBAAIAAAAAEDdkwBQ8gQQSgABEBBEAAECEDsAAQMQRwAQn2481frn3KT+uGod2ERx+RAhAAtBcnJpcywgSW5jLhAjAApCR1cyMTAtNzAwECQACkJHVzIxMC03MDAQQgAKQkdXMjEwLTcwMBBUAAgABgBQ8gQAARARAA5BcnJpcyBXaXJlbGVzcxAIAAIgCBA8AAEBEEkABgA3KgABIN0JABAYAgEQHAAA3RgAUPICAQGEAAOkAAAnpAAAQkNeAGIyLwAzjakr\"

}

Response (Wired)

{
    "event": "data"
    "channel": "/sites/67970e46-4e12-11e6-9188-0242ac110007/pcaps"
    "data": {
        "capture_id": "f039b1b4-a23e-48b2-906a-0da40524de73", 
        "pcap_dict": {
             "dst_mac": "68:ec:c5:09:2e:87",
             "src_mac": "8c:3b:ad:e0:47:40", 
             "vlan": 1, 
             "src_ip": "34.224.147.117", 
             "dst_ip": "192.168.1.55",
             "dst_port": 51635, 
             "src_port": 443,
             "proto": "TCP", 
             "ap_mac": "d4:20:b0:81:99:2e",
             "direction": "tx", 
             "timestamp": 1652247615, 
             "length": 159.0, 
             "interface": "wired",
             "info": "1652247616.007409 IP ec2-34-224-147-117.compute-1.amazonaws.com.https > ip-192-168-1-55.ec2.internal.51635: Flags [P.], seq 
                      2192123968:2192124057, ack 4035166782, win 12, options [nop,nop,TS val 597467050 ecr 740580660], length 89\\n",
             }, 
        "pcap_raw": "1MOyoQIABAAAAAAAAAAAAP//AAABAAAAQEx7YhMzAACfAAAAnwAAAGjsxQkuh4w7reBHQIEAAAEIAEUAAI1bLEAAKAZ/CiLgk3XAqAE3AbvJs4KpKEDwg8I+gBgADFf9AAABAQgKI5yfqiwkXTQXAwMAVKY5JopoKQrVEn0/3ld4YntctGEH/rTZuwtCvzSncFw71QJveJi9uxHs57KC8w9Apph3YvXJrmWg7M37+o+YV0KH/xmr626s5Bkhb3QhKOu+NoNEmA==\"

    }
}

Stop Response (Wired/Wireless)

{
    "event": "data"
    "channel": "/sites/67970e46-4e12-11e6-9188-0242ac110007/pcaps"
    "data": {
      "capture_id": "a2f7374d-6a70-41fd-8a3f-71e42573baaf", 
      "pcap_dict": null
    }
}

Definitions

Name Type Description
event string what type of event is received.
channel string from which channel the data is received
capture_id (common) string Capture id for the current PCAP.
tcpdump (common) string PCAP content recieved after running tcpdump. (can be deprecated as it no longer used by UI)
pcap_dict (common) json contains json data for PCAP content. If null capture has been stopped.
dst_mac string destination mac address
src_mac string source mac address
vlan int vlan id
src_ip string source ip address
dst_ip string destination ip address
dst_port string destination port
src_port string source port
proto (common) string Application / Transport layer protocol associated with the packet
ap_mac string Packet belongs to which AP
mac string Packet belongs to which device (gateway, switch)
mxedge_id string Packet belongs to which Mist Edge
direction (common) string tx/rx based on device
timestamp (common) float precision upto milliseconds. i.e (1652247616.740)
length (common) int length of the packet
lost_messages (common) int number of messages lost before sending this packets
channel_frequency (Radiotap) int radio band used for sending the packet
channel (Radiotap) string an int value representing the channel
datarate (Radiotap) string internet speed , represented in Mbps
rssi (Radiotap) int rssi value can range from 0 - 255.
dst (Radiotap) string destination mac address (Can change to dst_mac)
src (Radiotap) string source mac address (Can change to src_mac)
bssid (Radiotap) string it’s the MAC physical address of the access point
frame_type (Radiotap) string will represent packet belongs to which frame, possible values are management, control, and data.
frame_subtype (Radiotap) string will represent packet belongs to which subtype, multiple values are possible.
info (common) string PCAP content recieved after running tcpdump.
interface (common) string Used to identify whether packet belongs to wired or radiotap. or anyother interface.

PSK

Base URI

/api/v1/sites/:site_id/psks

Add PSK

Add psk on the site. Required: ssid, passphrase.

POST /api/v1/sites/:site_id/psks

Get PSK

Get list of psks on the site. If provided, name or ssid or role query param, psks with exact name/ssid/role match will be returned.

GET /api/v1/sites/:site_id/psks?name=Common

Example

{
    "name": "Common",
    "passphrase": "foryoureyesonly",
    "ssid": "warehouse",
    "usage": "single",
    "vlan_id": 417,            // optional
    "mac": "5684dae9ac8b",     // optional
    "expire_time": 1614990263  // optional, epoch time in seconds, default is null, as no expiration  
    "notes": "notes"           // optional
    "notify_expiry": true      // optional
    "expiry_notification_time": 2      // optional, unit days
    "notify_on_create_or_edit": true   // optional
    "email": "admin@test.com"  // email to send psk expiring notifications to
}

Definitions

Name Type Description
name string a name for the PSK
passphrase string passphrase of the PSK (8-63 character or 64 in hex)
ssid string SSID this PSK should be applicable to
usage string multi (default) / single
vlan_id int VLAN for this PSK key
mac string if usage==single, the mac that this PSK ties to, empty if auto-binding
expire_time int default is half year, max is 5 year
notes string notes
notify_expiry boolean If set to true, reminder notification will be sent when psk is about to expire
expiry_notification_time int Number of days before psk is expired. Used as to when to start sending reminder notification when the psk is about to expire
notify_on_create_or_edit boolean If set to true, notification will be sent when psk is created or edited
email string Email to send psk expiring notifications to

Delete PSK

Delete psks on site. If provided, name or ssid param, psks with exact name/ssid match will be deleted.

DELETE /api/v1/sites/:site_id/psks?ssid=warehouse

Update multi PSKs

PUT /api/v1/sites/:site_id/psks

Example

[
    {
         "id": "2f64a022-9422-4fa3-92aa-ff6559a9f7f9", //psk_id, required
         "name": "common123",
    },
    {
        "id": "110c59ae-d7b2-40f9-9bf2-82367370e55a", //psk_id, required
        "usage": "single",
        "name": "common12",
        "passphrase": "foryoureyesonly1",
        "role": "teacher",
    }
]

Device

Devices are things we manufacture. They are traceable to a manufactured entry. They will be added into inventory and they will need to be assigned to a site in order to be functional.

Get Site Devices

Get list of devices on the site.

GET /api/v1/sites/:site_id/devices?name=ap-001

Request

Name Type Description
name string optional, device name
type string ap, switch, gateway, all, default is ap
[
    {
        "model": "AP41",
        "hw_rev": "0",
        "map_id": "01b04bbe-9687-11e8-a5a9-346895ed1b7d",
        "orientation": 0,
        "org_id": "476057fe-cebb-4be9-9c15-caf1f09d95e0",
        "site_id": "eaa6b2b7-88cd-41ea-8150-9b46b6779235",
        "mac": "5c5b350e0001",
        "modified_time": 1533206823,
        "created_time": 1533196761,
        "tag_id": 107,
        "tag_uuid": "9c557d6a-8a5e-11e6-b1db-0242ac110004",
        "serial": "1002710010001",
        "type": "ap",
        "id": "00000000-0000-0000-1000-5c5b350e0001",
        "name": "ap-001"
    }
]

Device Config

PUT /api/v1/sites/:site_id/devices/:device_id

Request Example

{
    "name": "conference room",
    "notes": "slightly off center",
    "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
    "x": 53.5,
    "y": 173.1,
    "orientation": 45,
    "height": 3,
    "locked": false,
    "radio_config": {
        "band_24": {
            "disabled": false,

            "channel": 0,
            "bandwidth": 20,
            "power": 1,
            "antenna_mode": "1x1",
            "allow_rrm_disable": false,
        },
        "band_5": {
            "disabled": false,
            "channel": 0,
            "bandwidth": 40,
            "power": 0,
            "antenna_mode": "default"
        },
        "band_6": {
            "disabled": false,
            "channel": 0,
            "bandwidth": 40,
            "power": 0,
            "antenna_mode": "default"
        },
        "ant_gain_24": 4,       // for models with external antenna
        "ant_gain_5": 5,        // for models with external antenna
        "ant_gain_6": 5,        // for models with external antenna

        // for some AP models (e.g. AP43), 2.4G radio can operation in 5G band
        "band_24_usage": "5",  // 24 (default) / auto
        // if band_24_usage == "5", by default, band_5 properties is used, if specific channel/bandwidth/power/...
        // is desired, use the following
        "band_5_on_24_radio": {
            "disabled": false,
            "channel": 0,
            "bandwidth": 40,
            "power": 0,
            "antenna_mode": "default"
        },

        // to make an outdoor operate indoor, default is false
        // for an outdoor-ap, some channels are disallowed by default, this allows the user
        // to use it as an indoor-ap
        "indoor_use": false,

        // to switch antenna mode, for models with switchable antennas
        "ant_mode": "external",  // external / internal

        "scanning_enabled": true
    },
    "ip_config": {
        "type": "static",
        "ip": "10.2.1.1",
        "netmask": "255.255.255.0",
        "gateway": "10.2.1.254",

        "type6": "static",
        "ip6": "2607:f8b0:4005:808::2004",
        "netmask6": "/32",
        "gateway6": "2607:f8b0:4005:808::1",

        "dns": [ "8.8.8.8", "4.4.4.4" ],
        "dns_suffix": [ ".mist.local", ".mist.com" ],
        "vlan_id": 1,
        "mtu": 0
    },
    "ble_config": {
        "power_mode": "custom",
        "power": 10,
        "beacon_enabled": true,
        "beacon_rate_mode": "custom",
        "beacon_rate": 3,
        "beam_disabled": [ 1, 3, 6 ],

        // ibeacon
        "ibeacon_enabled": true,
        "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
        "ibeacon_major": 13,
        "ibeacon_minor": 138,
        "ibeacon_adv_power": -65,
        "ibeacon_beams": "2-4,7",  // or 'default' to auto-set

        "eddystone_uid_enabled": false,
        "eddystone_uid_namespace": "2818e3868dec25629ede",
        "eddystone_uid_instance": "5c5b35000001",
        "eddystone_uid_freq_msec": 200,
        "eddystone_uid_adv_power": -65,
        "eddystone_uid_beams": "2-4,7",  // or 'default' to auto-set

        "eddystone_url_enabled": false,
        "eddystone_url_url": "https://www.abc.com",
        "eddystone_url_freq_msec": 1000,
        "eddystone_url_adv_power": -65,
        "eddystone_url_beams": "2-4,7",  // or 'default' to auto-set

        // custom packet
        "custom_ble_packet_enabled": true,
        "custom_ble_packet_freq_msec": 300,
        "custom_ble_packet_frame": "0x........"
    },
    "usb_config": {
        "enabled": true,

        // imagotag
        "type": "imagotag",
        "host": "1.1.1.1",
        "channel": 3,
        "port": 0,
        "verify_cert": false,
        "cacert": ""

        // Solum or Hanshow
        "type": "solum", // or "hanshow"
        "vlan_id": 1, // default is 1
    },
    "esl_config": {
        "enabled": true,

        // usb_config is ignored if esl_config enabled
        "type": "imagotag",  // imagotag / hanshow / solum / native

        // imagotag, native: AP imagotage native solution
        // note: ble_config will be ingored if esl_config is enabled and with native mode. 
        "type": "imagotag", // or "native"
        "host": "1.1.1.1",
        "channel": 3,
        "port": 0,
        "verify_cert": false,
        "cacert": ""

        // Solum or Hanshow
        "type": "solum", // or "hanshow"
        "vlan_id": 1, // default is 1
    }
    "aeroscout": {
        "enabled": true,
        "host": "aero.pvt.net",
        "locate_connected": true
    },
    "centrak": {
        "enabled": true,
    },
    "airista: {
        "enabled": true,
        "host": "10.10.10.41",
        "port": 1144
    }
    "led": {
        "enabled": true,
        "brightness": 255
    },
    "mesh": {
        "enabled": true,
        "role": "base",  // base / relay
        "group": 0,
        "bands": ["5", "6"]  // default is ["5"], for relay, the first viable one will be picked
    },

    "client_bridge": {
        // when acted as client bridge
        // - only 5G radio can be used
        // - will not serve as AP on any radios        
        "enabled": true,
        "ssid": "Uplink-SSID",
        "auth": {
            "type": "psk",  // psk (default) / open            
            "psk": "foryoureyesonly",
            // - wpa2-ccmp is assumed when `psk` is choosed
        }
    },

    "uplink_port_config": {
        // whether to do 802.1x against uplink switch
        // when enaled, AP cert will be used to do EAP-TLS
        // and the Org's CA Cert has to be provisioned at the switch
        "dot1x": false,
        "keep_wlans_up_if_down": false  // by default, WLANs are disabled when uplink is down. In some scenario, like SiteSurvey, one would want the AP to keep sending beacons.
    },

    "port_config": {
        // eth0 is not allowed here
        // if spcified, this takes predecence over switch_config (switch_config requires user to configure all vlans manually, which is error-prone. thus deprecated)
        "eth1,eth2": {
            "forwarding": "all",  // all (vlans as eth0) / limited / wxtunnel / mxtunnel / site_mxedge 

            // if forwrding == limited
            "vlan_ids": [1, 10, 50],
            "port_vlan_id": 1,

            // if forwarding == wxtunnel, the port is bridged to the vlan of the session
            "wxtunnel_id": "7dae216d-7c98-a51b-e068-dd7d477b7216",
            "wxtunnel_remote_id": "wifiguest",

            // if forwarding == mxtunnel, vlan_ids comes from mxtunnel
            "mxtunnel_id": "08cd7499-5841-51c8-e663-fb16b6f3b45e",
            // optional to specify the vlan id for a tunnel if forwarding is for wxtunnel, mxtunnel and site_mxedge.
            // if vlan_id is not specified then it will use first one in vlan_ids[] of the mxtunnel
            "vlan_id": 9,

            // if forwarding == site_mxedge, vlan_ids comes from site_mxedge (`mxtunnels` under site setting)
            "mxtunnel_name": "default",
            "vlan_id": 9, // optional

            // other common attributes

            // whether to do port auth
            "port_auth": "dot1x",  // none (default)
            "enable_mac_auth": true,
            "mac_auth_protocol": "eap-md5",
            "mac_auth_preferred": false,  // when enable_mac_auth=true, we'll do dot1x then mac_auth. enable this to prefer mac_auth

            // whether simply disabled
            "disabled": false,

            // site setting will be used unless overwriten here
            "radius_config": {
                // if per-device overwrite is desired. see site setting for schema
            },
            // or radsec can be used
            "radsec": {
                // see WLAN radsec config for schema
            },
            "mist_nac": {
                "enabled": true,
            },

            // optional dynamic vlan
            "dynamic_vlan": {
                "enabled": true,
                "type": "standard",
                "vlans": {
                    "1-10": null,
                    "user": null,
                },
                "default_vlan_id": 999
            }
        }
    },

    "iot_config": {
        "DO": {
            "enabled": true,
            "value": 1
        },
        // 'DI1', 'DI2' pins can only be configured as inputs with an external pull-up
        "DI1": {
            "name": "motion",
            "enabled": true,
        },
        "A1": {
            "name": "pulled-up analog",
            "enabled": true
        }
    },
    "lacp_config": {
        "enabled": true,
    },
    "disable_eth1": false,
    // disable_eth2 and disable_eth3 are applied for some specific models, e.g. AP12
    "disable_eth2": false,
    "disable_eth3": false,
    "disable_module": false,
    "poe_passthrough": false,

    // for some AP models, flow_control can be enabled to address some switch compatibility issue
    "flow_control": {
        "enabled": true,  // default is false
    }

    "pwr_config": {
        "base": 2000,
        "prefer_usb_over_wifi": false
    },

    "vars": {
        "RADIUS_SECRET": "11s64632d",
        "RADIUS_IP1": "172.31.2.5"
    },

    "ntp_servers": [], // optional

    "deviceprofile_id": "6f4bf402-45f9-2a56-6c8b-7f83d3bc98e9", 

    "image1_url": "https://url/to/image.png"
}

Parameters

Name Type Description
name string name / label of the device
notes string any notes about this AP
map_id string map where the device belongs to
x float x in pixel
y float y in pixel
orientation int orientation, 0-359, in degrees, up is 0, right is 90.
height float height, in meters, optional
locked boolean whether this AP is considered locked (placement / orientation has been vetted)
vars object a dictionary of name->value, the vars can then be used in Wlans. This can overwrite those from Site Vars
* orientation: AP orientation, netural to user’s perspective, LED always points to antenna 1

Radio Configs

Name Type Description
radio_config object radio configs
band_24 object radio config for 2.4G
band_5 object radio config for 5G
band_6 object radio config for 6G
band_24_usage string 24 / 5 / 6 / auto, default is 24
scanning_enabled boolean whether scanning radio is enabled
disabled boolean whether to disable the radio
channel int (primary) channel for the band, 0 means using the Site Setting
power int tx power of the radio, null or 0 means auto, when power_min=power_max=power=0 to indicate power=0
ant_gain_24 int antenna gain for 2.4G - for models with external antenna only
ant_gain_5 int antenna gain for 5G - for models with external antenna only
bandwidth int channel width for the band, 20 / 40 / 80 / 160, 80 is only applicable for band_5 and 160 is only for band_6, ignored if channel is 0
channels list list of channels, null or empty array means auto
antenna_mode string default / 1x1 / 2x2 / 3x3 / 1x4
power_min int when power=0, min tx power to use, HW-specific values will be used if not set
power_max int when power=0, max tx power to use, HW-specific values will be used if not set
preamble string short / long / auto, default is short
usage string for band_24 radio, 24 / 5 / rrm, default is 24

IP Config

Name Type Description
ip_config object ip config
type string static / dhcp (default)
ip string required if type==static
netmask string required if type==static
gateway string required if type==static
dns list required if type==static
dns_suffix list if type==static
vlan_id int management vlan id, default is 1 (untagged)

BLE

Name Type Description
ble_config object BLE config
power_mode string default / custom
power int required if power_mode==custom, 2-7; else use power_mode as default
beacon_enabled boolean whether Mist beacons is enabled, default is true
beacon_rate_mode string default / custom
beacon_rate int required if beacon_rate_mode==custom, 1-10, in number-beacons-per-second
beam_disabled list list of AP BLE location beam numbers (1-8) which should be disabled at the AP and not transmit location information (where beam 1 is oriented at the top the AP, growing counter-clock-wise, with 9 being the omni BLE beam)
ibeacon_enabled boolean can be enabled if beacon_enabled=true, whether to send iBeacon, default is false
ibeacon_uuid string optional, if not specified, the same UUID as the beacon will be used
ibeacon_major int Major number for iBeacon
ibeacon_minor int Minor number for iBeacon
ibeacon_freq_msec int Frequency (msec) of data emmit for iBeacon
ibeacon_adv_power int advertised TX Power, -100 to 20 (dBm), omit this attribute to use default
eddystone_uid_enabled boolean only if beacon_enabled=false, Whether Eddystone-UID beacon is enabled
eddystone_uid_namespace string Eddystone-UID namespace
eddystone_uid_instance string Eddystone-UID instance for the device
eddystone_uid_freq_msec int Frequency (msec) of data emmit by Eddystone-UID beacon
eddystone_uid_adv_power int advertised TX Power, -100 to 20 (dBm), omit this attribute to use default
eddystone_url_enabled boolean only if beacon_enabled=false, Whether Eddystone-URL beacon is enabled
eddystone_url_url string URL pointed by Eddystone-URL beacon
eddystone_url_freq_msec int Frequency (msec) of data emit by Eddystone-UID beacon
eddystone_url_adv_power int advertised TX Power, -100 to 20 (dBm), omit this attribute to use default
custom_ble_packet_enabled boolean can be enabled if beacon_enabled=true, whether to send custom packet, default is false
custom_ble_packet_freq_msec int Frequency (msec) of data emitted by custom ble beacon
custom_ble_packet_frame string The custom frame to be sent out in this beacon. The frame must be a hexstring

USB Config for Imagotag

Name Type Description
usb_config object USB config
enabled boolean whether to enable any usb config
type string usb config type, option: imagotag
channel int channel selection, 0-10, not needed by default, required for manual channel override only
host string required if type==imagotag
port int port, default 0
verify_cert boolean whether to turn on SSL verification
cacert string ca certs

Note: if native imagotag is enabled, BLE will be disabled automatically Note: legacy, new config moved to ESL Config.

USB Config for Solum or Hanshow

Name Type Description
usb_config object USB config
enabled boolean whether to enable any usb config
type string usb config type, option: solum, hanshow
vlan_id int vlan id for type as solum or hanshow, default is 1

ESL Config for Imagotag or Native

Name Type Description
esl_config object ESL config
enabled boolean whether to enable any esl config
type string esl config type, option: imagotag
channel int channel selection, 0-10, not needed by default, required for manual channel override only
host string required if type==imagotag
port int port, default 0
verify_cert boolean whether to turn on SSL verification
cacert string ca certs

Note: if native imagotag is enabled, BLE will be disabled automatically

ESL Config for Solum or Hanshow

Name Type Description
esl_config object ESL config
enabled boolean whether to enable any esl config
type string usb config type, option: solum, hanshow
vlan_id int vlan id for type as solum or hanshow, default is 1

Aeroscout Config

Name Type Description
aeroscout object aeroscout config
enabled boolean whether to enable aeroscout config
host string required if enabled, aeroscout server host
locate_connected boolean whether to enable the feature to allow wireless clients data received and sent to AES server for location calculation

Centrak Config

Name Type Description
centrak object centrak config
enabled boolean whether to enable centrak config

Airista Config

Name Type Description
airista object airista config
enabled boolean whether to enable airista config
host string required if enabled, airista server host
port int required if enabled

LED Config

Name Type Description
led object LED control

Mesh

Name Type Description
mesh object mesh-related
enabled boolean whether mesh is enabled on this AP, default is false
role string base / remote
group int mesh group, base AP(s) will only allow remote AP(s) in the same mesh group to join, 1-9, optional
bands list list of bands that the mesh should apply to. For relay, the first viable one will be picked

Port Configs

Name Type Description
disable_eth1 boolean whether to disable eth1 port, default is false
disable_eth2 boolean whether to disable eth2 port, default is false
disable_eth3 boolean whether to disable eth3 port, default is false
disable_module boolean whether to disable module port, default is false

Power Configs

Name Type Description
poe_passthrough boolean whether to enable power out through module port (for APH) or eth1 (for APL/BT11), default is false
pwr_config object power related configs
base int additional power to request during negotiating with PSE over PoE, in mW, default is 0
prefer_usb_over_wifi boolean whether to enable power out to peripheral, meanwhile will reduce power to wifi (only for AP45 at power mode), default is false
#### Port Config

IoT Configs

Configuration of IoT pins. By default, all the pins are disabled

Name Type Description
iot_config object IoT port configuration
name string optional; descriptive pin name
enabled boolean whether to enable a pin, default is false
value boolean output pin signal level, default 0
pullup string the type of pull-up the pin uses (internal, external, none), default none
DO object Digital Output pin settings, value can be 0 / 1
DI1 object Digital Input-1 pin settings
DI2 object Digital Input-2 pin settings
A1 object Analog Input pin settings
A2 object Analog Input pin settings
A3 object Analog Input pin settings
A4 object Analog Input pin settings
output boolean whether the pin is configured as an output. DO and A1-A4 can be repurposed by changing

Switch Config

{
    "name": "corp-a135",
    "role": "access",  // switch role
    "notes": "slightly off center",

    "ip_config": {
        // the default l3 interface of the switch
        "type": "static",
        "ip": "10.2.1.10",
        "netmask": "255.255.255.0",
        "gateway": "10.2.1.254",

        "dns": [ "8.8.8.8", "4.4.4.4" ],
        "dns_suffix": [ ".mist.local", ".mist.com" ],

        // or the network where this mgmt IP reside, this will be used as default network for
        // outbound-ssh, dns, ntp, dns, tacplus, radius, syslog, snmp
        "network": "default"
    },
    "oob_ip_config": {
        // out-of-band (vme/em0/fxp0) IP config
        // same payload as `ip_config` except dns / dns_suffix / gateway

        // for HA Cluster, node1 can have different IP Config
        "node1": {
            // same payload as `ip_config` except dns / dns_suffix / gateway
        }

        // if supported on the platform. If enabled, DNS will be using this routing-instance, too
        "use_mgmt_vrf": false  // false (default) / true

        // for host-out traffic (NTP/TACPLUS/RADIUS/SYSLOG/SNMP), if alternative source network/ip is desired, 
        "use_mgmt_vrf_for_host_out": false, // false (default), whether to use `mgmt_junos`
    },

    // most of the time, it's better to use `port_usages` and `networks` in Site Setting to achieve better consistency
    // and be able to re-use the same settings across switches
    // entries defined here will "replace" those defined in Site Setting/Network Template
    "networks": {
        "guest": {
            "vlan_id": 300,
            "ospf_passive": true
        }
    },

    "other_ip_configs": {
        // optional, if it's required to have switch's L3 presense on a network/vlan 
        "guest": {
            "type": "static",
            "ip": "10.3.3.1",
            "netmask": "255.255.255.0",  // optional, `subnet` from `network` definition will be used if defined

            // for EVPN, if anycast is desired
            "evpn_anycast": false   // default is false 

            "type6": "static",  // disabled (default) / autoconf / dhcp / static
            "ip6": "fdad:b0bc:f29e::3d16",
            "netmask6": "/64",
            "gateway6": "fdad:b0bc:f29e::1"
        }
    },
    "ntp_servers": [
        "pool.ntp.org",
        "time.google.com"
    ],
    // global dns settings. To keep compatibility, dns settings in ip_config and oob_ip_config
    // will overwrite this setting
    "dns_servers": [ "8.8.8.8", "4.4.4.4" ],
    "dns_suffix": [ ".mist.local", ".mist.com" ],

    "port_config": {
        "ge-0/0/0": {
            "usage": "uplink"

            // if aggregated
            "aggregated": true,
            "ae_idx": 1,                      // optional. Users could force to use the designated AE name
            "ae_disable_lacp": true,          // optional. To disable LCP support for the AE interface
            "description": "to dist-sw-01",   // optional
            "ae_lacp_slow": true,             // optional, by default, fast timeout is used
            // for esilag
            "esilag": true
        },
        "ge-0/0/1": {
            "usage": "default",
            // Enable dynamic usage for this port
            "dynamic_usage": "dynamic"
        },
        "ge-0/0/8-16,ge-1/0/0-47": {
            "usage": "ap"
        },

        "ge-0/0/2-3": {
            "usage": "evpn_uplink'
        },

        "ge-0/0/4": {
            "usage": "inet",
            "port_network": "guest",

            // optional
            // speed, duplex, disable_autoneg, mtu, poe_disabled            
        },

        "ge-0/0/5": {
            "usage": "vlan_tunnel",
            "port_network": "customer1",  // required

            // optional
            // speed, duplex, disable_autoneg, mtu, disabled, poe_disabled, storm_control          
        },

        // this is assumed
        "*": {
            "usage": "default"
        }
    },

    // per-device only, supported attributes:
    // - description
    // - poe_disabled
    // - disabled
    // - speed
    // - duplex
    // - mac_limit
    // - port_network
    "port_config_overwrite": {
        "ge-0/0/9": {
            "disabled": true
        },
    },

    // static routes
    "extra_routes": {
        "it_mgmt": {   // use names from `networks`
            "via": "10.2.1.1",

            // all optional
            "metric": null,  // 0-4294967295
            "preference": 30,  // 0-4294967295
            "next_qualified": {
                "10.3.1.1": {
                    "metric": null,
                    "preference": 40
                },                
            },
            "discard": false,  // this takes precedence
            "no_resolve": false
        },
        "172.16.3.0/24": {
            "via": "10.2.1.1"
        }
    },
    // for ipv6
    "extra_routes6": {
        "2a02:1234:420a:10c9::/64": {
            "via": "2a02:1234:200a::100"
        }
    },

    // aggregate routes
    "aggregate_routes": {
        "172.16.3.0/24": {
            // all optional
            "metric": null,  // 0-4294967295
            "preference": 30,  // 0-4294967295
            "discard": false
        }
    },
    // for ipv6
    "aggregate_routes6": {
        "2a02:1234:420a:10c9::/64": {}
    },

    // used for ospf / bgp / ...
    "router_id": "10.2.1.10",
    // whether to use it for snmp / syslog / tacplus / radius
    "use_router_id_as_source_ip": false,

    "stp_config": {
        "bridge_priority": "40k", // 32k (default), Range [0, 4k, 8k.. 60k] in steps of 4k. Bridge priority applies to both VSTP and RSTP.
    }

    // to enable OSPF on this device
    "ospf_config": {
        "enabled": true,
        "reference_bandwidth": "100M", //Bandwidth for calculating metric defaults (9600..4000000000000), default is 100M
        "areas": {
            "0": {
                "no_summary": false
            }
        },
        // optional, for basic scenario, below can be specified and can be applied 
        // to all networks in all areas if not explicitly specified
        "export_policy": "hello",
        "import_policy": "test"
    },

    "dhcpd_config": {
        "enabled": true,
        "corp": {
            "type": "local",  // default
            "ip_start": "192.168.70.100",
            "ip_end": "192.168.70.200",                
            "gateway": "192.168.70.1",

            // Maximum number of seconds the lease can be held
            "lease_time": 86400, // in seconds, lease time has to be between 3600 [1hr] - 604800 [1 week], default is 86400 [1 day]

            // optional, system one will be used
            "dns_servers": [ "8.8.8.8", "4.4.4.4" ],
            "dns_suffix": [ ".mist.local", ".mist.com" ],

            // fixed binding
            "fixed_bindings": {
                "5684dae9ac8b": {
                    "name": "John",
                    "ip": "192.168.70.35",
                    "ip6": "2607:f8b0:4005:808::2"
                }
            }

            // if using DHCP relay
            "type": "relay",
            "servers": ["11.2.3.4"],

            // if using DHCPv6 server
            "type6": "local" // none (default) / relay / local
            "ip6_start": "2607:f8b0:4005:808::2",
            "ip6_end": "2607:f8b0:4005:808::ff",

            // if using DHCPv6 relay
            "type6": "relay"
            "serversv6": ["2607:f8b0:4005:808::64"]

            // when defined in template, this allows device to override
            "disabled": false
        },
        // it's common for many networks to use the same dhcp relay, comma-separated network names can be used here
        "net1,net2": {
            "type": "relay",
            "servers": ["11.2.3.4"]
        }        
    },

    "dhcp_snooping": {
        "enabled": true,
        "all_networks": false,

        // if all_networks = false
        "networks": [ "corp" ],

        // Enable for dynamic ARP inspection check 
        "enable_arp_spoof_check": true,

        // Enable for check for forging source IP address
        "enable_ip_source_guard": true,
    },

    // to enable VRRP on this device
    "vrrp_config": {
        "enabled": true,
        "groups": {
            "0": {
                // optional
                "priority": 200,
                "preempt": true, // default false, allow preemption (a backup router can preempt a primary router)
            }
        }
    },

    "vrf_config": {
        "enabled": true,  // whether to enable VRF (when supported on the device)
    },

    "acl_tags": {

        "iot": {
            "type": "mac",
            "network": "iot",  // optional, default is any
            "macs": ["010203040506", "abcdef*"],
        },

        "printer": {
            "type": "subnet",
            "network": "lan",  // optional, default is any
            "subnets": ["192.168.1.30/32"]
        },

        "guest": {
            "type": "network",
            "network": "guest"
        },

        "vip_from_filter_id": {
            "type": "radius_group",
            "radius_group": "VIP"
            // optional
            "subnets": ["192.168.1.30/32"],
            "specs": [
                {
                    "protocol": "tcp",  // tcp / udp / icmp / gre / any / ":protocol_number", `protocol_number` is between 1-254, default is `any`
                    "port_range": "80"  // matched dst port, "0" means any, default is "0"
                }                
            ]
        },

        "iot": {
            "type": "port_usage",
            "port_usgae": "iot",
            // optional
            "subnets": ["192.168.1.30/32"],
            "specs": [
                {
                    "protocol": "tcp",  // tcp / udp / icmp / gre / any / ":protocol_number", `protocol_number` is between 1-254, default is `any`
                    "port_range": "80"  // matched dst port, "0" means any, default is "0"
                }                
            ]
        },

        // implicit, cannot override
        "any": {
            // matching anything not identified
            "type": "any"
        },

        "resource": {
            // resource can only be used in `dst_tags`
            "type": "resource",

            "network": "dmz",  // default is any
            "subnets": ["192.168.0.5"],  // default is any
            "ether_types": ["arp"] // arp / ipv6. Default is any. Can only be used under dst tags. 
            "specs": [
                {
                    "protocol": "tcp",  // tcp / udp / icmp / gre / any / ":protocol_number", `protocol_number` is between 1-254, default is `any`
                    "port_range": "80"  // matched dst port, "0" means any, default is "0"
                }                
            ]  // empty means unrestricted, i.e. any
        },

        // GBP tags
        "vip_tagged_by_radius": {
            // from the gbp_tag received from RADIUS
            "type": "dynamic_gbp",
            "gbp_tag": 100,
        },

        "vip_tagged_from_traffic": {
            // applying gbp tag against matching conditions
            "type": "static_gbp",
            "gbp_tag": 100,

            // or matching network (vlan)           
            "network": "employee",
            // or subnet
            "subnets": ["192.168.0.0/16"],
            // or MAC
            "macs": ["010203040506", "abcdef*"]
        },

        "gbp_resource": {
            // can only be used in `dst_tags`
            "type": "gbp_resource",
            "gbp_tag": 100,
            "specs": [
                {
                    "protocol": "tcp",  // tcp / udp / gre / icmp / icmp6
                    "port_range": "80"  // matched dst port, "0" means any
                }                
            ]
        },
    },

    "acl_policies": [
        {
            "name": "guest access",
            "src_tags": ["macs"], 
            "actions": [
                {
                    "dst_tag": "rfc1918", 
                    "action": "deny"
                }, 
                {
                    "dst_tag": "corp", 
                    "action": "allow"
                }
            ]
        },
        {
            "name": "corp"
            "src_tags": ["corp-vip"], 
            "actions": [
                {
                    "dst_tag": "corp", 
                    "action": "allow"
                }, 
                {
                    "dst_tag": "corp-port-ranged", 
                    "action": "deny"
                }
            ]
        }

        // NOTES:
        // 1. for GBP-based policy, all src_tags and dst_tags have to be gbp-based
        // 2. for ACL-based policy, `network` is required in either the source or destination
        //    so that we know where to attach the policy to
    ],

    // EVPN
    see EVPN section

    // optional, most of the times, `radius_config` comes from Site Settings; however, there are occasions where 
    // we may want to try experimental radius servers
    "radius_config": {
        "auth_servers_timeout": 5,
        "auth_servers_retries": 3,
        "auth_servers": [
            {
                "host": "1.2.3.4",
                "port": 1812,
                "secret": "testing123"
            },
            {
                "host": "radius.internal",
                "port": 1812,
                "secret": "testing123"
            }
        ],
        "acct_servers": [
            {
                "host": "1.2.3.4",
                "port": 1812,
                "secret": "testing123"
            }
        ],
        "acct_interim_interval": 0,

        // Enable COA. Default is false. When coa_port is not specified, 3799 is the default value.
        “coa_enabled”: true,
        “coa_port”: 3799,

        // which network the RADIUS server resides, if there's static IP for this network,
        // we'd use it as source-ip
        "network": "default"

        // or specifiy "source_ip" directly
        "source_ip": "192.168.3.5"
    },

    // for an adopted switch, this can be enabled to make it fully-managed by mist
    "managed": false,

    // for a claimed switch, this can disable auto configuration
    "disable_auto_config": false,

    // additional CLI commands to append to the generated config
    // NOTE: no check is done
    "additional_config_cmds": [
        "set snmp community public"
    ],

    "vars": {
        "RADIUS_SECRET": "11s64632d",
        "RADIUS_IP1": "172.31.2.5"
    },
    "deviceprofile_id": "6f4bf402-45f9-2a56-6c8b-7f83d3bc98e9",
    "image1_url": "https://url/to/image.png",

    // port_mirroring
    "port_mirroring": {
        "port_mirror": {
            // at least one of them should be specified
            "ingress_port_ids": [ "ge-0/0/3" ],
            "egress_port_ids": [ "ge-0/0/3" ],
            "ingress_networks": [ "corp" ],

            // exactly one of the output should be provided
            "output_port_id": "ge-0/0/5",
            "output_ip_address": "1.2.3.4"
            "output_network": "analyze",

            // future
            "filter": { ... }
        }
    },

    // IOT ports
    "iot_config": {
        // IN0 and IN1 triggered by input over 5v
        "IN0": {
            "name": "dry contact",
            "enabled": true,
            "alarm_class": "major",  // minor (default) / major
        },
        "IN0": {
            "name": "motion",
            "enabled": true,
            "alarm_class": "major",  // minor (default) / major
        },

        // OUT can only be triggered by either IN0 or IN1
        "OUT": {
            "name": "output",
            "enabled": true,
            "input_src": "IN0",  // IN0 (default) / IN1
            "alarm_class": "minor",  // minor (default) / major
        }

        // for VC
        "1/IN0": {
            "name": "dry contact",
            "enabled": true,
            "alarm_class": "major",  // minor (default) / major
        },
        "1/OUT": {
            "name": "output",
            "enabled": true,
            "input_src": "IN0",  // IN0 (default) / IN1
            "alarm_class": "minor",  // minor (default) / major
        }
    },

}

Switch-specific Parameters

Name Type Description
role string access / aggregation, default is access
ip_config object ip config (for irb)
oob_ip_config object OOB management ip settings (i.e. for vme)
port_config object port configs
ntp_servers list list of NTP servers specific to this device. By default, those in Site Settings will be used
radius_config object per-switch radius_config overwrite, optional
managed bool default is false, for an adopted switch, we don’t overwrite their existing configs automatically
disable_auto_config bool default is false, for a claimed switch, we control the configs by default. This option (disables the behavior)

Switch IP Config

Name Type Description
ip_config object ip config
type string static / dhcp (default)
ip string required if type==static
netmask string required if type==static
gateway string required if type==static
dns list required if type==static
dns_suffix list if type==static
vlan_id int management vlan id, default is 1 (untagged)

Switch DNS Config

Name Type Description
dns_servers list required if type==static
dns_suffix list if type==static

Switch and Gateway OSPF

Name Type Description
router_id string router-id used for OSPF/ BGP, required if ospf_config.enabled=true
ospf_config object OSPF config
enabled boolean whether to rung OSPF on this device
areas object OSPF areas to run on this device and the corresponding per-area-specific configs
no_summary boolean for a stub/nssa area, where to avoid forwarding type-3 LSA to this area
reference_bandwidth string Bandwidth for calculating metric defaults (9600..4000000000000), default is 100M

Extra Routes

Name Type Description
extra_routes object key is the dest
via string next-hop

Get ZTP Password

In the case where soemthing happens during/after ZTP, the root-password is modified (required for ZTP to set up outbound-ssh) but the user-defined password config has not be configured. This API can be used to retrieve the temporary password.

POST /api/v1/sites/:site_id/devices/:device_id/request_ztp_password

Response Example

{
    "root_password": "ef8070ef8f924edb592e1819ed64b31172ab8de9d5cde75d3f46acd9506202ab9b1cbb97e381c5aa11037f17e5ed7b4b609461cd813d944670549d410ef82f2e"
}

Get Config CLI Commands

For 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.

Once 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

GET /api/v1/sites/:site_id/devices/:device_id/config_cmd

Optional parameter

Name Type Description
sort boolean Make output cmds sorted (for better readability) or not. False by default

Response

{
    "cli": [
        "set system hostname corp-a135"
        ...
    ]
}

EVPN

EVPN allows an alternative but more efficient LAN architecture utilizing VxLAN / MP-BGP - separating control plane (MAC / IP Learning) from forwarding plane.

In our implementation, following the steps to deploy EVPN topologies in a Site

1. build the topology

While all the evpn_id / downlink_ips can be specified 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.

Notes:

  1. you can use core / distribution / access to create a CLOS topology
  2. you can also use core / distribution to form a 2-tier EVPN topology where ESI-Lag is configured distribution to connect to access switches
  3. in a small/medium campus, collapsed-core can be used where core switches are the inter-connected to do EVPN

POST /api/v1/sites/:site_id/evpn_topologies

Request

{
    "overwrite": true
    "name": "CC",
    "pod_names": {
        "1": "default",
        "2": "default"
    },
    // evpn topology options
    "evpn_options": {
        "overlay": {
            // optional, these are defaults
            "as": 65000
        },
        "underlay": {
            "as_base": 65001,
            "router_id_prefix": "/24",
            "subnet": "10.255.240.0/20",  // underlay subnet, by default, 10.255.240.0/20, or 'fd31:5700::/64' for ipv6

            // if v6 is desired for underlay
            "use_ipv6": true
        },
        // optional, where virtual-gateway should reside
        "routed_at": "edge",  // edge (default) / core / distribution

        // optional, for ERB or CLOS, you can either use esilag to upstream routers or to also be the virtual-gateway        
        "core_as_border": false,  // when routed != "core", whether to do virtual-gateway at core as well, default is false

        // inband-ztp
        // if the mangement traffic goes inbnd, during installation, only the border/core switches are connected to the Internet
        // to allow initial configuration to be pushed down and leave the downstream access switches stay in the Factory Default state
        // enabling inband-ztp allows upstream switches to use LLDP to assign IP and gives Internet to downstream switches in that state 
        "enable_inband_ztp": true,  // default is false

        // by default, JUNOS uses 00-00-5e-00-01-01 as the virtual-gateway-address's v4-mac and 00-00-5e-00-02-01 for v6-mac
        "per_vlan_vga_v4_mac": false,  // if enabled, 00-00-5e-00-0X-YY will be used (where X=vlan_id/256, YY=vlan_id%256),
        "per_vlan_vga_v6_mac": false,  // if enabled, 00-00-5e-00-1X-YY will be used (where X=vlan_id/256, YY=vlan_id%256),

        // optional, this generates router_id automatically, if specified, `router_id_prefix` is ignored
        "auto_router_id_subnet": "100.100.0.0/24",   // optional
        "auto_router_id_subnet6": "fd31:5700:1::/64",  // subnet for lo0.0 v6 IP, default is 'fd31:5700:1::/64'

        // optional, for dhcp_relay, unique loopback IPs are required for ERB or IPClos where we can set option-82 server-id-overrides
        "auto_loopback_subnet": "100.101.0.0/24",
        "auto_loopback_subnet6": "fd33:ab00:2::/64",

        // optional, for EX9200 only to seggregate virtual-switches
        "vs_instances": {
            "guest": {
                "networks": ["guest"]
            },
            "iot": {
                "networks": ["iot-wifi", "iot-lan"]
            }    
        }
    },
    "switches": [
        {
            "mac": "5c5b35000003",
            "role": "collapsed-core",

            // by default, core switches are assumed to be connecting all pods
            // if you want to limit the pods, you can specify pods
            "pods": [ 1, 2 ]
        },
        {
            "mac": "5c5b35000004",
            "role": "collapsed-core",
        },
        {
            "mac": "5c5b3500000f",
            "role": "esilag-access",

            // optionally, for distribution / access / esilag-access, they can be placed into different pods
            // e.g. for CLOS, to group dist / access switches into pods
            //      for ERB/CRB, to group dist / esilag-access into pods
            "pod": 1  // 1-255 (default is 1)
        }        
    ],
    // common configs for all switches in the topology
    "config": {
        // see switch related in [Site Setting]
    },
    // switch-specific configs
    "switch_configs": {
        "5c5b35000003": {
            // see switch related in [Site Setting]
        },
        ...
    }
}

Response

{
    "id": "9197ec96-4c8d-529f-c595-035895e688b2",
    "name": "CC",
    "pod_names": {
        "1": "default",
        "2": "default"
    },

    "switches": [
        {
            "mac": "5c5b35000003",
            "model": "QFX10002-36Q",
            "role": "collapsed-core",

            // below are generated
            "evpn_id": 1,
            // the links, if not specified in the request, suggested ones will be used
            "uplinks": ["5c5b35000005", "5c5b35000006"],
            "downlinks": ["5c5b35000007", "5c5b35000008"],
            "esilaglinks": ["5c5b3500000f"],
            "site_id": "1916d52a-4a90-11e5-8b45-1258369c38a9",
            "deviceprofile_id": "6a1deab1-96df-4fa2-8455-d5253f943d06",

            // all the required links for this topology
            "suggested_uplinks": ["5c5b35000005", "5c5b35000006"],
            "suggested_downlinks": ["5c5b35000007", "5c5b35000008"],
            "suggested_esilaglinks": ["5c5b3500000f"]
        },
        ...
        {
            "mac": "5c5b3500000f",
            "model": "EX4300-48P",
            "role": "esilag-access",
            "esilaglinks": ["5c5b35000003", "5c5b35000004"]
        }        
    ]    
}

2. update the topology

PUT /api/v1/sites/:site_id/evpn_topologies/:evpn_topology_id

{
    "overwrite": false,

    "switches": [
        // to add a new node to the topology, add it with the desired role
        {
            "mac": "5c5b35000003",
            "role": "collapsed-core"
        },

        // to remove a node from the topology, set the role to 'none'
        {
            "mac": "5c5b35000004",
            "role": "none"
        }        
    ]
    // to add switches to topology

}

Specify the actual physical ports you have used (or plan to use) to inter-connect the switches.

PUT /api/v1/sites/:site_id/devices/:device_id
{
    "port_config": {
        "ge-0/0/10-11": {"usage": "evpn_uplink"},
        "ge-0/0/20-21": {"usage": "evpn_downlink"},
        "ge-0/0/30-31": {"usage": "esilag"},
    }
}

Note: only use one entry for the same evpn_uplink/evpn_downlink as the order is improtant. For example, the above config will configure 5c5b35000003’s ge-0/0/10 to connect to 5c5b35000005.

4. Collapsed Core

In 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.

5. ESI-Lag

If the access switchess does not have EVPN support, you can take advantage of EVPN by setting up ESI-Lag on distribution switches

In the following example, two distribution switches

// on two aggragation switches where both ge-0/0/10's are intended to connect to access#1 and
// ge-0/0/11's to access#2
{     
    "port_config": {
        "ge-0/0/10": {
            "usage": "esilag",
            "ae_idx": 1
        },
        "ge-0/0/11": {
            "usage": "esilag",
            "ae_idx": 2
        },
     }
}

// on two access switches that simply treat do normal port aggregation
{
    "port_config": {
        "ge-0/0/1-2": {
            "usage": "esilag",
            "aggregate": true
        },
     }
}

6. Leaf / Access / Collapsed-Core

For leaf nodes in a EVPN topology, you’d have to configure the IPs for networks that would participate in EVPN. Optionally, VRFs to isolate traffic from one tenant verus another

{
    "other_ip_configs": {
        "guest": {
            "ip": "192.168.70.1"
        },
        "iot-wifi": {
            "ip": "192.168.80.1"
        },
        "iot-lan": {
            "ip": "192.168.81.1"
        },
    },

    // optionally VRF (this can be defined in site settings / network templates)
    "vrf_instances": {
        "guest": {
            "networks": ["guest"]
        },
        "iot": {
            "networks": ["iot-wifi", "iot-lan"]
        }    
    },
    # for the device
    "vrf_config": {
        "enabled": true
    }    
}

7. Other APIs

Get All EVPN Topologies

Get the existing EVPN topology

GET /api/v1/sites/:site_id/evpn_topologies

Get One EVPN Topology Detail

Get the existing EVPN topology

GET /api/v1/sites/:site_id/evpn_topologies/:evpn_topology_id

Delete EVPN Topology

Delete existing EVPN topology

DELETE /api/v1/sites/:site_id/evpn_topologies/:evpn_topology_id

Rebuild EVPN Topology

Rebuild existing EVPN topology

PUT /api/v1/sites/:site_id/evpn_topologies/:evpn_topology_id

Gateway Config (draft)

Gateway comes with a default configuration with WAN + LAN where * WAN port gets IP from DHCP * LAN port(s) has an IP of 192.168.1.1/24 with DHCP Server

This is determined by the missing of port_config for a Gateway where the following are assumed, matching Gateway’s factory-default config

    "port_config": {
        "ge-0/0/0": {  // model-dependent
            "usage": "wan"
        },
        "ge-0/0/1-5": {  // model-dependent
            "usage": "lan",
            "port_network": "default"
        }
    }        

Minimum

To start adding configs, say to use static IP on WAN and change the subnet on LAN side to use 192.168.30.0/24

    "port_config": {
        "ge-0/0/0": {
            "usage": "wan",
            "ip_config": {
                "ip': "63.31.5.7",
                "netmask": "/32",
                "gateway": "63.31.5.254"                
            }
        },
        "ge-0/0/1-5": {
            "usage": "lan",
            "port_network": "default"
        }
    },
    "ip_configs": {
        "default": {
            "type": "static",
            "ip": "192.168.30.1",
            "netmask": "/24"
        }
    },

    // dhcpd_config is assumed to be enabled for `default` network and 

Port-Mirroring

Sample port-mirror config for SRX devices

"port_mirroring": {
    "port_mirror": {
        "run_length": 12,
        "rate": 2,
        "family_type": 'inet',
        "ingress_port_ids": ["ge-0/0/3", "ge-0/0/4"],
        "output_port_id": "ge-0/0/5",
    }
}

Networks

see Networks

networks can be configured directly in Gateway Config directly for smaller deployemnt (e.g. Home, Testing)

Services

see Services

services can also be configured directly in Gateway Config directly for smaller deployemnt (e.g. Home, Testing)

Spec

{
    "name": "corp-a135",

    // gateways use/share `networks` that switches uses 
    "networks": {
        // see Gateway Template
    },

    "port_config": {
        // see Gateway Template
    },

    "ip_configs": {
        "corp": {
            "type": "static",
            "ip": "192.168.10.1"
        }
    },

    "dhcpd_config": {
        "enabled": true,
        "corp": {
            "type": "local",  // local (default) / relay / none
            "ip_start": "192.168.70.100",
            "ip_end": "192.168.70.200",                
            "gateway": "192.168.70.1",

            // optional, system one will be used
            "dns_servers": [ "8.8.8.8", "4.4.4.4" ],
            "dns_suffix": [ ".mist.local", ".mist.com" ],

            // fixed binding
            "fixed_bindings": {
                "5684dae9ac8b": {
                    "name": "John",
                    "ip": "192.168.70.35"
                }
            },

            // server_options
            "options": {
                "80": {
                    "type": "string",  //  string / boolean / ip / hex / int16 / int32 / uint16 / uint32

                    "value": "string",  // string
                    "value": "686578",  // hex
                    "value": "true",    // single boolean
                    "value": "1.1.1.1,2.2.2.2"  // list of ip addresses, comma-separated
                }                
            },
            "vendor_encapsulated": {
                // <enterprise number>:<sub option code> 
                // enterprise number": 25300,  // 1-65535  (https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers)
                // sub option code": 8,  // 1-255, sub-option code
                "25300:8": {
                    "type": "string",  //  string / boolean / ip / hex / int16 / int32 / uint16 / uint32
                    "value": ...  // see above
                }
            },

            //
            // if using DHCP relay
            //
            "type": "relay",
            "servers": ["11.2.3.4"],

            // server_id_override
            //   Default is false.
            //   True means the device, when acts as DHCP relay and forwards DHCP responses from DHCP server to clients, 
            //   should overwrite the Sever Identifier option (i.e. DHCP option 54) in DHCP responses with its own IP address.
            "server_id_override": true
        }
    },

    "extra_routes": {
        "0.0.0.0/0": {
            "via": "10.2.1.1"
        }   
    },

    "oob_ip_config": {
        // fxp0 IP config

        "type": "static",
        "ip": "192.168.50.3",
        "netmask": "255.255.255.0",

        // when there are 2 routing engines, re1 mgmt IP has to be set separately (if desired)
        "re1": {
            // same payload as `ip_config` except dns / dns_suffix / gateway
        },

        // if supported on the platform, whether to place OOB port into it's own RI (mgmt_junos)
        // https://www.juniper.net/documentation/us/en/software/junos/junos-getting-started/topics/topic-map/management-interface-in-non-default-instance.html
        "use_mgmt_vrf": false  // false (default) / true
    },

    "ntp_servers": [
        "pool.ntp.org",
        "time.google.com"
    ],

    // for an adopted gateway/switches, this can be enabled to make it fully-managed by mist
    "managed": false,

    // additional CLI commands to append to the generated config
    // NOTE: no check is done
    "additional_config_cmds": [
        "set snmp community public"
    ],

    "vars": {
        "RADIUS_SECRET": "11s64632d",
        "RADIUS_IP1": "172.31.2.5"
    },
    "deviceprofile_id": "6f4bf402-45f9-2a56-6c8b-7f83d3bc98e9",
    "image1_url": "https://url/to/image.png"
}

Attach Device Image

Attach up to 3 images to a device

POST /api/v1/sites/:site_id/devices/:device_id/image1
POST /api/v1/sites/:site_id/devices/:device_id/image2
POST /api/v1/sites/:site_id/devices/:device_id/image3

Request

A multi-part POST

"file": a binary file

Remove Device Image

Delete background image for Portal

DELETE /api/v1/sites/:site_id/devices/:device_id/image1
DELETE /api/v1/sites/:site_id/devices/:device_id/image2
DELETE /api/v1/sites/:site_id/devices/:device_id/image3

Device Locating - AP

Locate a Device by blinking it’s LED, it’s a persisted state that has to be stopped by calling Stop Locating API

POST /api/v1/sites/:site_id/devices/:device_id/locate

Device Locating - Switch

Locate a Switch by blinking all port LEDs. By default, request is sent to ‘master’ switch and LEDs will keep flashing for 5 minutes. In case of virtual chassis (VC) the desired member mac has to be passed in the request payload. At anypoint, only one VC member can be requested to flash the LED. To stop LED flashing before the duration ends /unlocate API request can be made. If /unlocate API is not called LED will continue to flash on device for the given duration. Default duration is 5 minutes and 120 minutes is the maximum.

POST /api/v1/sites/:site_id/devices/:device_id/locate

Request

{
    "mac": "f01c2d4ff760",  // optional: for virtual chassis, the MAC of the member
    "duration": 5  // minutes (1 - 120, default is 5)
}

Params

Name Type Description
mac string optional: member mac address, default is master mac address
duration int optional: minutes the leds should keep flashing, default - 5 minutes, maximum 120 minutes

Response

Status: 200 OK - locating requested
Status: 400 couldn't find member mac

Device Stop Locating - AP, Switch

Stop Locate a Device

POST /api/v1/sites/:site_id/devices/:device_id/unlocate

Device Restart

Restart / Reboot a device

POST /api/v1/sites/:site_id/devices/:device_id/restart

Request

{
    // optional: for SSR, if node is not present, both nodes are restarted
    // for other devices, node should not be present
    "node": "node0",
    // optional for VC member
    "member": 1
}

Response

Status: 200 OK

Restarting multiple devices

Note that only the devices that are connected will be restarted.

POST /api/v1/sites/:site_id/devices/restart

Request

{
    "device_ids": [
        "00000000-0000-0000-1000-5c5b35584a6f",
        "00000000-0000-0000-1000-5c5b350ea3b3"
    ]
    // optional: for SSR, if node is not present, both nodes are restarted
    // for other devices, node should not be present
    "node": "node0"
}

Response

Status: 200 OK

Device Snapshot

POST /api/v1/sites/:site_id/devices/:device_id/snapshot

Create recovery device snapshot (Available on Junos OS EX2300-, EX3400-, EX4400- devices)

Snapshot Response

Status: 200 OK
Status: 400 - snapshot not supported
Status: 400 - cannot snapshot an offline device

Device Clear Pending Fw Version

POST /api/v1/sites/:site_id/devices/:device_id/clear_pending_version

Clear device pending fw version (Available on Junos OS EX2300-, EX3400-, EX4000-, EX4100-, EX4400- devices)

Response

Status: 200 OK
Status: 400 - clear-pending-fw-version not supported
Status: 400 - cannot clear pending version on an offline device

Clear Pending Fw Version on Multiple Devices

POST /api/v1/sites/:site_id/devices/clear_pending_version

Clear device pending fw version (Available on Junos OS EX2300-, EX3400-, EX4000-, EX4100-, EX4400- devices)

Response

Status: 200 OK
Status: 400 - clear-pending-version not supported
Status: 400 - cannot clear pending version on an offline device

Device Restore Backup Fw Version

POST /api/v1/sites/:site_id/devices/:device_id/restore_backup_version

Restore device backup fw version (Available on Junos OS EX2300-, EX3400-, EX4000-, EX4100-, EX4400- devices)

Response

Status: 200 OK
Status: 400 - restore-backup-fw-version not supported
Status: 400 - cannot restore backup version on an offline device

Restore Backup Fw Version on Multiple Devices

POST /api/v1/sites/:site_id/devices/restore_backup_version

Restore device backup fw version (Available on Junos OS EX2300-, EX3400-, EX4000-, EX4100-, EX4400- devices)

Response

Status: 200 OK
Status: 400 - restore-backup-version not supported
Status: 400 - cannot restore backup version on an offline device

Upload Device support files

Support / Upload device support files

POST /api/v1/sites/:site_id/devices/:device_id/support

Request

{
    "info": "process"
    "node": "node0"
}

Params

Name Type Description
info string optional: full (default), see info param table for list of choices
num_messages_files int optional: number of most recent messages files to upload, default is 1, max is 10
node string optional: for SSR, if node is not present, both nodes support files are uploaded

Info Param

Name Type Description
process string Upload 1 file with output of show system processes extensive
outbound-ssh string Upload 1 file that concatenates all /var/log/outbound-ssh.log* files
messages string Upload 1 to 10 /var/log/messages* files
core-dumps string Upload all core dump files, if any found
full 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, the 5 most recent /var/log/messages* files, and Mist agent logs
var-logs string Upload all non-empty files in the /var/log/ directory

Response

Status: 200 OK - uploading started
Status: 400 Device not online

Device Synthetic Test

POST /api/v1/sites/:site_id/devices/:device_id/synthetic_test

Request

{
    "type": "dns",  // dns / arp / dhcp / curl / radius / speedtest / dhcp6 / lan_connectivity
    "vlan_id": 30,  // required for AP
    "tenant": "lan_network1", // for curl/ lan_connectivity

    // type = dns
    "hostname": "google.com".

    // type = arp
    "ip": "192.168.3.5",

    // type = curl
    "url": "https://www.example.com",
    "timeout": 60, // max_time, default is 60, Range 30-120

    // type = radius
    "username": "user",
    "password": "test123",

    // type = speedtest
    "port_id": "wan0", // required for ssr

    // type = lan_connectivity
    "protocol": "ping", // ping / traceroute / ping+traceroute(default)
    "host": "www.example.com",
    "ping_details": false, // false(default) / true
    "ping_count": 10, // default is 10, max 60
    "ping_size": 56, // default is 56. Range 56-65535
    "traceroute_udp_port": 33434, // SRX only, traceroute udp port (default is 33434),
}

Response

Status: 200 OK - scheduled
Status: 400 Device not online
Status: 400 Device not supported
Status: 400 already in progress

Get Device Synthetic Testing Status

GET /api/v1/sites/:site_id/devices/:device_id/synthetic_test

Response

{
    // TBD extra information populated
    "start_time": 1675718807,
    "device_type": "gateway",
    "type": "speedtest",
    "mac": "5c5b35584a6f",
    "port_id": "ge-0/0/1.100",
    "status": "inprogress"
}

Device Bios Upgrade

POST /api/v1/sites/:site_id/devices/:device_id/upgrade_bios

Upgrade device bios

Request

{
    "version": "CDEN_P_EX1_00.20.01.00"
}

Parameters

Name Type Description
version string specific bios version
reboot boolean Reboot device immediately after upgrade is completed, default is false

Bios Upgrade Response

{
    "timestamp": 1428949501,
    "status": "inprogress",
}

Upgrade Bios Multiple Device

POST /api/v1/sites/:site_id/devices/upgrade_bios

Request

{
    "version": "CDEN_P_EX1_00.15.01.00",
    // filters that can be used, if no filter specified, it means entire site
    "device_ids": [
        "00000000-0000-0000-1000-5c5b35584a6f"
    ],

    "models": [
        "EX4400-48T"   
    ]
}

Parameters

Name Type Description
version string specific bios version
reboot boolean Reboot device immediately after upgrade is completed. default is false
device_ids list list of device id to upgrade bios
models list list of device model to upgrade bios

Device FPGA Upgrade

POST /api/v1/sites/:site_id/devices/:device_id/upgrade_fpga

Upgrade device bios

Request

{
    "version": "REV37"
}

Parameters

Name Type Description
version string specific fpga version

Bios Upgrade Response

{
    "timestamp": 1428949501,
    "status": "inprogress",
}

Upgrade Bios Multiple Device

POST /api/v1/sites/:site_id/devices/upgrade_fpga

Request

{
    "version": "REV37",
    // filters that can be used, if no filter specified, it means entire site
    "device_ids": [
        "00000000-0000-0000-1000-5c5b35584a6f"
    ],

    "models": [
        "EX2300-24MP"   
    ]
}

Parameters

Name Type Description
version string specific fpga version
device_ids list list of device id to upgrade fpga
models list list of device model to upgrade fpga

Device Upgrade

POST /api/v1/sites/:site_id/devices/:device_id/upgrade

Upgrade device firmware

Request

{
    "version": "3.1.5"
}

Parameters

Name Type Description
version string specific version / stable, default is to use the latest
reboot boolean Reboot device immediately after upgrade is completed, default is false (Available on Junos OS devices)
snapshot boolean Perform recovery snapshot after device is rebooted, default is false (Available on Junos OS devices)

Upgrade Response

{
    "timestamp": 1428949501,
    "status": "inprogress",
    "status_id": 5
}

Definition

Name Type Description
timestamp float timestamp
status string starting / inprogress / success / error / scheduled
status_id int the internal status id

Upgrade Multiple Device

Note that this call doesn’t guarantee the devices to be upgraded right away (they may be offline)

POST /api/v1/sites/:site_id/devices/upgrade
Name Type Description
reboot boolean Reboot device immediately after upgrade is completed. default is false (Available on Junos OS devices)
snapshot boolean Perform recovery snapshot after device is rebooted. default is false (Available on Junos OS devices)

Request

{
    "version": "3.1.5",
    "enable_p2p": true,
    "p2p_parallelism": 2, 
    "p2p_cluster_size": 10,

    // filters that can be used, if no filter specified, it means entire site
    "device_ids": [
        "00000000-0000-0000-1000-5c5b35584a6f"
    ],
    "models": [
        "AP41"   
    ],
    "rules": [
        {
            // all AP63's in this site will be selected for upgrade
            "match_model": "AP63"
        },
        {
            // AP43's whose name has the word 'access' from character 2 to 7 will be selected for upgrade
            "match_model": "AP43",
            "match_name[2:8]": "access"
        }
    ],
    "strategy": "canary",
    "canary_phases": [5,25,50,100],
    "max_failures": [1,1,5,5], // will be used if provided, else max_failure_percentage will be used
    "max_failure_percentage": 5
    "start_time": 1624399840,
    "reboot_at": 1624399840,
    "force": True,

    // rrm
    "rrm_node_order": "fringe_to_center",
    "rrm_slow_ramp": true,
    "rrm_max_batch_percentage": 10,
    "rrm_first_batch_percentage": 2,
    "rrm_mesh_upgrade": "parallel"     
}

Parameters

Name Type Description
version string specific version / stable, default is to use the latest
enable_p2p boolean whether to allow local AP-to-AP FW upgrade
p2p_parallelism int number of parallel p2p download batches to create, default is 1
p2p_cluster_size int size to split the devices for p2p, default 10
device_ids array of strings id’s of devices which will be selected for upgrade
models array of strings models which will be selected for upgrade
rules array of objects rules used to identify devices which will be selected for upgrade. Device will be selected as long as it satisfies any one rule
strategy string big_bang(upgrade all at once), serial(one at a time), canary or rrm, default is big_bang
canary_phases array of ints phases for canary deployment. Each phase represents percentage of devices that need to be upgraded in that phase. default is [1, 10, 50, 100]
max_failures array of ints number of failures allowed within each phase. Only applicable for canary. Array length should be same as canary_phases. Will be used if provided, else max_failure_percentage will be used
max_failure_percentage int percentage of failures allowed across the entire upgrade(not applicable for big_bang), default is 5
rrm_node_order string fringe_to_center or center_to_fringe (default fringe_to_center). Used in rrm to determine whether to start upgrade from fringe or center AP’s
rrm_slow_ramp boolean true will make rrm batch sizes slowly ramp up
rrm_max_batch_percentage int max percentage of AP’s that need to be present in each rrm batch
rrm_first_batch_percentage int percentage of AP’s that need to be present in the first rrm batch
rrm_mesh_upgrade string sequential or parallel (default parallel). Whether to upgrade mesh AP’s parallelly or sequentially at the end of the upgrade
start_time long firmware download start time in epoch seconds, default is now
reboot_at long reboot start time in epoch seconds, default is start_time
force bool true will force upgrade when requested version is same as running version

Rules

Name Type Description
match_model string match devices of this model. Can optionally use offsets to select a substring. For eg: match_model[1:3]
match_name string match devices with this name. Can optionally use offsets to select a substring. For eg: match_name[1:3]

Get all upgrades for site

GET /api/v1/sites/:site_id/devices/upgrade
GET /api/v1/sites/:site_id/devices/upgrade?status=completed

Response

{
    [{
            "id": "e110e3ef-5ce9-4c7c-a056-714f154f354f",
            "target_version": "apfw-0.7.20216-gilly-d4fc",
            "status": "downloading",
            "strategy": "big_bang",
            "enable_p2p": false,
            "force": true,
            "start_time": 1624499588,
            "reboot_at": 1624499588,
            "max_failure_percentage": 5,
            "counts": {
                "download_requested": 1,
                "downloaded": 2,
                "total": 3
            }
        },
        {
            "id": "57bf9d30-bd30-48e6-bb76-43c2efa375dc",
            "target_version": "apfw-0.7.20216-gilly-d4fc",
            "status": "completed",
            "strategy": "serial",
            "enable_p2p": false,
            "force": false,
            "start_time": 1624499588,
            "reboot_at": 1624499588,
            "max_failure_percentage": 5,
            "counts": {
                "upgraded": 2,              
                "failed": 1,
                "total": 3
            }
        }
    ]
}

Get site upgrade

GET /api/v1/sites/:site_id/devices/upgrade/:upgrade_id

Response

{
    "id": "b040efc5-6bb0-423e-8f7d-66d80176aa71",
    "target_version": "apfw-0.11.25907-kedge-9019",
    "status": "completed",
    "strategy": "big_bang",
    "enable_p2p": true,
    "force": true,
    "start_time": 1648752756,
    "reboot_at": 0,
    "targets": {
        "scheduled": [],
        "download_requested": [],
        "downloaded": [],
        "reboot_in_progress": [],
        "rebooted": [],
        "upgraded": [
            "5c5b354e35f7",
            "5c5b353e537a"
        ],
        "skipped": [],
        "failed": [
            "5c5b353e190a"
        ],
        "total": 3
    }
}
Name Type Description
id uuid unique id for the upgrade
target_version string version to upgrade to
status string status upgrade is in (created/downloading/downloaded/upgrading/completed/cancelled/failed)
strategy string upgrade strategy
enable_p2p bool whether to allow local AP-to-AP FW upgrade, default False
p2p_cluster_size int size to split the devices for p2p, default 10
force bool whether to force upgrade when requested version is same as running version
start_time int firmware download start time in epoch
reboot_at int reboot start time in epoch
max_failure_percentage int percentage of failures allowed
max_failures array of ints number of failures allowed within a canary phase or serial rollout
current_phase int current canary/rrm phase in progress
upgrade_plan object a dictionary of canary/rrm phase number to devices part of that phase
download_time string time taken to download firmware on all devices
upgrade_time string time taken to upgrade firmware all devices
counts.total int count of devices part of this upgrade
counts.scheduled int count of devices which cloud has scheduled an upgrade for
counts.download_requested int count of devices which cloud has requested to download firmware
counts.downloaded int count of devices which have the firmware downloaded
counts.reboot_in_progress int count of devices which are rebooting
counts.rebooted int count of devices which have rebooted successfully
counts.upgraded int count of devices which have upgraded successfully
counts.skipped int count of devices which skipped upgrade since requested version was same as running version. Use force to always upgrade
counts.failed int count of devices which have failed to upgrade

Cancel upgrade

Best effort to cancel an upgrade. Devices which are already upgraded wont be touched

POST /api/v1/sites/:site_id/devices/upgrade/:upgrade_id/cancel

Re-provision all devices in the Site

To force every device to reprovision itself again. By default, only APs are reprovisioned

POST /api/v1/sites/:site_id/devices/reprovision

Re-provision one device

To force one device to reprovision itself again.

POST /api/v1/sites/:site_id/devices/:device_id/reprovision

Zeroize all FIPS APs in the Site

POST /api/v1/sites/:site_id/devices/zerioze

Request

{
    "password": "NUKETHESITE"
}

Parameters

Name Type Description
password string FIPS zeroize password

Send arbitrary BLE Beacon for a period of time

Note that only the devices that are connected will be restarted.

POST /api/v1/sites/:site_id/devices/send_ble_beacon

Request

{
    // by default, all APs in the site will be considered
    "macs": [
        "5c5b35584a6f",
        "5c5b350ea3b3"
    ],
    "map_ids": [ "845a23bf-bed9-e43c-4c86-6fa474be7ae5" ],

    "beacon_frame": "68b329da9893e34099c7d8ad5cb9c940",
    "beacon_freq": 100,
    "duration": 10,  // 1 - 60
}

Radius Synthetic Test from Switch

Ping test from the AP to confirm ‘reachability’ of the Radius server. Utilize Juniper EX switch(to which an AP is connected to) radius test capabilities to get details on the Radius Server ‘availability’.

POST /api/v1/sites/:site_id/devices/:device_id/check_radius_server

Request

{
    "user": "username",
    "password": "password",
    "profile": "profilename"
}

Parameters

Name Type Description
user string Specify the subscriber username to test
password string Specify the password associated with the username
profile string (Optional) Specify the access profile associated with the subscriber. default is dot1x

Response

{
    "session": "session_id"
}

Ping from AP, Switch and SSR

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.

POST /api/v1/sites/:site_id/devices/:device_id/ping

Request

{
    "host": "1.1.1.1",
    "count": 10
}

Parameters

Name Type Description
host string host name
count int (Optional) Supported only for ping. default is 10
size int (Optional) default is 56. Range 56-65535
egress_interface string (Optional) Interface through which packet needs to egress
node string (Optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Subscribe to Device Command outputs

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices/:device_id/cmd"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd",
    "data": {
        "session": "session_id",
        "raw": "64 bytes from 23.211.0.110: seq=8 ttl=58 time=12.323 ms\n"
    }
}

Service Ping from SSR

Service Ping can be performed from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/service_ping

Request

{
    "host": "1.1.1.1",
    "count": 10,
    "service": "web-session"
}

Parameters

Name Type Description
host string host name
service string (Optional) ping packet takes the same path as the service
tenant string tenant context in which the packet is sent
count int (Optional) Supported only for ping. default is 10
size int (Optional) default is 56. Range 56-65535
node string (Optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Routes from SSR, SRX and Switch

Get routes from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_route

Request

{
    // all attributes are optional
    "prefix": "192.168.0.5/30",
    "protocol": "bgp", // bgp (default) / any / ospf / static / direct / evpn
    "vrf": "default",
    "neighbor": "192.168.4.1",
    // if specified, dump both received and advertised
    // for SSR, show bgp neighbors 10.250.18.202 received-routes/advertised-routes
    // for SRX & Switches, show route receive-protocol/advertise-protocol bgp 192.168.255.12
    "route"": "advertised"
}

Parameters

Name Type Description
prefix string (optional) route prefix
protocol string (optional) Supported only for bgp
vrf string (optional) VRF name
neighbor string (optional) IP of the neighbor
route string if neighbor is specified, received / advertised, if not specified, both will be shown
node string (Optional) node0 / node1 for HA
interval int (Optional) rate at which output will refresh, default is 0 and valid range 0-10.
duration int (Optional) duration in sec for which refresh is enabled, default is 0 and valid range 0-300 sec. Should be set only if interval is configured to non-zero value.

Response

{
    "session": "session_id"
}

Example output from ws stream

admin@labsystem1.fiedler# show bgp neighbors
BGP neighbor is 192.168.4.1, remote AS 4200000001, local AS 4200000128, external
link
  BGP version 4, remote router ID 1.1.1.1
  BGP state = Established, up for 00:27:25
  Last read 00:00:25, hold time is 90, keepalive interval is 30 seconds
  Configured hold time is 90, keepalive interval is 30 seconds
  Neighbor capabilities:
    4 Byte AS: advertised and received
    Route refresh: advertised and received(old &amp; new)
    Address family IPv4 Unicast: advertised and received
    Graceful Restart Capabilty: advertised and received
      Remote Restart timer is 120 seconds
      Address families by peer:
        none
        ...

BGP summary from SSR, SRX and Switch

Get bgp summary from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_bgp_summary

Request

{
    "node": "node0",
}

Parameters

Name Type Description
node string (Optional) node0 / node1 for HA
vrf string (Optional) VRF name

Response

{
    "session": "session_id"
}

Example output from ws stream

Tue 2024-04-23 16:36:06 UTC
Retrieving bgp entries...
BGP table version is 354, local router ID is 10.224.8.16, vrf id 0
Default local pref 100, local AS 65000
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network                                      Next Hop                                  Metric LocPrf Weight Path
*> 161.161.161.0/24

OSPF summary from SSR and SRX

Get OSPF summary from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_ospf_summary

Request

{
    "vrf": "lan"
}

Parameters

Name Type Description
vrf string (optional) VRF name
node string (optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Example output from ws stream

===== =========== ========== ============= ==================== ========= =========== =============
 Vrf   Router ID   ABR Type   ASBR Router   External LSA Count   Area ID   Area Type   Area Border
                                                                                       Router
===== =========== ========== ============= ==================== ========= =========== =============
       1.0.0.2     cisco            False                    0   0.0.0.0
       1.0.0.2     cisco            False                    0   0.0.0.4   default

OSPF interfaces from SSR and SRX

Get OSPF interfaces from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_ospf_interfaces

Request

{
    "port_id": "ge-0/0/2",
    "vrf": "lan"
}

Parameters

Name Type Description
port_id string (optional) The nework interface
vrf string (optional) VRF name
node string (optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Example output from ws stream

===== ================== =================== ============== =============== =========== ========= ===========
 Vrf   Device Interface   Network Interface   Interface Up   IP Address      OSPF Type   Area ID   Area Type
===== ================== =================== ============== =============== =========== ========= ===========
       net1               g1                          True   172.16.1.2/24   Broadcast   0.0.0.0   default
       net3               g3                          True   172.16.3.2/24   Broadcast   0.0.0.0   default
       net4               g4                          True   172.16.4.2/24   Broadcast   0.0.0.4   default

OSPF Neighbors from SSR and SRX

Get OSPF Neighbors from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_ospf_neighbors

Request

{
    "neighbor": "10.1.1.1",
    "port_id": "ge-0/0/3",
    "vrf": "lan"
}

Parameters

Name Type Description
neighbor string (optional) IP address
port_id string (optional) The nework interface
vrf string (optional) VRF name
node string (optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Example output from ws stream

===== ==================== ========== ======= ======== ================ =================== =================
 Vrf   Neighbor Router ID   Priority   State   Uptime   Dead Timer Due   Interface Address   Interface State
===== ==================== ========== ======= ======== ================ =================== =================
       1.0.0.3                     1   Full       852               38   172.16.3.2          Backup
       1.0.0.4                     1   Full       811               33   172.16.3.2          DROther
       1.0.0.3                     1   Full       852               38   172.16.4.2          Backup
       1.0.0.4                     1   Full       811               34   172.16.4.2          DROther

OSPF Database from SSR and SRX

Get OSPF Database from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_ospf_database

Request

{    
    "self_originate": true, // default is false
    "vrf": "lan"
}

Parameters

Name Type Description
self_originate boolean (optional) show originating info, default is false
vrf string (optional) VRF name
node string (optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Example output from ws stream

===== ========= ========== ============ ==================== ====== =================
 Vrf   Area ID   LSA Type   LSA ID       Advertising Router    Age   Sequence Number
===== ========= ========== ============ ==================== ====== =================
       0.0.0.0   Router     1.0.0.2      1.0.0.2, (self)      1264        2147483657
       0.0.0.0   Router     1.0.0.3      1.0.0.3              1265        2147483657
       0.0.0.0   Router     1.0.0.4      1.0.0.4              1264        2147483654
       0.0.0.0   Network    172.16.3.2   1.0.0.2, (self)      1264        2147483650
       0.0.0.0   Summary    172.16.2.0   1.0.0.4              1265        2147483649
       0.0.0.0   Summary    172.16.4.0   1.0.0.2, (self)      1410        2147483649
       0.0.0.0   Summary    172.16.4.0   1.0.0.3              1310        2147483649
       0.0.0.0   Summary    172.16.4.0   1.0.0.4              1255        2147483649
       0.0.0.4   Router     1.0.0.2      1.0.0.2, (self)      1264        2147483654
       0.0.0.4   Router     1.0.0.3      1.0.0.3              1265        2147483654
       0.0.0.4   Router     1.0.0.4      1.0.0.4              1230        2147483657
       0.0.0.4   Network    172.16.4.2   1.0.0.2, (self)      1264        2147483650
       0.0.0.4   Summary    172.16.1.0   1.0.0.2, (self)      1410        2147483649
       0.0.0.4   Summary    172.16.1.0   1.0.0.3              1286        2147483649
       0.0.0.4   Summary    172.16.1.0   1.0.0.4              1255        2147483649
       0.0.0.4   Summary    172.16.3.0   1.0.0.2, (self)      1410        2147483649
       0.0.0.4   Summary    172.16.3.0   1.0.0.3              1310        2147483649
       0.0.0.4   Summary    172.16.3.0   1.0.0.4              1255        2147483649

Service Path from SSR

Get service path information of the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_service_path

Request

{
    // all attributes are optional
    "service_name": "any"
}

Parameters

Name Type Description
service_name string (Optional) The exact service name for which to display the service path
node string (Optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Example output from ws stream

show service-path

Service    Service-route     Type              Destination  Next-Hop  Interface  Vector  Cost  Rate  Capacity        State

Web        web-route1        service-agent     4.4.4.4      1.1.1.2     lan        red     10    1    200/3000       Up*
Web        web-route1        service-agent     4.4.4.4      1.1.1.3     lan        red     10    1    200/3000       Up
Web        web-route2        service-agent     5.5.5.5      2.2.2.2     lan       blue     20    2    50/unlimited   Down
Login      <None>            BgpOverSVR        10.1.1.1     1.2.3.4     wan        red     10    3        -          Up
Login      <None>            BgpOverSVR        11.1.1.1     1.2.3.4     wan        red     10    1        -          Up
App1       <None>            Routed                -           -         -          -      -     -        -          -
App1       learned-routed    Routed                -           -         -          -      -     -        -          -


Sessions from SSR and SRX

Get active sessions passing through the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_session

Request

{
    // all attributes are optional
    "service_name": "any"
}

Parameters

Name Type Description
service_name string (Optional) The exact service name for which to display the active sessions
session_id string (Optional) Show session details by session_id
node string (Optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Example output from ws stream

admin@ssr.node# show sessions
Fri 2020-04-17 16:55:34 UTC

Node: node1

====================================== ===== ============= =========== ========== ====== ======= ================= ========== ================= =========== ================= ========== =================== ========= =================
 Session Id                             Dir   Service       Tenant      Dev Name   VLAN   Proto   Src IP            Src Port   Dest IP           Dest Port   NAT IP            NAT Port   Payload Encrypted   Timeout   Uptime
====================================== ===== ============= =========== ========== ====== ======= ================= ========== ================= =========== ================= ========== =================== ========= =================
 01187fb8-765a-45e5-ae90-37d77f15e292   fwd   Internet      lanSubnet   lan           0   udp     192.168.0.28         44674   35.166.173.18          9930   96.230.191.130       19569   false                   154   0 days  0:00:28
 01187fb8-765a-45e5-ae90-37d77f15e292   rev   Internet      lanSubnet   wan           0   udp     35.166.173.18         9930   96.230.191.130        19569   0.0.0.0                  0   false                   154   0 days  0:00:28
 0859a4ae-bcff-4aa6-b812-79a5236a6c13   fwd   Internet      lanSubnet   lan           0   tcp     192.168.0.41         60843   17.249.171.246          443   96.230.191.130       51941   false                     2   0 days  0:00:10


admin@node0.90ec7732e327# show sessions by-id 262900cd-bca8-443a-8aab-e5c93d147ab5
Wed 2024-06-26 20:37:48 UTC
Retrieving session information...

=======================================================================================================================================================================================
 90ec7732e327.node0    Session ID: 262900cd-bca8-443a-8aab-e5c93d147ab5
=======================================================================================================================================================================================
 Service Name:                      Internet
 Service Route Name:                Internet-sr-local-breakout-1-node0
 Session Source:                    SourceType: PUBLIC
 Session Type:                      HTTPS
 Service Class:                     service-class-0-low
 Source Tenant:                     LAN
 Peer Name:                         N/A
 Inter Node:                        N/A
 Inter Router:                      N/A
 Ingress Source Nat:                N/A
 Payload Security Policy:           internal
 Payload Encrypted:                 True
 Common Name Info:                  N/A
 Tcp Time To Establish:             76
 Tls Time To Establish:             76
 Domain Name:                       N/A
 Uri:                               N/A
 Category:                          N/A
...

Subscribe to Device Command outputs

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices/:device_id/cmd"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd",
    "data": {
        "session": "session_id",
        "raw": "64 bytes from 23.211.0.110: seq=8 ttl=58 time=12.323 ms\n"
    }
}

ARP for the Device

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.

POST /api/v1/sites/:site_id/devices/:device_id/arp

Parameters

Name Type Description
node string (Optional) node0 / node1 for HA

Response

{
    "session": "session_id"
}

Subscribe to Device Command outputs

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices/:device_id/cmd"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd",
    "data": {
        "session": "session_id",
        "raw": "Output": "\tMAC\t\tDEV\tVLAN\tRx Packets\t\t    Rx Bytes\t\tTx Packets\t\t    Tx Bytes\tFlows\tIdle..."
    }
}

Traceroute

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.

POST /api/v1/sites/:site_id/devices/:device_id/traceroute

Request

{
    "host": "1.1.1.1",
    "protocol": "udp",
    "port": 33434,
    "timeout": 120,

    // for SSR, optional, the source to initiate traceroute from. by default, host internal is assumed
    "network": "corp"
    // for SRX, optional, the source to initiate traceroute from. by default, master VRF/RI is assumed
    "vrf": "lan"
}

Parameters

Name Type Description
host string host name
protocol string udp (default) /icmp (only supported in AP/MxEdge)
port int when protocol=udp, the udp port to use (default is 33434), not supported in SSR
timeout uint maximum time in seconds to wait for the response (default is 60, not supported in SSR)
network string The network on behalf of whom the traceroute is to be run (default is ‘internal’).
node string (Optional) node0 / node1 for HA

Show ARP Table

Show ARP Table. The output will be available through websocket.

POST /api/v1/sites/:site_id/devices/:device_id/show_arp

Request

{
    // all optional
    "ip": "192.168.30.7”,
    "port_id": "ge-0/0/0.0",
    "vrf": "guest"
}

Parameters

Name Type Description
ip string (optional) IP address
port_id string (optional) port id
vrf string (Optional) vrf name
interval int (Optional) rate at which output will refresh, default is 0 and valid range 0-10.
duration int (Optional) duration in sec for which refresh is enabled, default is 0 and valid range 0-300 sec. Should be set only if interval is configured to non-zero value.

Response

Status: 200 OK
{
    "session": "session_id"
}

Show MAC Table

Show MAC Table. The output will be available through websocket.

POST /api/v1/sites/:site_id/devices/:device_id/show_mac_table

Request

{
    "mac": "112233445566”,
    "vlan_id": 1,
    "port_id": "ge-0/0/0.0"
}

Parameters

Name Type Description
mac string (optional) mac address
vlan_id int (optional) vlan id
port_id string (optional) port id
interval int (Optional) rate at which output will refresh, default is 0 and valid range 0-10.
duration int (Optional) duration in sec for which refresh is enabled, default is 0 and valid range 0-300 sec. Should be set only if interval is configured to non-zero value.

Clear MAC Table

Clear MAC Table. The output will be available through websocket.

POST /api/v1/sites/:site_id/devices/:device_id/clear_mac_table

Request

{
    "mac": "112233445566”,
    "vlan_id": 1,
    "port_id": "ge-0/0/0.0"
}

Parameters

Name Type Description
mac string (optional) mac address
vlan_id int (optional) vlan id
port_id string (optional) port name

Response

Status: 200 OK
{
    "session": "session_id"
}

Show EVPN Database

Show EVPN Database. The output will be available through websocket.

POST /api/v1/sites/:site_id/devices/:device_id/show_evpn_database

Request

{
    // all optional
    "mac": "f8c1165c6400”,
    "port_id": "ge-0/0/0.0"
}

Parameters

Name Type Description
mac string (optional) client mac filter
port_id string (optional) interface name
interval int (Optional) rate at which output will refresh, default is 0 and valid range 0-10.
duration int (Optional) duration in sec for which refresh is enabled, default is 0 and valid range 0-300 sec. Should be set only if interval is configured to non-zero value.

Response

Status: 200 OK
{
    "session": "session_id"
}

Show Dot1x Table

Show Dot1x Table. The output will be available through websocket.

POST /api/v1/sites/:site_id/devices/:device_id/show_dot1x

Request

{
    // optional
    "port_id": "ge-0/0/0.0",
}

Parameters

Name Type Description
port_id string (Optional) port id
interval int (Optional) rate at which output will refresh, default is 0 and valid range 0-10.
duration int (Optional) duration in sec for which refresh is enabled, default is 0 and valid range 0-300 sec. Should be set only if interval is configured to non-zero value.

Response

Status: 200 OK
{
    "session": "session_id"
}

Clear Dot1x Session

Clear Dot1x Session. The output will be available through websocket.

POST /api/v1/sites/:site_id/devices/:device_id/clear_dot1x

Request

{
    // optional
    "port_id": "ge-0/0/0.0",
}

Parameters

Name Type Description
port_id string (Optional) port id

Response

Status: 200 OK
{
    "session": "session_id"
}

DNS for SSR Device

DNS resolutions are performed on the Device. The output will be available through websocket. As there can be multiple command issued against the same SSR at the same time and the output all goes through the same websocket stream, session is used for demux.

 POST /api/v1/sites/:site_id/devices/:device_id/resolve_dns

Response

{
    "session": "session_id"
}

Subscribe to Device Command outputs

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices/:device_id/cmd"
}

Response

Router Hostname Resolved Last Resolved Expiration
test-device xxx.yyy.net Y 2022-03-28T03:56:49Z 2022-03-28T03:57:49Z

Forwarding table from SSR, SRX and Switch

Get forwarding table from the Device. The output will be available through websocket. As there can be multiple command issued against the same device at the same time and the output all goes through the same websocket stream, session is introduced for demux.

POST /api/v1/sites/:site_id/devices/:device_id/show_forwarding_table

Request

{
    // all optional
    "prefix": "3.1.1.0/24",
    "vrf": "guest",
    "node": "node0",

    // ssr forwarding table has service related information either
    //      by service, or
    "service_name": "internet-wan_and_lte"

    //      by matching (all parameters below needs to be specified)
    "service_tenant": "branch1-wifi-mgt",
    "service_ip": "3.1.1.10",
    "service_port": "32768",
    "service_protocol": "udp"
}

Parameters

Name Type Description
node string (Optional) node0 / node1 for HA
vrf string (Optional) VRF name
prefix string (Optional) IP prefix
service_name string (Optional) service name, only supported in SSR
service_tenant string (Optional) service tenent, only supported in SSR
service_ip string (Optional) service destination ip, only supported in SSR
service_port int (Optional) service destination port, only supported in SSR
service_protocol string (Optional) service protocol, only supported in SSR

Response

{
    "session": "session_id"
}

Example output from ws stream

Mon 2024-05-20 16:47:30 UTC
Retrieving fib entries...

Entry Count: 3268
Capacity:    22668

==================== ====== ======= ================== ===== ====================== =========== =========== ======
 IP Prefix            Port   Proto   Tenant             VRF   Service                Next Hops   Vector      Cost
==================== ====== ======= ================== ===== ====================== =========== =========== ======
 0.0.0.0/0               0   None    Old_Mgmt           -     internet-wan_and_lte   1-2.0       broadband      1
                                                                                     1-4.0       lte           10
                                     branch1-Kiosk      -     internet-wan_and_lte   1-2.0       broadband      1
                                                                                     1-4.0       lte           10
                                     branch1-MGT        -     internet-wan_and_lte   1-2.0       broadband      1
                                                                                     1-4.0       lte           10
 3.1.1.0/24              0   None    Old_Mgmt           -     internet-wan_and_lte   1-2.0       broadband      1
                                                                                     1-4.0       lte           10
                                     branch1-Kiosk      -     internet-wan_and_lte   1-2.0       broadband      1
                                                                                     1-4.0       lte           10
                                     branch1-MGT        -     internet-wan_and_lte   1-2.0       broadband      1
                                                                                     1-4.0       lte           10

Cable Test from Switch

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.

POST /api/v1/sites/:site_id/devices/:device_id/cable_test

Request

{
    "port": "ge-0/0/0"
}

Parameters

Name Type Description
port string the port to run the cable test

Response

{
    "session": "session_id"
}

Subscribe to Cable Test outputs

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices/:device_id/cmd"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd",
    "data": {
        "session": "session_id",
        "raw": "Interface TDR detail:\nTest status : Test successfully executed  ge-0/0/0\n"
    }
}

Create Shell Session

POST /api/v1/sites/:site_id/devices/:device_id/shell

Request

{
    "node": "node0"
}

Parameters

Name Type Description
node string (Optional) node0 / node1 for SSR HA

Response

{
    "session': "19e73828-937f-05e6-f709-e29efdb0a82b",
    "url": "wss://api-ws.mist.com/ssh?jwt=xxxx"
}

Monitor Traffic

Monitor traffic on switches and SRX.

POST /api/v1/sites/:site_id/devices/:device_id/monitor_traffic

Request

{
    "port": "ge-0/0/1"
}

Parameters

Name Type Description
port string (optional) port name, if no port input is provided then all ports will be monitored
JUNOS uses cmd "monitor interface <port>" to monitor traffic on particular <port>
JUNOS uses cmd "monitor interface traffic" to monitor traffic on all ports

Response

{
    "session': "19e73828-937f-05e6-f709-e29efdb0a82b",
    "url": "wss://api-ws.mist.com/ssh?jwt=xxxx"
}

Run top command

Run top command on switches and SRX.

POST /api/v1/sites/:site_id/devices/:device_id/run_top

Response

{
    "session': "19e73828-937f-05e6-f709-e29efdb0a82b"
    "url": "wss://api-ws.mist.com/ssh?jwt=xxxx"
}

Clear BGP routes

Clear routes associated with one or all BGP neighbors

POST /api/v1/sites/:site_id/devices/:device_id/clear_bgp

Request

{
    "neighbor": "all",
    "type": "soft",
    "vrf": "TestVrf"
}

Parameters

Name Type Description
neighbor string neighbor ip-address or ‘all’
type string hard (default) / soft / in / out
vrf string (Optional) vrf name
node string (Optional) node0 / node1 for HA

Response

Status: 200 OK
Status: 400 - parameter neighbor absent
{
    "session": "session_id"
}

Clear Policy Hit Count for SRX

Clear application policy hit counts for all the policies

POST /api/v1/sites/:site_id/devices/:device_id/clear_policy_hit_count

Response

Status: 200 - OK
Status: 400 - Bad Request
{
    "session": "session_id"
}

Release DHCP lease for SSR Wan Network Interface

Releases an active DHCP lease for SSR wan network interface.

POST /api/v1/sites/:site_id/devices/:device_id/release_dhcp

Request

{
    "port_id": "ge-0/0/1.10"
}

Parameters

Name Type Description
port_id string The nework interface on which to release the current DHCP release
node string (Optional) node0 / node1 for HA

Response

Status: 200 OK
Status: 400 - parameter port_id absent
{
    "session": "session_id"
}

Show DHCP leases

Shows DHCP leases. POST /api/v1/sites/:site_id/devices/:device_id/show_dhcp_leases

Request

{
    "network": "guest"
}

Parameters

Name Type Description
network string (Optional) DHCP network for the leases, returns full table if not specified
node string (Optional) node0 / node1 for HA

Response

Status: 200 OK
{
    "session": "session_id"
}

Release leases from DHCP server

Releases active leases from DHCP server. POST /api/v1/sites/:site_id/devices/:device_id/release_dhcp_leases

Request

{
    // all optional
    "port_id": "ge-0/0/1",
    "macs": ["90ec77aabbcc", "90ec77aabbdd"],
    "network": "guest,
}

Parameters

Name Type Description
network string (Optional) The network for the leases IPs to be released
port_id string (Optional) The nework interface on which to release the current DHCP release
macs list A list of client macs to be released
node string (Optional) node0 / node1 for HA

Clear ARP cache for SSR, SRX and Switch

Clear the entire ARP cache or a subset if arguments are provided.

POST /api/v1/sites/:site_id/devices/:device_id/clear_arp

Request

{
    "port_id": "wan",
    "vlan" : 1000,
    "ip" : "10.1.1.1",
    "vrf": "guest"
}

Parameters

Name Type Description
port_id string The device interface on which to clear the ARP cache.
vlan int The VLAN on which to clear the ARP cache. port_id must be specified.
ip string The IP address for which to clear an ARP entry. port_id must be specified.
vrf string The vrf for which to clear an ARP entry. applicable for switch.
node string (Optional) node0 / node1 for HA

Response

Status: 200 OK
Status: 400 - port_id must be specified with vlan or ip
{
    "session": "session_id"
}

Clear session for SSR, SRX

Clear session

POST /api/v1/sites/:site_id/devices/:device_id/clear_session

Request

{
    // all optional
    // session deletion by providing service_name to delete all sessions under the service,
    "service_name": "internet-wan_and_lte",

    // or by providing the session id to delete a particular session,
    "session_ids" : [88776655-0123-4567-890a-112233445566],

Parameters

Name Type Description
service_name string (Optional) service name, only supported in SSR
session_ids array of strings List of id of the sessions to be cleared
node string (Optional) node0 / node1 for HA

Response

Status: 200 OK
{
    "session": "session_id"
}

Clear all learned macs from port on Switch

Clear all learned MAC addresses, including persistent MAC addresses, on a port.

POST /api/v1/sites/:site_id/devices/:device_id/clear_macs

Request

{
    "ports": ["ge-0/0/0.0"]
}

Parameters

Name Type Description
ports list a list of ports on which to clear mac addresses. must include logical unit number.

Response

Status: 200 OK
Status: 400 - logical unit number not specified
Status: 400 - ports not specified

Clear BPDU errors from port(s) on Switch

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.

POST /api/v1/sites/:site_id/devices/:device_id/clear_bpdu_error

Request

{
    "ports": ["ge-0/0/2"]
}
{
    "ports": ["all"]
}

Parameters

Name Type Description
ports list the ports on which to clear the detected BPDU error, or ["all"] for all ports

Response

Status: 200 OK
Status: 400 - ports not specified

Port Bounce from Switch / Gateway

Port Bounce can be performed from the Switch/Gateway.

POST /api/v1/sites/:site_id/devices/:device_id/bounce_port

Request for bounce ports

{
    "ports": ["ge-0/0/0"]
}

Request for bounce multiple ports

{
    "ports": ["ge-0/0/0", "ge-0/0/1"]
}

Request for bounce a port and multiple ports

{
    "ports": ["ge-0/0/1", "ge-0/0/2"]
}

Parameters

Name Type Description
ports list list of ports to bounce

Note: Ports starting with vme, ae, irb, and HA control ports (for SSR only) are not supported

Response

{
    "session": "session_id"
}

Subscribe to Cable Test outputs

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices/:device_id/cmd"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/devices/00000000-0000-0000-1000-5c5b350e0060/cmd",
    "data": {
        "session": "session_id",
        "raw": "Port bounce complete."
    }
}

Update / Delete Local Switch Port Config

Sometimes HelpDesk Admin needs to change port configs. They can use the following APIs.

PUT /api/v1/sites/:site_id/devices/:device_id/local_port_config
DELETE /api/v1/sites/:site_id/devices/:device_id/local_port_config

Payload

{
    "ge-0/0/5-7": { ... }
}

How does it show up in Device Config?

local_port_config will show up separately from the port_config so it can be easily identified (and cleared)

{
    "local_port_config": {
        "ge-0/0/5-7": {
            ... 
            "note": "force 100M for camera"
        }
    }
}

How to prevent HelpDesk users to overwrite a port config?

no_local_overwrite can be added in port_config. e.g.

{
    "port_config": {
        "ge-0/0/5-7": {
            "usage": "uplink",
            "no_local_overwrite": true
        }
    }
}

Poll Stats Proactively from Switch

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.

POST /api/v1/sites/:site_id/devices/:device_id/poll_stats

Response

Status: 200 OK

Readopt the octerm devices

For the octerm devices, the device ID must come from fpc0. However, for a VC, the users may change the original fpc0 from CLI. To fix the issue, the readopt API could be used to trigger the readopt process so the device would get the corret device ID to connect the cloud.

POST /api/v1/sites/:site_id/devices/:device_id/readopt

Response

Status: 200 OK
Status: 400 - the device is not a virtual chassis

Set IoT Output Pins

Note: For each IoT pin referenced…

  1. The pin must be enabled using the Device ‘iot_config’ API
  2. The pin must support the output direction

PUT /api/v1/sites/:site_id/devices/:device_id/iot

Request

{
    "DO": 0,
    "A1": 1
}

Response

Status: 200 OK

Get IoT Output Pins

Returns the current state of each enabled IoT pin configured as an output.

GET /api/v1/sites/:site_id/devices/:device_id/iot

Response

{
    "DO": 0,
    "A1": 1
}

Get Available Device Versions

GET /api/v1/sites/:site_id/devices/versions
Name Type Description
type string fetch version for device type (E.g. switch)
model string fetch version for device model, use/combine with type as needed (for switch and gateway devices)

Response

[
    {
        "model": "AP41",
        "version": "v0.1.543",
        "tag": "stable",
    },
    {
        "model": "AP21",
        "version": "v0.1.545",
    },
    ...
]

Response Schema

Name Type Description
model string device model (as seen in the device stats)
version string firmware version
tag string annotation, stable / beta / alpha. Or it can be empty or nothing which is likely a dev build

Check AP Upgrade Status

When the device is being upgraded, device stat will have the following.

{
    "status": "upgrading",
    "fwupdate": {
        "timestamp": 1428949501,
        "status": "inprogress",
        "status_id": 5,
        "progress": 10
    },
    "auto_upgrade_stat": {
        "scheduled": true,
        "scheduled_version": "1.2.3",
        "scheduled_time": 1428949501
    }
}

the status will be upgrading and a fwupdate object will be added

see also Device Stats

Get AP Radio Channels

Get a list of allowed channels (per channel width)

GET /api/v1/sites/:site_id/devices/ap_channels?country_code=US

Parameters

Name Type Description
country_code string country code for the site (for AP config generation), in two-character

Response

{
    "key": "US",
    "name": "United States"
    "code": 840,
    "band24_enabled": true,
    "band24_channels": {
        "20": [
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
        ],
        "40": [
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
        ]
    },
    "band5_enabled": true,
    "dfs_ok": true,
    "band5_channels": {
        "20": [
            36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165
        ],
        "40": [
            36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 132, 136, 149, 153, 157, 161
        ],
        "80": [
            36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 132, 136, 149, 153, 157, 161
        ],
        "dfs": [
            52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140
        ],
        "outdoor": [
            "100, 104, 108, 112, 116, 132, 136, 140"
        ]
    }
}

Get Traffic Types

GET /api/v1/const/traffic_types

Response

[
    {
        "name": "data_best_effort",
        "failover_policy": "non-revertible",
        "traffic_class": "low",
        "dscp": 0
    },
    ...
]

Get AP Device Models

Get a list of AP device models for the Mist Site

GET /api/v1/const/device_models

Response

[
    {
        "model": "AP41",
        "display": "AP41",
        "description": "AP-41",
        "ap_type": "aph",
        "fcc_dfs_ok": true,
        "ce_dfs_ok": true,
        "other_dfs_ok": true,
        "has_scanning_radio": true,
        "has_extio": true,
        "extio": {
            "DO": {
                "input": true,
                "default_dir": "OUT",
                "output": true
            },
            "A1": {
                "input": true,
                "default_dir": "IN",
                "output": true
            },
            "A3": {
                "input": true,
                "default_dir": "IN",
                "output": true
            },
            "A2": {
                "input": true,
                "default_dir": "IN",
                "output": true
            },
            "A4": {
                "input": true,
                "default_dir": "IN",
                "output": true
            },
            "DI1": {
                "input": true,
                "default_dir": "IN",
                "output": false
            },
            "DI2": {
                "input": true,
                "default_dir": "IN",
                "output": false
            }
        },
        "has_height": true,
        "has_usb": true,
        "has_wifi_band5": true,
        "has_wifi_band24": true,
        "band5": {
            "max_clients": 128,
            "max_power": 17,
            "min_power": 8
        },
        "band24": {
            "max_clients": 128,
            "max_power": 19,
            "min_power": 8
        },
        "max_poe_out": 6000,
        "has_module_port": true,
        "has_compass": true,
        "has_vble": true,
        "vble": {
            "beacon_rate": 4,
            "power": 8
        }
    }
]

Definition

Name Type Description
fcc_dfs_ok boolean US-only; whether DFS channels are allowed in US for the AP model
ce_dfs_ok boolean EU-only; whether DFS channels are allowed in EU countries for the AP model
other_dfs_ok boolean JP + all other countries; whether DFS channels are allowed in JP and other remaining countries for the AP model

Get Device Models

Get a list of model definitions (mapping model to its display name, etc)

GET /api/v1/const/device_models

Response

[
    {
        "model": "APH",
        "description": "AP-H, our initial AP with integrated antennas",
        "display": "AP-Premium",
        "has_wifi_band5": true,
        "has_wifi_band24": true,
        "has_scanning_radio": true,
        "has_vble": true,
        "outdoor": false,
        "vble": {
            "power": 8,
            "beacon_rate": 4
        },
        "band24": {
            "max_clients": 128,
            "max_power": 17,
            "min_power": 11
        },
        "band5": {
            "max_clients": 128,
            "max_power": 17,
            "min_power": 11
        },
        "has_compass": true,
        "has_height": true,
        "fcc_dfs_ok": true,
        "ce_dfs_ok": true,
        "other_dfs_ok": true
    }
]

Definition

Name Type Description
fcc_dfs_ok boolean US-only; whether DFS channels are allowed in US for the AP model
ce_dfs_ok boolean EU-only; whether DFS channels are allowed in EU countries for the AP model
other_dfs_ok boolean JP + all other countries; whether DFS channels are allowed in JP and other remaining countries for the AP model

Note: min_power and max_power are limits that we consider operational (depending on the AP model and testing). And AP may further limit it depending on country/regulatory/channel.

Subscribe to devices Stream

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/devices"
}

Response

{
    "event": "data",
    "channel": "/sites/67970e46-4e12-11e6-9188-0242ac110007/devices",
    "data": {
        "site_id": "67970e46-4e12-11e6-9188-0242ac110007",
        "device_id": "00000000-0000-0000-1000-5c5b3524500b",
        "event_type": "fwupdate",
        "detail": {
            'timestamp': 1485381027,
            'status': 'inprogress,
            'status_id': 4,
            'progress': 45
        }
    }
}

Definition

Name Type Description
ap_mac string mac of the device corresponding to the event
event_type string type of the event that occurred. currently, on device updates are reported on the stream.
detail object detail will be specific to the event_type.

Subscribe to devices stats Stream

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/devices"
}

Response

{
    "event": "data",
    "channel": "/sites/67970e46-4e12-11e6-9188-0242ac110007/stats/devices",
    "data": {
        "mac": "5c5b350e1300",
        "version": "0.1.11681",
        "ip": "10.2.10.193",
        "ext_ip": "73.92.124.103",
        "power_src": "PoE 802.3af",
        "uptime": 706659,
        "last_seen": 1504917238,
        "num_clients": 1,
        "num_wlans": 3,
        "ip_stat": {
            // v4
            "ip": "10.2.10.193",
            "netmask": "255.255.192.0",
            "gateway": "10.2.1.1",
            // v6
            "ip6": "2607:f8b0:4005:808::2004",
            "netmask6": "/32",
            "gateway6": "2607:f8b0:4005:808::1",
            "dns": [
                "8.8.8.8",
                "8.8.4.4"
            ],
            "ips": {
                "vlan1": "10.2.1.1/24,2607:f8b0:4005:808::1/32"
            }
        },
        "radio_stat": {
            "band_5": {
                "mac": "5c5b3500bc50",
                "tx_pkts": 29790678,
                "bandwidth": 40,
                "channel": 149,
                "power": 15,
                "tx_bytes": 642844306,
                "rx_pkts": 214935,
                "rx_bytes": 28557893,
                "num_wlans": 1,
                "num_clients": 1
            },
            "band_24": {
                "mac": "5c5b3500bc40",
                "tx_pkts": 19831714,
                "bandwidth": 20,
                "channel": 11,
                "power": 11,
                "tx_bytes": 3118012867,
                "rx_pkts": 3,
                "rx_bytes": 298,
                "num_wlans": 1,
                "num_clients": 0
            },
            "band_6": {
                "mac": "5c5b3500bc60",
                "tx_pkts": 29790678,
                "bandwidth": 40,
                "channel": 53,
                "power": 15,
                "tx_bytes": 642844306,
                "rx_pkts": 214935,
                "rx_bytes": 28557893,
                "num_wlans": 1,
                "num_clients": 1
            },            
        },
        "port_stat": {
            "module": {
                "tx_pkts": 6413453,
                "rx_pkts": 951238,
                "rx_bytes": 877498272,
                "tx_bytes": 1009414543,
                "rx_peak_bps": 31116,
                "tx_peak_bps": 42165,
                "full_duplex": true,
                "speed": 1000,
                "up": true,
                "rx_errors": 0
            },
            "eth3": {
                "tx_pkts": 0,
                "rx_pkts": 0,
                "rx_bytes": 0,
                "tx_bytes": 0,
                "rx_peak_bps": 0,
                "tx_peak_bps": 0,
                "full_duplex": false,
                "speed": 0,
                "up": false,
                "rx_errors": 0
            },
            "eth2": {
                "tx_pkts": 0,
                "rx_pkts": 0,
                "rx_bytes": 0,
                "tx_bytes": 0,
                "rx_peak_bps": 0,
                "tx_peak_bps": 0,
                "full_duplex": false,
                "speed": 0,
                "up": false,
                "rx_errors": 0
            },
            "eth1": {
                "tx_pkts": 0,
                "rx_pkts": 0,
                "rx_bytes": 0,
                "tx_bytes": 0,
                "rx_peak_bps": 0,
                "tx_peak_bps": 0,
                "full_duplex": false,
                "speed": 0,
                "up": false,
                "rx_errors": 0
            },
            "eth0": {
                "tx_pkts": 2731519,
                "rx_pkts": 8325448,
                "rx_bytes": 3224888514,
                "tx_bytes": 2116882740,
                "rx_peak_bps": 482729,
                "tx_peak_bps": 293857,
                "full_duplex": true,
                "speed": 1000,
                "up": true,
                "rx_errors": 0
            }
        },
        "lldp_stat": {
            "system_name": "TC2-OWL-Stack-01",
            "system_desc": "HP J9729A 2920-48G-POE+ Switch",
            "mgmt_addr": "10.1.5.2",
            "lldp_med_supported": false,
            "port_desc": "",
            "port_id": "",
            "power_request_count": 0,
            "power_allocated": 0,
            "power_draw": 0,
            "power_requested": 0
        },
        "l2tp_stat": {
        },
        "rx_bytes": 28558191,
        "rx_pkts": 214938,
        "tx_pkts": 49622392,
        "tx_bytes": 3760857173,
        "tx_bps": 0,
        "rx_bps": 0,
        "cpu_stat": {
            "system": 5,
            "idle": 81,
            "interrupt": 0,
            "user": 14,
            "load_avg": [
                0.14,
                0.23,
                0.24
            ]
        },
        "memory_stat": {
            "usage": 33
        },
    }
}

Search AP

 GET /api/v1/sites/:site_id/devices/search?ip=10.2.16.205

Supported Filters

Name Type Description
hostname string partial / full hostname
site_id string site id
model string device model
mac string AP mac
version string version
ip string ip address
mxtunnel_status string MxTunnel status, up / down
mxedge_id string Mist Edge id, if AP is connecting to a Mist Edge
mxedge_ids list Mist Edge ids, if AP is connecting to a Mist Edge
lldp_system_name string LLDP system name
lldp_system_desc string LLDP system description
lldp_port_id string LLDP port id
lldp_mgmt_addr string LLDP management ip address
sort string sort options, timestamp/mac/model/sku, -prefix represents DESC order, default is -timestamp
stats boolean whether to return device stats, default is false

Response

{
    "results": [
        {
            "mac": "5c5b353e5299",
            "model": "AP41",
            "sku": "AP41-US",
            "ip": "10.2.16.205",
            "version": "0.7.20216",
            "uptime": 85280,
            "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
            "site_id": "a8178443-ecb5-461c-b854-f16627619ab3",
            "mxedge_id": "00000000-0000-0000-1000-43a81f238391",
            "mxedge_ids": [
                "00000000-0000-0000-1000-43a81f238391"
            ],
            "mxtunnel_status": "down",
            "hostname": [
                            "AP41-STB-3E5299-WH-2001",
                            "AP41-STB-3E5299-WH-50",
                            "AP41-STB-3E5299",
                            "5c5b353e5299"
                        ],
            "lldp_port_desc": "GigabitEthernet1/0/1",
            "lldp_mgmt_addr": "10.2.10.139",
            "lldp_system_desc": "Cisco IOS Software, C2960S Software (C2960S-UNIVERSALK9-M), Version 15.2(1)E1, RELEASE SOFTWARE (fc2)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2013 by Cisco Systems, Inc.\nCompiled Fri 22-Nov-13 07:10 by prod_rel_team",
            "lldp_system_name": "ME-DC-1-ACC-SW",
            "lldp_port_id": "Gi1/0/1",
            "timestamp": 1596588619.007
        }
    ]
}

Supported Filters for device type Switch or Gateway

Name Type Description
type string Required. switch, gateway (default is ap)
hostname string partial / full hostname
site_id string site id
model string device model
mac string device mac
version string version
ip string ip address
last_hostname string last hostname
cpu string max cpu usage
node string node0 / node1
node0_mac string mac for node0
node1_mac string mac for node1
ext_ip string external ip
clustered string true / false
t128agent_version string version of 128T agent
evpntopo_id string EVPN topology id
last_config_status string last configuration status of the switch/gateway
radius_stats object Key-value pairs where the key is the RADIUS server address and the value contains authentication statistics

radius_stats

Name Type Description
<server_address> string IP address of the RADIUS server as the key
auth_accepts long Number of accepted authentication requests
auth_rejects long Number of rejected authentication requests
auth_timeouts long Number of authentication timeouts
auth_server_status string Status of the server. Possible values: “up”, “down”, “unreachable”

Response for device type Switch or Gateway

{
    "results": [
        {
            "ip": "192.168.86.22",
            "type": "switch",
            "version": "21.4R1.12",
            "mac": "3c8c939485ad",
            "uptime": 2380356,
            "ext_ip": "0.0.0.0",
            "hostname": [
                "3c8c939485ad",
                "ludi-ex2300"
            ],
            "timestamp": 1661273225.321,
            "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
            "num_members": 1,
            "site_id": "8721e817-96ee-4e34-b6b6-a80cc01642a6",
            "model": "ex2300-c-12p",
            "last_hostname": "3c8c939485ad"
            "last_config_status": "success",
            "radius_stats": {
              "192.168.1.10": {
                "auth_accepts": 120,
                "auth_rejects": 5,
                "auth_timeouts": 0,
                "auth_server_status": "up"
              },
              "192.168.1.11": {
                "auth_accepts": 110,
                "auth_rejects": 15,
                "auth_timeouts": 2,
                "auth_server_status": "unreachable"
              }
            }
        }
    ]
}

Count AP

Counts the number of entries in ap events history for distinct field with given filters

GET /api/v1/sites/:site_id/devices/count?distinct=type&start=1531776183&end=1531862583&limit=10

Response

{
    "end": 1531862583.0,
    "distinct": "version",
    "results": [
        {
            "count": 10,
            "version": "apfw-0.5.16833-ellaria-0455"
        },
        {
            "count": 4,
            "type": "apfw-0.3.14833-cersei-0455"
        }
    ],
    "start": 1531776183.0,
    "limit": 10,
    "total": 2
}

Search Device Config History

GET /api/v1/sites/:site_id/devices/config_history/search?mac=5c5b350e0001&start=1531776183&end=1531862583&limit=10

Response

{
    "total": 1,
    "start": 1531776183.0,
    "limit": 10,
    "end": 1531862583.0,
    "results": [
        {
            "channel_5": 100,
            "ssids_24": [
                "test24",
            ],
            "radios": [
                {
                    "band": "24",
                    "channel": 11
                },
                {
                    "band": "5",
                    "channel": 100
                }
            ],
            "timestamp": 1531855856.643369,
            "version": "apfw-0.2.14754-cersei-75c8",
            "channel_24": 11,
            "ssids": [
                "test24",
                "test5",
                "test6"
            ],
            "wlans": [
                {
                    "id": "be22bba7-8e22-e1cf-5185-b880816fe2cf",
                    "bands": [
                        "24",
                    ],
                    "vlan_ids": [
                        "1"
                    ],
                    "ssid": "test24",
                    "auth": "psk"
                },
                {
                    "id": "f8c18724-4118-3487-811a-f98964988604",
                    "bands": [
                        "5"
                    ],
                    "vlan_ids": [
                        "1"
                    ],
                    "ssid": "test5",
                    "auth": "psk"
                },
                { 
                    "id": "f8c18724-4118-3487-811a-f98964988605",
                    "bands": [
                        "6"
                    ],
                    "vlan_ids": [
                        "1"
                    ],
                    "ssid": "test6",
                    "auth": "psk"
                }
            ],
            "radio_macs": [
                "5c5b352e000a",
                "5c5b352e000b",
                "5c5b352e000c"
            ],
            "ssids_5": [
                "test5"
            ],
            "ssids_6": [
                "test6"
            ],
            "channel_6": 85,
            "secpolicy_violated": false
        }
    ]
}

Count Device Config History

Counts the number of entries in device config history for distinct field with given filters

GET /api/v1/sites/:site_id/devices/config_history/count?distinct=mac&start=1531776183&end=1531862583&limit=10

Response

{
    "end": 1531862583,
    "distinct": "ap",
    "results": [
        {
            "count": 1,
            "ap": "5c5b350e0001"
        },
        {
            "count": 5,
            "ap": "5c5b350e0002"
        },
        {
            "count": 5,
            "ap": "5c5b350e0003"
        }
    ],
    "start": 1531776183,
    "limit": 10,
    "total": 3
}

Search Device Last Configs

GET /api/v1/sites/:site_id/devices/last_config/search?mac=5c5b350e0001&start=1531776183&end=1531862583&limit=10

Request Parameters

Name Type Description
device_type string ap (default) / switch / gateway / mxedge

Response

see (Search Device Config History)[Site#search-device-config-history]

Count Device Last Configs

Counts the number of entries in device config history for distinct field with given filters

GET /api/v1/sites/:site_id/devices/last_config/count?distinct=mac&start=1531776183&end=1531862583&limit=10

Response

see (Count Device Config History)[Site#count-device-config-history]

Search AP Events

Search AP Events

 GET /api/v1/sites/:site_id/devices/events/search?ap=5c5b350e0001&start=1531776183&end=1531862583&limit=2

Response

{
    "end": 1531862583.0,
    "results": [
        {
            "type": "AP_CONNECT_STATUS",
            "text": "Success",
            "last_reboot_time": 1531854327,
            "type_code": 2002,
            "timestamp": 1531855849.226722
        },
        {
            "timestamp": 1531854326,
            "type": "AP_CONFIGURED"
        }
    ],
    "next": "/api/v1/sites/8aaba0aa-09cc-44bd-9709-33b98040550c/devices/events/search?ap=5c5b350e0001&end=1531855849.000&limit=2&start=1531776183.0",
    "start": 1531776183.0,
    "limit": 2,
    "total": 14
}

Search device events including prisma events

Search prisma prisma events

 GET /api/v1/sites/:site_id/devices/events/search?includes=ext_tunnel&mac=00c52c3cfaa4&start=1531776183&end=1531862583&limit=2

Parameters

Name Type Description
includes string Keyword to include events from additional indices, e.g. ext_tunnel for prisma events

Response

{
    "results": [
        {
           "tunnel_name": "Prisma-Tunnel-II",
           "type": "PRISMA_RN_SECONDARY_WAN_TUNNEL_UP",
           "text": "Remote Network Site RN_SITE_1 SECONDARY WAN Tunnel Stage-Tunnel2 is down",
           "timestamp": 1531856649,
           "ext_tunnel_site": "RN_SITE_1",
           "ext_tunnel_name": "Stage-Tunnel2",
           "ext_tunnel_event_id": b1b1ccdd-4444-4a2d-a81d-8888bc8f6fa1",
           "ext_tunnel_debug_url": "https://stratacloudmanager.paloaltonetworks.com/incidents-alerts/logviewer?logType=log.system&query=Event%25C2%25A0Component%20=%20%27RN_SITE_1%27%20OR%20Event%25C2%25A0Component%20=%20%27Stage-Tunnel2%27%20&timePreset=custom&startTime=1745977906000&endTime=1745980306000&queryMode=lq",
           "site_id: "f1e17c67-8e42-4a2d-a81d-98ddbc8f6fa1",
           "org_id: "f3045b5a-f2ea-445e-b923-5bbb5a670c35",
           "device_type: "gateway",
           "mac: "00c52c3cfaa4",
           "port_id: "reth2.0",
           "ext_tunnel_provider": "prisma"
        },
        {
           "tunnel_name": "Prisma-Tunnel-II",
           "type": "PRISMA_RN_SECONDARY_WAN_TUNNEL_DOWN",
           "text": "Remote Network Site RN_SITE_1 SECONDARY WAN Tunnel Stage-Tunnel2 is down",
           "timestamp": 1531855849,
           "ext_tunnel_site": "RN_SITE_1",
           "ext_tunnel_name": "Stage-Tunnel2",
           "ext_tunnel_event_id": b1b1ccdd-4444-4a2d-a81d-8888bc8f6fa1",
           "ext_tunnel_debug_url": "https://stratacloudmanager.paloaltonetworks.com/incidents-alerts/logviewer?logType=log.system&query=Event%25C2%25A0Component%20=%20%27RN_SITE_1%27%20OR%20Event%25C2%25A0Component%20=%20%27Stage-Tunnel2%27%20&timePreset=custom&startTime=1745977906000&endTime=1745980306000&queryMode=lq",
           "site_id: "f1e17c67-8e42-4a2d-a81d-98ddbc8f6fa1",
           "org_id: "f3045b5a-f2ea-445e-b923-5bbb5a670c35",
           "device_type: "gateway",
           "mac: "00c52c3cfaa4",
           "port_id: "reth2.0",
           "ext_tunnel_provider": "prisma"
        }
    ],
    "start": 1531776183.0,
    "end": 1531862583.0,
    "limit": 2,
    "total": 14
}

Fetch most recent device events.

GET /api/v1/sites/:site_id/devices/events/search?last_by=port_id&type=SW_PORT_UP,SW_PORT_DOWN

Return last/recent event for passed in field

Response

{
    "results": [
        {
            "timestamp": 1685566764.144,
            "org_id": "98272e44-d31d-4e9a-b52d-18ae2183446e",
            "site_id": "b60a57e3-dd74-4da3-af12-02987a141665",
            "port_id": "xe-2/2/2",
            "type": "SW_PORT_UP",
            "model": "EX4300-48MP",
            "device_type": "switch",
            "text": "SNMP_TRAP_LINK_UP: ifIndex 894, ifAdminStatus up(1), ifOperStatus up(1), ifName xe-2/2/2",
            "version": "21.4R3-S3.4",
            "mac": "c042d0f52a00"
        }
    ],
    "total": 234266
}

Response Definition

Name Type Description
results list Array of events where each entry represents the most recent event for each unique value of the last_by field (e.g., when last_by=port_id, you get the latest event for each port)
total int The total number of events that match the search criteria (type=SW_PORT_UP,SW_PORT_DOWN)

Count AP Events

Counts the number of entries in ap events history for distinct field with given filters

GET /api/v1/sites/:site_id/devices/events/count?distinct=type&start=1531776183&end=1531862583&limit=10

Response

{
    "end": 1531862583.0,
    "distinct": "type",
    "results": [
        {
            "count": 10,
            "type": "AP_CONNECT_STATUS"
        },
        {
            "count": 4,
            "type": "AP_CONFIGURED"
        }
    ],
    "start": 1531776183.0,
    "limit": 10,
    "total": 2
}

Count Device Events including Prisma Events

Counts the number of entries in events history for distinct field with given filters

GET /api/v1/sites/:site_id/devices/events/count?includes=ext_tunnel&distinct=type&start=1531776183&end=1531862583&limit=10

Parameters

Name Type Description
includes string Keyword to include events from additional indices, e.g. ext_tunnel for prisma events

Response

{
    "end": 1531862583.0,
    "distinct": "type",
    "results": [
        {
            "count": 1,
            "type": "PRISMA_RN_PRIMARY_WAN_TUNNEL_UP"
        },
        {
            "count": 1,
            "type": "PRISMA_RN_PRIMARY_WAN_TUNNEL_DOWN"
        },
        {
            "count": 2,
            "type": "PRISMA_RN_SECONDARY_WAN_BGP_DOWN"
        },
        {
            "count": 1,
            "type": "PRISMA_RN_SECONDARY_WAN_BGP_UP"
        }
    ],
    "start": 1531776183.0,
    "limit": 10,
    "total": 4
}

WXLAN

WxLAN are ordered rules that defines User Context and Resource relationship

WXLAN Tags

Base URI

/api/v1/sites/:site_id/wxtags

Example

// matches wlan_id(s)
{
    "type": "match",
    "name": "guest-wlan",
    "match": "wlan_id",
    "values": [ "be22bba78e22e1cf5185b880816fe2cf" ]
}
// matches client_mac(s)
{
    "type": "match",
    "name": "file-servers",
    "match": "client_mac",
    "values": [ "b0c4e7001543", "a0c4e7001543", "00c4e7001543" ]
}
// matches radius_username
{
    "type": "match",
    "name": "VIP",
    "match": "radius_username",
    "values": [ "john@abc.com", "eric@abc.com" ]
}
// matches radius_group
{
    "type": "match",
    "name": "VIP",
    "match": "radius_group",
    "values": [ "vip" ]
}
// matches psk_name
{
    "type": "match",
    "name": "VIP",
    "match": "psk_name",
    "values": [ "test_key1", "test_key2" ]
}
// matches psk_role
{
    "type": "match",
    "name": "VIP",
    "match": "psk_role",
    "values": [ "test_role" ]
}

// resources

// automatically generated tag for discovered network resources
{
    "type": "resource",
    "name": "HP Officejet Pro 8620",
    "resource_mac": "6cc21715e025",
    "mac": "6cc21715e025",
    "services": [
        "printer"
    ],
    "last_ips": [
        "10.2.9.232"
    ]
}
// automatically generated tag for discovered ip subnet
{
    "type": "subnet",
    "name": "10.1.2.0/24",
    "subnet": "10.1.2.0/24"
}

// matches ip_range_subnets
{
    "type": "match",
    "name": "file-servers",
    "match": "ip_range_subnet",
    "values": [ "10.1.2.1", "10.2.3.4/24", "10.1.2.5-10.2.3.4" ]
}

// matches app
{
    "type": "match",
    "name": "match app",
    "match": "app",
    "values": [ "gmail", "dropbox" ]
}

// matches hostnames excluding http(s)://
{
    "type": "match",
    "name": "mist",
    "match": "hostname",
    "values": [ "mist.com" ]
}
// matches ports
{
    "type": "match",
    "name": "web-ports",
    "match": "port",
    "values": [ "80", "8000", "8080" ]
}
// matching traffic spec
{
    "type": "spec",
    "name": "protocol-subnet-port",
    "specs": [
        {
            "protocol": "tcp",  // tcp / udp / icmp / gre / any / ":protocol_number", `protocol_number` is between 1-254, default is `any`
            "subnets": ["10.1.2.0/24"],  // matched dst subnet, default is "0.0.0.0/0",
            "port_range": "80"  // matched dst port, "0" means any, default is "0"
        }
    ]
}
{
    "type": "spec",
    "name": "protocol-hostname-port",
    "specs": [
        {
            "protocol": "tcp",  // tcp / udp / icmp / gre / any / ":protocol_number", `protocol_number` is between 1-254, default is `any`
            "hostnames": ["www.abc.com"],  // matched hostnames
            "port_range": "2000-2400"  // matched dst port, "0" means any, default is "0"
        }
    ]
}
// vlan assignment
{
    "type": "vlan",
    "name": "vlan-assignment",
    "vlan_id": 1055
}

Parameters

Name Type Description
name string the name
type string match / client / resource / subnet / spec / vlan
match string type of match, wlan_id / ap_id / client_mac / ip_range_subnet / radius_group / radius_username / radius_attr / hostname / app / port
op string in / not_in, default is in
values list list of values to match
vlan_id int vlan id for assignment

Get Application List

GET /api/v1/sites/:site_id/wxtags/apps

Response

[
    {
        "key": "gmail",
        "name": "Gmail - web/app",
        "group": "Emails"
    },
    ...
]

WXLAN Rules

Base URI

/api/v1/sites/:site_id/wxrules

Example

// action = allow | block
{
    "name": "Guest",
    "order": 1
    "src_wxtags": [ "8bfc2490-d726-3587-038d-cb2e71bd2330", "3aa8e73f-9f46-d827-8d6a-567bb7e67fc9" ],
    "dst_allow_wxtags": [ "fff34466-eec0-3756-6765-381c728a6037", "eee2c7b0-d1d0-5a30-f349-e35fa43dc3b3" ],
    "dst_deny_wxtags": [ "aaa34466-eec0-3756-6765-381c728a6037", "bbb2c7b0-d1d0-5a30-f349-e35fa43dc3b3" ],
    "blocked_apps": ["mist", "all-videos"],
    "apply_tags": [ "c049dfcd-0c73-5014-1c64-062e9903f1e5" ],
    "action": "allow"
}

Parameters

Name Type Description
name string The name of the rule
enabled boolean enabled or not, default is true
order int the order how rules would be looked up, > 0 and bigger order got matched first, -1 means LAST, uniqueness not checked
src_wxtags uuid tag list to determine if this rule would match
dst_allow_wxtags uuid tag list to indicate these tags are allowed access
dst_deny_wxtags uuid tag list to indicate these tags are blocked access
blocked_apps string blocked apps (always blocking, ignoring action), the key of Get Application List
action string type of action, allow / block

Get Derived WXLAN Rules for a Site

There can be Wxlan Rule defined at Org level. When it happens, we’ll match Org rules first.

GET /api/v1/sites/:site_id/wxrules/derived

Response

[
    {
        "name": "VIP",
        "for_site": false,
        "template_id": "867860f2-dd82-3677-54a5-4d6b139c96ca",
        "template_name" "west coast",
        "order": 2
        ...
    },
    {
        "name": "Blacklist",
        "for_site": false,
        "template_id": "867860f2-dd82-3677-54a5-4d6b139c96ca",
        "template_name" "west coast",
        "order": 1
        ...
    },
    {
        "name": "Guest",
        "order": 1,
        "action": "allow"
        ...
    },
    {
        "name": "Default",
        "order": -1,
        "action": "allow"
        ...
    }
]

Get derived Networks for site

Retrieves the list of networks available for the Site

GET /api/v1/sites/:site_id/networks/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Networks:Get:Example

Get derived Services for site

Retrieves the list of Services available for the Site

GET /api/v1/sites/:site_id/services/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Services:Example

Get derived VPN for Site

VPN object represents an overlay network where gateways can participate in and optionally expose routes to.

GET /api/v1/sites/:site_id/vpns/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:VPN:Payload

Get derived Service Policies for Site

GET /api/v1/sites/:site_id/servicepolicies/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Service Policies:Payload

Get derived Device Profiles for Site

GET /api/v1/sites/:site_id/deviceprofiles/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Device Profile:Schema

Get derived RF Templates for Site

GET /api/v1/sites/:site_id/rftemplates/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:RF Template:Schema

Get derived AP Port Templates for Site

GET /api/v1/sites/:site_id/apporttemplates/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Get derived AP Templates for Site

GET /api/v1/sites/:site_id/aptemplates/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:AP Template:Schema

Get derived Network Templates for Site

GET /api/v1/sites/:site_id/networktemplates/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Network Template:Schema

Get derived Site Templates for Site

GET /api/v1/sites/:site_id/sitetemplates/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Site Template:Schema

Get derived Gateway Templates for Site

GET /api/v1/sites/:site_id/gatewaytemplates/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Gateway Templates:Schema

Get derived Sky-ATP secintel profiles for Site

GET /api/v1/sites/:site_id/secintelprofiles/derived

Parameters

Name Type Description
resolve boolean whether resolve the site variables

Response

Status: 200 OK

Body

See Org:Sky ATP Secintel Profile:Schema

To get JSE info

Retrieves the list of JSE orgs associated with the account

GET /api/v1/sites/:site_id/setting/jse/info

Response

{
    "cloud_name": "devcentral.juniperclouds.net"
    "org_names": ["Mist-Sys", "Mist-Eng"]
}

Get Wxlan Rule usage

GET /api/v1/sites/:site_id/stats/wxrules

Response

[
    {
        "name": "Guest",
        "order": 1
        "src_wxtags": [ "8bfc2490-d726-3587-038d-cb2e71bd2330", "3aa8e73f-9f46-d827-8d6a-567bb7e67fc9" ],
        "dst_wxtags": [ "d4134466-eec0-3756-6765-381c728a6037", "1a42c7b0-d1d0-5a30-f349-e35fa43dc3b3" ],
        "dst_allow_wxtags": [ "fff34466-eec0-3756-6765-381c728a6037", "eee2c7b0-d1d0-5a30-f349-e35fa43dc3b3" ],
        "dst_deny_wxtags": [ "aaa34466-eec0-3756-6765-381c728a6037", "bbb2c7b0-d1d0-5a30-f349-e35fa43dc3b3" ],
        "client_mac": [ "3bbbf819bb6f", "bd96cbc4910f" ],
        "usage": {
            "d4134466-eec0-3756-6765-381c728a6037": {
                "num_flows": 60
            },
            "1a42c7b0-d1d0-5a30-f349-e35fa43dc3b3": {
                "num_flows": 60
            },
            "00000000-0000-0000-0000-000000000000": {
                "num_flows": 30
            }
        }
        "action": "allow"
    }
]

Get Wxlan Rule Currently used by a Client

see Client Details

GET /api/v1/sites/:site_id/stats/clients/:client_mac

WXLAN Tunnels

Tunnels can be used by a WXLAN rule or by a WLAN.

Base URI

/api/v1/sites/:site_id/wxtunnels

Example

{
    "name": "HQ",
    "peers": ["63.3.2.4"],
    "use_udp": true,
    "udp_port": 1701,
    "mtu": 0,
    "for_mgmt": false, // whether this tunnel is for management (configured under Org)
    "hello_interval": 60,
    "hello_retries": 3,

    // non-static
    "is_static": false,
    "secret": "secret used for tunnel",

    "router_id": "0",
    "hostname": ""
    "sessions": [
        // ethertype == ethernet
        {
            "remote_id": "vpn1",
            "ethertype": "ethernet",
            "comment": "something about this session"
        },
        // ethertype == vlan
        {
            "remote_id": "vpn1",
            "ethertype": "vlan",
            "comment": "a vlan'ed session"
        },
        // Pseudo 802.1ad QinQ (ethertype == vlan)
        {
            "remote_id": "vpn1",
            "ethertype": "vlan",
            "pseudo_8021ad_enabled": true,
            "comment": "a vlan'ed session"
        }
        ...
    ],

    // static
    "is_static": true,
    "sessions": [
        // specify the remote_session_id and local_session_id
        {
            "remote_session_id": 3000,
            "local_session_id": 4000,
            "ethertype": "ethernet",
            "comment": "something about this session",

            // for some interoperability - rare
            // if enabled, 0x0000<apmac> will be used 
            "enable_cookie": false
        }

        // or alternatively, `use_ap_as_session_ids` can be used where it will
        // generate the remote_session_id/local_session based on the AP MAC (the last 4 bytes)
        // e.g. 5c-5b-00-00-01-02 -> 257
        {
            "use_ap_as_session_ids": true,
            "ap_session_id": "apmac",
            "ethertype": "ethernet",
            "comment": "something about this session"
        }
        // or
        {
            "use_ap_as_session_ids": true,
            "ap_session_id": "apmac+0x01000000",
            "ethertype": "ethernet",
            "comment": "something about this session"
        }

        // Pseudo 802.1ad QinQ (ethertype == vlan)
        {
            "remote_session_id": 3000,
            "local_session_id": 4000,
            "ethertype": "vlan",
            "pseudo_8021ad_enabled": true,
            "comment": "something about this session"
        }
    ],

    // dynamic multi-point vpn
    "dmvpn": {
        "enabled": true,
        // optional
        "host_routes": ["10.1.1.1", "10.2.2.2"]
        "holding_time": 300
    },

    "ipsec": {
        "enabled": true,
        "psk": "cisco123"
    }
}

Definition

Name Type Description
name string The name of the tunnel
peers list list of remote peers’ IP or hostname
is_static boolean whether it’s static/unmanaged (i.e. no control session), default is False. As the session configurations are not compatible, cannot be toggled.
secret string secret, ‘’ if no auth is used
use_udp boolean whether to use UDP instead of IP (proto=115, which is default of L2TPv3). Default is false
udp_port int udp port if use_udp=true
hello_interval float in seconds, used as heartbeat to detect if a tunnel is alive. AP will try another peer after missing N hellos specified by hello_retries. between 1 and 300, default is 60 seconds
hello_retries int between 2 and 30, default is 7
mtu int 0 to enable PMTU, 552-1500 to start PMTU with a lower MTU, default is 0
router_id string optional, overwrite the router-id in SCCRQ control message, default is “0” or null, can also be an IPv4 address
hostname string optional, overwrite the hostname in SCCRQ control message, default is “” or null, %H and %M can be used, which will be replace with corresponding values. %H: name of the ap if provided (and will be stripped so it can be used for hostname) and fallbacks to MAC, %M: MAC (e.g. 5c5b350e0060)
for_mgmt boolean default is false, determined during creation time and cannot be toggled. A management tunnel cannot be used by wxlan rule or by wlan
sessions list sessions to be established with the tunnel. Has to be >= 1 in order for this tunnel to be useful. For management tunnel, it can only have 1
remote_id string remote-id of the session, has to be unique in the same tunnel
ethertype string ethernet / vlan, default is ethernet
use_ap_as_session_ids boolean whether to use AP (last 4 bytes of MAC currently) as session ids, default is false.
ap_session_id string if use_ap_as_session_ids=true, only apmac is supported right now. This is the name WLAN should use for wxtunnel_remote_id
remote_session_id int 1-4294967295
local_session_id int 1-4294967295
pseudo_8021ad_enabled boolean optional, default is False. Enables the pseudo 802.1ad QinQ mode where the AP device drops the outer vlan tag (QinQ). This mode is useful when tunneling Mist AP’s to some aggregation routers.
comment string optional, user-specified string for display purpose
dmvpn object Dynamic Multipoint VPN configurations
enabled boolean whether DMVPN is enabled (default is false)
host_routes list optional; list of IPv4 DMVPN peer host ip-addresses to which traffic is forwarded
holding_time int optional; the holding time for NHRP ‘registration requests’ and ‘resolution replies’ sent from the Mist AP (in seconds); default 600
ipsec object IPSec-related configurations; requires DMVPN be enabled
enabled boolean whether ipsec is enabled (default is false); requires DMVPN be enabled
psk boolean ipsec pre-shared key

Site

Get Site

GET /api/v1/sites/:site_id

Response

{
    "name": "Mist Office",
    "timezone": "America/Los_Angeles",
    "country_code": "US",

    "latlng": { "lat": 37.295833, "lng": -122.032946 },
    "address": "1601 S. Deanza Blvd., Cupertino, CA, 95014"
}

Parameters

Name Type Description
name string Required. The name of the site
timezone string Timezone the site is at
country_code string country code for the site (for AP config generation), in two-character
latlng latlng site location
address string full address of the site
lat float latitude
lng float longitude

Site Setting

Get Site Setting

GET /api/v1/sites/:site_id/setting

Update Site Setting

PUT /api/v1/sites/:site_id/setting

Example

{
    "rtsa": {
        "enabled": false,
        "app_waking": false,
        "disable_pressure_sensor": false,
        "disable_dead_reckoning": false,

        // asset tracking related
        "track_asset": false
    },
    "wifi": {
        "enabled": true,
        "mesh_enabled": true,
        "mesh_allow_dfs": false,
        "mesh_enable_crm": false
        "cisco_enabled": true,
        "proxy_arp": "default",
        "enable_arp_spoof_check": false,
        "locate_connected": false,
        "locate_unconnected": false,
        "enable_shared_radio_scanning": false,
        "disable_11k": false,
        "disable_radios_when_power_constrained": false,
    },
    "vna": {
        // this applied to AP / Switch / Gateway
        "enabled": false
    },
    "wan_vna": {
        "enabled": false
    },
    "wired_vna": {
        "enabled": false
    },
    "srx_app": {
        "enabled": false
    },
    "persist_config_on_device": false,
    "device_updown_threshold": 0,
    // by default, device_updown_thresold, if set, will apply to all devices types
    // if different values for specific device type is desired, use the following
    "ap_updown_threshold": null,
    "gateway_updown_threshold": 10,
    "switch_updown_threshold": 0,
    "occupancy": {
        "clients_enabled": true,
        "sdkclients_enabled": true,
        "assets_enabled": true,
        "unconnected_clients_enabled": false
        "min_duration": 3000
    },
    "zone_occupancy_alert": {
        "enabled": true,
        "threshold": 5,
        "email_notifiers": [
            "foo@juniper.net",
            "bar@juniper.net"
        ]
    },
    "radio_config":  {
        "band_24": {
            "disabled": false,
            "channels": [ 1, 6, 11 ],
            "bandwidth": 20,
            "power": 16
        },
        "band_5": {
            "disabled": false,
            "channels": null,
            "bandwidth": 40,
            "power": 0,
            "preamble": "short",
            "power_min": 10,
            "power_max": 18
        },
        "band_6": {
            "disabled": false,
            "channels": null,
            "bandwidth": 40,
            "power": 0,
            "preamble": "short",
            "power_min": 10,
            "power_max": 18,
            // for 6G's standard-power operation, AFC (Automatic Frequency Coordination) will be performed
            // and we'll fallback to Low Power Indoor if AFC failed
            "standard_power": true  // default is false
        },
        "ant_gain_24": 7,
        "ant_gain_5": 4,
        "ant_gain_6": 6,

        "model_specific": {
            "AP61": {
                "band_5": {
                    "disabled": false,
                    "channels": [ 100, 104 ],
                    "bandwidth": 40,
                    "power": 0
                }
                "ant_gain_24": 4,
                "ant_gain_5": 5
            },
            "AP43": {
                "band_24_usage": "5"
            }
        },

        // let RRM control everything, only the `channels` and `ant_gain` will be honored (i.e. disabled/bandwidth/power/band_24_usage are all controlled by RRM)
        "full_automatic_rrm": true
    },
    "ap_port_config": {
        "model_specific": {
            "AP32": {
                "eth1,eth2": {
                    // see "port_config" in Device
                }
            }
        }
    },
    "enable_unii_4": true,  // default is false
    "rogue": {
        "enabled": false,
        "honeypot_enabled": true,
        "min_rssi": -80,
        "min_duration": 10,
        "min_rogue_rssi": -80,
        "min_rogue_duration": 10,
        "whitelisted_ssids": [ "NeighborSSID" ],
        "whitelisted_bssids": [ "cc:8e:6f:d4:bf:16", "cc-8e-6f-d4-bf-16", "cc-73-*", "cc:82:*" ],
        "allowed_vlan_ids": [ 10, 20, 105 ],
    },
    "led": {
        "enabled": true,
        "brightness": 255
    },
    "vars": {
        "RADIUS_SECRET": "11s64632d",
        "RADIUS_IP1": "172.31.2.5", 
        "DYNAMIC_VLANS": "{\"enabled\": true,\"type\": \"airespace-interface-name\",\"vlans\":{\"131\": \"default\",\"322\": \"fast,video\"}\"default_vlan_id\": 999,\"local_vlan_ids\": []}"
    },
    "auto_upgrade": {
        "enabled": true,
        "version": "beta",
        "time_of_day": "12:00",
        "day_of_week": "sun",
        "custom_versions": {
            "AP41": "0.1.5135",
            "AP61": "0.1.7215",
            "AP21": "stable"
        }
    },
     "auto_upgrade_esl": {
        "enabled": true,
        "version": "2.5.0",
        "time_of_day": "2:00",
        "day_of_week": "mon",
        "custom_versions": {
            "AP41": "2.4.6",
            "AP61": "2.5.0"
        },
        "allow_downgrade": false // default is false, if true, it will allow downgrade to a lower version
    },
    "auto_placement": {
        // if we're able to determine its x/y/orientation, this will be populated
        "x": 30,
        "y": 60,
        "orientation": 45
    },
    "config_push_policy": {

        // stop any new config from being pushed to the device
        "no_push": false,

        // if enabled, new config will only be pushed to device within the specified time window
        "push_window": {
            "enabled": true,
            "hours": {
                "mon": "09:00-17:00",
                "fri": "09:00-17:00"
            }
        },

        // mist also uses some heuristic rules to prevent destructive configs from being pushed 
    }
    "status_portal": {
        "enabled": true,
        "hostnames": ["my.misty.com"]
    },
    "remote_syslog": {
        "enabled": true,
        "send_to_all_servers": true
        "servers": [
            {
                "server_name": "dc_syslog_server",
                "host": "syslogd.internal",
                "port": 514,
                "protocol": "udp",
                "facility": "config",
                "severity": "info"
                "tag": ""
            }
        ]
    },
    "engagement": {
        "dwell_tags": {
            "passerby": null,
            "bounce": null,
            "engaged": "300-14400",
            "stationed": "14400-43200"
        },
        "max_dwell": 43200,
        "hours": {
            "mon": "09:00-17:00",
            "fri": "09:00-17:00"
        },
        "dwell_tag_names": {
            "passerby": "Passer By",
            "bounce": "Bounce",
            "engaged": "Engaged",
            "stationed": "Stationed"
        }
    },
    "analytic": {
        "enabled": false
    },
    "flags": {
        "way1": 3,
        "way2": 0,
        "teleport": false
    },
    "ble_config": {
        "power_mode": "custom",
        "power": 10,
        "beacon_enabled": true,
        "beacon_rate_mode": "custom",
        "beacon_rate": 3,
        "beam_disabled": [ 1, 3, 6 ],

        // ibeacon
        "ibeacon_enabled": true,
        "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
        "ibeacon_major": 13,
        "ibeacon_minor": 138,
        "ibeacon_adv_power": -65,
        "ibeacon_beams": "2-4,7",  // or 'default' to auto-set

        // eddystone uid
        "eddystone_uid_enabled": false,
        "eddystone_uid_namespace": "2818e3868dec25629ede",
        "eddystone_uid_instance": "5c5b35000001",
        "eddystone_uid_freq_msec": 200,
        "eddystone_uid_adv_power": -65,
        "eddystone_uid_beams": "2-4,7",  // or 'default' to auto-set

        // eddystone url
        "eddystone_url_enabled": false,
        "eddystone_url_url": "https://www.abc.com",
        "eddystone_url_freq_msec": 1000,
        "eddystone_url_adv_power": -65,
        "eddystone_url_beams": "2-4,7",  // or 'default' to auto-set
    },
    "wids": {
        "repeated_auth_failures": {
            "threshold": 4,
            "duration": 60
        }
    },
    "proxy": {
        "url": "http://proxy.internal:8080/"
    },
    "ssh_keys": [
        "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA...Wxa6p6UW0ZbcP john@host"
    ],
    "config_auto_revert": false,

    "ap_matching": {
        "enabled": true,

        "rules": [
            {
                "name": "AP12",
                "match_model": "AP12",

                "port_config": {
                    "eth1,eth2": {
                        // see Device Config's port_config
                    }
                }
            },
        }
    },


    "whitelist_url": "https://papi.s3.amazonaws.com/whitelist/xxx...",
    "blacklist_url": "https://papi.s3.amazonaws.com/blacklist/xxx...",
    "watched_station_url": "https://papi.s3.amazonaws.com/watched_station/xxx...",

    // a set of heuristic rules will be enabled when marvis subscription is not available
    // it triggers when, in a Z minute window (5<=Z<=60), there are more than Y distinct client encountring over
    // X failures
    "simple_alert": {
        "dhcp_failure": {
            "client_count": 10, // number of distinct clients having this failure, default is 10
            "incident_count": 20, // number of failures we've seen, default is 10
            "duration": 10 // failing within minutes, default is 10
        },
        "dns_failure": {
            "client_count": 20,
            "incident_count": 30,
            "duration": 10
        },
        "arp_failure": {
            "client_count": 10,
            "incident_count": 10,
            "duration": 20
        }
    },

    // SLE thresholds
    "sle_thresholds": {
        "time-to-connect": {
            "threshold": 5  // seconds, 2-10 in 2s increments, default is 4
        },
        "coverage": {
            "threshold": 66  // dBm, 60-90 in 6 dB increments, default is 72
        },
        "capacity": {
            "threshold": 30  // percentage, 10-50 in 10% increment, default is 20
        }
    },

    "synthetic_test": {
        "vlans": [
            {
                "vlan_ids": [10, 20],
                "custom_test_urls": [ "http://www.abc.com/", "https://10.3.5.1:8080/about" ]
            },
            {
                "vlan_ids": [30, 40],
                // for some vlans where we don't want this to run 
                "disabled": true
            }
        ],
        // to override org setting
        "wan_speedtest": {
            "enabled": false,  // default is false (i.e. disabled)

            // optional
            // by default, we'll look at the tarffic pattern and determine when to run automatically 
            "time_of_day": "02:00"
        }
    },

    // you can define some URLs that's critical to site operaitons
    // the latency will be captured and considered for site health
    "critical_url_monitoring": {
        "enabled": true,
        // up to 5 monitors can be defined
        "monitors: [
            {
                // currently only http and https are supported
                "url": "http://50.1.3.5:8080",
                "vlan_id": 3,  // default is 1
            },
            ...
        ]
    },

    //
    // switch related
    //

    "switch_mgmt": {
        "root_password": "asdfh61316saf",
        // the rollback timer for commit confirmed. Default is 10, valid range should be 1-30.
        "config_revert_timer" : 10,

        // use mxedge as proxy        
        "use_mxedge_proxy": true,
        "mxedge_proxy_host": "1.1.1.1",
        "mxedge_proxy_port": 2222,  // optional, default is 2222  

        // Enable to provide the FQDN with DHCP option 81. Default is false
        "dhcp_option_fqdn": false

        // Sets timeout for switches
        "cli_idle_timeout": 1-60 (minutes)

        // Set Banners for switches. Allows markup formatting
        "cli_banner": "\t\tWELCOME!"

        // Local user authentication
        "local_accounts": {
            "user1": {
                "role": "admin", // none (default) / admin / read / helpdesk
                "password": "Juniper123" // optional
            },
        }

        // restrict inbound-traffic to host  (draft)
        "protect_re": {
            "enabled": true
            // when enabled, all traffic that is not essential to our operation will be dropped
            // e.g. ntp / dns / traffic to mist will be allowed by default
            //      if dhcpd is enabled, we'll make sure it works
            "hit_count": false,  // whether to enable hit count for Protect_RE policy, default is false

            // optionally, host/subnets we'll allow traffic to/from
            "trusted_hosts": ["10.242.3.0/24"] 

            // optionally, services we'll allow
            "allowed_services": ["icmp", "ssh"],

            // optionally, custom acls
            "custom": [
                {
                    "subnets": ["10.1.2.0/24"],
                    "protocol": "tcp",  // tcp / udp / icmp / any (default)
                    "port_range": "80,1035-1040",  // matched dst port, "0" means any, default is "0"
                }
            ]
        }
        "ap_affinity_threshold": 10,

        "tacacs": {
            "enabled": true,
            "default_role": "admin", // admin / none (default) / read / helpdesk
            "tacplus_servers": [
                {
                    "host": "1.2.3.4",
                    "port": 49,
                    "secret": "testing123"
                },
                {
                    "host": "tacacs.internal",
                    "port": 49,
                    "secret": "testing123",
                    "timeout": 10 // by default is 10 seconds, timeout value from 1 - 90 seconds
                }
            ],
            "acct_servers": [
                {
                    "host": "1.2.3.4",
                    "port": 49,
                    "secret": "testing123"
                },
                {
                    "host": "tacacs.internal",
                    "port": 49,
                    "secret": "testing123",
                    "timeout": 10 // by default is 10 seconds, timeout value from 1 - 90 seconds
                }
            ],

            // which network the TACACS server resides
            "network": "default"
        },

        "radius": {
            "enabled": true,

            // by default, `radius_config` will be used

            // if a different one has to be used
            "use_different_radius": false,
            // if use_different_radius = true, provide payload same way as those under `radius_config`
        },

        "disable_oob_down_alarm": true,
        "fips_enabled": true, // default is false

        // by default, when we configure a device, we only clean up config we generates. we'll remove existing configs if enabled. default is false
        "remove_existing_configs": false
    },

    "port_mirroring": {
        "port_mirror": {
            "ingress_port_ids": ["ge-0/0/3", "ge-0/0/4"],
            "ingress_networks": ["corp", "analyze"],
            "output_port_id": "ge-0/0/5",
        },
        "port_mirror_test": {
            "ingress_port_ids": ["ge-0/0/23"],
            "egress_port_ids": ["ge-0/0/22", "ge-0/0/21"],
            "output_network": "analyze",
        },
        "port_mirror_test_2": {
            "ingress_port_ids": ["ge-0/0/11"],
            "egress_port_ids": ["ge-0/0/12"],
            "output_ip_address": "1.2.3.4",
        }
    }

    "ntp_servers": [
        "pool.ntp.org"
    ],

    "dns_servers": [ "8.8.8.8", "4.4.4.4" ],
    "dns_suffix": [ ".mist.local", ".mist.com" ],

    // NOTE: if the site uses NetworkTemplate, NetworkTemplate takes precedence while this augments it
    //       i.e. only those not defined in network templates will be used
    "networks": {
        // default is assumed, cannot be changed
        "default": {
            "vlan_id": 1
        },

        // create more
        "corp": {
            "vlan_id": 60,
        },
        "guest": {
            "vlan_id": 70,

            // optional for pure switching, required when L3 / routing features are used
            "subnet": "192.168.70.0/24",

            // whether to stop clients to talk to each other, default is false (when enabled, a unique isolation_vlan_id is required)
            // NOTE: this features requires uplink device to also a be Juniper device and `inter_switch_link` to be set 
            //       on the connected ports
            // also see `inter_isolation_network_link` and `community_vlan_id` in port_usage
            "isolation": true,  // default is false
            "isolation_vlan_id": 3070
        },
        "mgmt": {
            "vlan_id": 500
        },
        "voip": {
            "vlan_id": 50,
            "subnet": "192.168.50.0/24",
            "gateway": "192.168.50.1"
        }
    },

    // NOTE: if the site uses NetworkTemplate, NetworkTemplate takes precedence while this augments it
    //       i.e. only those not defined in network templates will be used
    "port_usages": {
        "ap": {
            // the following parameter is assumed by default
            "mode": "trunk",
            "all_networks": true,
            "stp_edge": true,
            "port_network": "default",
            "mtu": 9192,

            // to limit networks it trunks
            "all_networks": false,
            "networks": [ "guest", "corp" ],

            // to change the native network
            "port_network": "mgmt",

            // to make the port disabled
            "disabled": true,

            // if alternative name is desired
            "description": "WAP",

            // to add voip
            "voip_network": "voip",

            "enable_qos": true,

            // if DHCP snooping is enabled, DHCP server is not allowed
            "allow_dhcpd": false,
        },
        "uplink": {
            // the following parameter is assumed by default
            "mode": "trunk",
            "all_networks": true,
            "stp_edge": false,
            "port_network": "default",
            "enable_qos": false,

            // inter_switch_link is used together with "isolation" under networks
            // NOTE: inter_switch_link works only between Juniper device. This has to be applied to both ports connected
            //       together            
            "inter_switch_link": false,  // default is false

            // inter_isolation_network_link is used together with "isolation" under networks
            // signaling that this port connects to the networks isolated
            "inter_isolation_network_link": false,  // default is false

            // if this is connected to a vstp network
            "use_vstp": true,  // default is false
        },
        "iot": {
            // the following parameter is assumed by default
            "mode": "access",
            "stp_edge": true,
            "port_network": "default",

            // if DHCP snooping is enabled, DHCP server is allowed
            "allow_dhcpd": true,

            // community_vlan_id is used together with "isolatin" under networks
            // signaling that this port connects to the networks isolated but wired clients belong to the same community can talk to each other
            "community_vlan_id": 3000
        },
        "default": {
            // the following parameter is assumed by default and cannot be changed
            "mode": "access",
            "stp_edge": false,  // we don't know how it will be connected at default state, not doing anything
            "port_network": "default"
        },
        "dynamic": {
            // this is a special mode where the actually usage is determined
            // by a set of rules
            // the port will start with `access` mode and isolated
            // depending on the rules, if resolved, the port will have
            // the resolved usage applied.
            //
            // if the port/link goes down, it goes back to the initial state
            "mode": "dynamic",

            // Control when the DPC port should be changed to the default port usage
            // Configuring to none will let the DPC port keep at the current port usage.
            // The default value is link_down
            "reset_default_when": "none",   // none or link_down. 

            // Control when the DPC port should be changed to the default port usage
            // Configuring to none will let the DPC port keep at the current port usage.
            // The default value is link_down
            "reset_default_when": "none",   // none or link_down. 

            "rules": [
                // use LLDP attributes
                {
                    "src": "lldp_system_name",  // or lldp_chassis_id
                    "expression": "[0:3]",           // "abcdef" -> "abc"
                                  "split(.)[1]",     // "a.b.c" -> "b"
                                  "split(-)[1][0:3], // "a1234-b5678-c90" -> "b56"
                    "equals": "SENSOR",
                    "usage": "iot"
                },
                // use equals_any to match any item in a list
                {
                    "src": "lldp_chassis_id",
                    "expression": "[0:17]",
                    “equals_any”: [“00:11:22:33:44:55", “00:11:22:33:44:66”, “00:11:22:33:44:77"],
                    "usage": "iot"
                },
                // use RADIUS (WIP)
                {
                    "src": "radius_username",  // or radius_group
                    "expression": "[0:3]",           // "abcdef" -> "abc"
                                  "split(.)[1]",     // "a.b.c" -> "b"
                                  "split(-)[1][0:3], // "a1234-b5678-c90" -> "b56"
                    "equals": "SENSOR"  
                    "usage": "iot"
                },
            ]
        },

        // additional usages can be defined
        "user": {
            "mode": "access",
            "stp_edge": true,
            "stp_required": true,  // default is false. Whether to remain in block state if no BPDU is received
            "stp_disable": true,  // default is false. Drop bridge protocol data units (BPDUs ) that enter any interface or a specified interface. Cannot be set if stp_required is set on the same interface.
            "port_network": "default",

            // 802.1x
            "port_auth": "dot1x",
            "enable_mac_auth": false,
            "mac_auth_only": True, // False by default. This options is accessible when enable_mac_auth is set to true.
            "mac_auth_protocol": "eap-md5",  // eap-md5 (default) / pap / eap-peap 
            "guest_network": null,
            "server_reject_network": "net1"   
            "mac_auth_preferred": false,  // when enable_mac_auth=true and mac_auth_only=false, dot1x will be given priority then mac_auth. Enable this to prefer mac_auth over dot1x. 
            "server_fail_network": "net2" 
            "reauth_interval": 3600, // default is 3600, range: 10-65535
            "bypass_auth_when_server_down": false,
            "bypass_auth_when_server_down_for_unknown_client": false,
            "allow_multiple_supplicants": true // optional, default is false
            "stp_p2p": true // optional, default is false
            "stp_no_root_port": true // optional, default is false

            // other port settings
            "speed": "1g",
            "duplex": "full",
            "disable_autoneg": false,
            "mac_limit": 2,
            "poe_disabled": true,
            "storm_control": {
                "percentage": 80,
                "no_multicast": false,
                "no_unknown_unicast": true,
                "no_broadcast": true,
                "disable_port": true // default is false
            },

            // if dynamic vlan is used, specify the possible networks/vlans RADIUS can return
            "dynamic_vlan_networks": ["corp", "user"],
        },
    },

    // if some system-default port usages are not desired - namely, ap / iot / uplink 
    "disabled_system_defined_port_usages": [ "ap", "iot" ],

    // by default, for any unassigned ports, `default` is assumed, to preserve the factory default behavior
    // you can change it to something else
    "default_port_usage": "disabled",  

    // by default, when we configure a device, we only clean up config we generates
    // we'll remove existing configs if enabled
    "remove_existing_configs": false,   // defualt is false

    "radius_config": {
        "auth_servers_timeout": 5,
        "auth_servers_retries": 3,
        "auth_servers": [
            {
                "host": "1.2.3.4",
                "port": 1812,
                "secret": "testing123"
            },
            {
                "host": "radius.internal",
                "port": 1812,
                "secret": "testing123"
            }
        ],
        "acct_servers": [
            {
                "host": "1.2.3.4",
                "port": 1812,
                "secret": "testing123"
            }
        ],
        "acct_interim_interval": 0,

        // Enable COA. Default is false. When coa_port is not specified, 3799 is the default value.
        “coa_enabled”: true,
        “coa_port”: 3799,

        // which network the RADIUS server resides, if there's static IP for this network,
        // we'd use it as source-ip
        "network": "default"

        // or specifiy "source_ip" directly
        "source_ip": "192.168.3.5"
    },

    "switch_matching": {
        "enabled": true,

        "rules": [
            {
                "name": "match by name",
                "match_name[0:3]": "abc",
                "match_model": "EX4300",

                "port_config": {
                    "ge-0/0/0": {
                        "usage": "uplink"
                    },
                    "ge-0/0/8-16,ge-1/0/0-47": {
                        "usage": "ap"
                    },

                    // this is assumed
                    "*": {
                        "usage": "default"
                    }
                },
                "port_mirroring": {
                    "port_mirror": {
                        "input_port_ids_ingress": ["ge-0/0/4"],
                        "input_networks_ingress": ["test"],
                        "input_port_ids_egress": ["ge-0/0/5", "ge-0/0/6"],
                        "output_port_id": "ge-0/0/3",
                    },
                    "port_mirror_test": {
                        "input_port_ids_ingress": ["ge-0/0/3"],
                        "input_networks_ingress": ["iot"],
                        "input_port_ids_egress": ["ge-0/0/22", "ge-0/0/21"],
                        "output_port_id": "ge-0/0/4",
                    },
                    "port_mirror_test_2": {
                        "ingress_port_ids": ["ge-0/0/11"],
                        "egress_port_ids": ["ge-0/0/12"],
                        "output_ip_address": "1.2.3.4",
                    }
                },
                "stp_config": {
                    "bridge_priority": "8k"
                },

                // additional CLI commands to append if this rule matches
                // NOTE: no check is done
                "additional_config_cmds": [
                    "set snmp community public"
                ]
            },
            {
                "name": "match by role",
                "match_role": "access",

                "port_config": {
                    "ge-0/0/0": {
                        "usage": "uplink"
                    }
                },

                // additional CLI commands to append if this rule matches
                // NOTE: no check is done
                "additional_config_cmds": [
                    "set snmp community public2"
                ]
            }
        ]
    },

    // additional CLI commands to append to the generated config for switches
    // NOTE: no check is done   
    "additional_config_cmds": [
    ],

    // additional CLI commands to append to the generated config for gateways
    // NOTE: no check is done
    // for SRX
    "gateway_additional_config_cmds": [
    ]

    "ospf_areas": {
        "0": {
            "type": "default",  // default (default) / stub / nssa
            "include_loopback": false, // true / false
            "networks": {
                "corp": {
                    "interface_type": "broadcast",  // broadcast (default) / nbma / p2p / p2mp

                    // optional
                    // BFD is enabled when either bfd_minimum_interval or bfd_multiplier is configured
                    "bfd_minimum_interval": none,  // 1-255000 / 350 (default) when bfd_multiplier is configured alone
                    "bfd_multiplier": none,  // 1-255 / 3 (default) when bfd_minimum_interval_is_configured alone
                    "metric": 10000,   // none / 1-65535
                    "hello_interval": 10,  // none / 1-255
                    "dead_interval": 40,   // none / 1-65535
                    "auth_type": "md5",  // none (default) / md5 / password
                    // if auth_type=='md5'
                    "auth_keys": {"1": "auth-key-1"},
                    // if auth_type=='password                     
                    "auth_password": "simple"
                    // by default, we'll re-advertise all learned OSPF routes toward overlay
                    "no_readvertise_to_overlay": false
                    "export_policy": "export_policy",
                    "import_policy": "import_policy"
                },
                "iot": {
                },
                "guest": {
                    "passive": true
                }
            },
        }
    },

    "vrrp_groups": {
        "0": {
            "networks": {
                "data": {
                    "ip": "10.182.96.1", //ip(virtual address) need under the same interface 
                },
                "wap": {
                    "ip": "10.182.102.1",
                },
                "mgmt": {
                    "ip": "10.182.104.1",
                },
                "v10": {
                    "ip": "10.182.104.129",
                }
            },
            // optional
            "auth_type": "md5" / md5 / simple
            // if auth_type=='md5'
            "auth_key": "auth-key-1",
            // if auth_type=='simple'                     
            "auth_password": "simple"
        },
    },

    // vrf
    "vrf_instances": {
        "guest": {
            "networks": [ "guest" ],
            "evpn_auto_lookback_subnet": "100.101.0.0/24", 
            "extra_routes": {
                "0.0.0.0/0": {"via": "192.168.31.1"}
            },
            "aggregate_routes: {
                "192.168.0.0/16": {}
            }
        }
    },

    // remote syslog
    "remote_syslog": {
        "enabled": true,
        "send_to_all_servers": true,
        "network": "default",
        "time_format": "millisecond | year |  year millisecond",
        "archive": {
            "files": 111,
            "size": "5m"
        },
        "cacerts": [
            "-----BEGIN CERTIFICATE-----\nMIIFZjCCA06gAwIBAgIIP61/1qm/uDowDQYJKoZIhvcNAQELBQE\n-----END CERTIFICATE-----",
            "-----BEGIN CERTIFICATE-----\nBhMCRVMxFDASBgNVBAoMC1N0YXJ0Q29tIENBMSwwKgYDVn-----END CERTIFICATE-----"
        ],
        "files": [
            {
                "file": "file-name",
                "match": "!alarm|ntp|errors.crc_error[chan]",
                "contents": [
                    {
                        "facility": "any | authorization | conflict-log | change-log | daemon | dfc | kernel | interactive-commands | ftp | firewall | external | pfe | ntp | security | user",
                        "severity": "any | alert | emergency | critical | warning | info | notice | error"
                    }
                ],
                "archive": {
                    "files": 10,
                    "size": "5m"
                },
                "explicit_priority": true,
                "structured_data": true
            }
        ],
        "servers": [
            {
                "server_name": "dc_syslog_server",
                "host": "syslogd.internal",
                "port": 514,
                "protocol": "udp",
                "facility": "config",
                "severity": "info",
                "tag": ""
                "match": "!alarm|ntp|errors.crc_error[chan]",
                "enable_tls": true,  // only when protocol is tcp
                "contents": [
                    {
                        "facility": "any | authorization | conflict-log | change-log | daemon | dfc | kernel | interactive-commands | ftp | firewall | external | pfe | ntp | security | user",
                        "severity": "any | alert | emergency | critical | warning | info | notice | error"
                    }
                ],
                "explicit_priority": true,
                "structured_data": true
            }
        ],
        "users": [
            {
                "user": "*",
                "match": "!alarm|ntp|errors.crc_error[chan]",
                "contents": [
                    {
                        "facility": "any | authorization | conflict-log | change-log | daemon | dfc | kernel | interactive-commands | ftp | firewall | external | pfe | ntp | security | user",
                        "severity": "any | alert | emergency | critical | warning | info | notice | error"
                    }
                ]
            }
        ],
        "console": {
            "contents": [
                {
                    "facility": "any | authorization | conflict-log | change-log | daemon | dfc | kernel | interactive-commands | ftp | firewall | external | pfe | ntp | security | user",
                    "severity": "any | alert | emergency | critical | warning | info | notice | error"
                }
            ]
        }
    },

    //
    // gateway related
    //

    // skyatp
    "skyatp": {
        "enabled": true,

        // optional
        "send_ip_mac_mapping": true,  // whether to send IP-MAC mapping to SkyATP 
    },

    // paloalto firewall config
    "paloalto_networks": {
        "send_mist_nac_user_info": true,
        "gateways": [
            {
                "api_url": "https://23.43.12.78:8443",
                "api_key": "5abf7c8a-1a1c-4398-ba2d-b0c297094d1a"
            }
        ]
    },

    // juniper srx firewall config
    "juniper_srx": {
        "send_mist_nac_user_info": true,
        "gateways": [
            {
                "api_url": "https://23.43.12.78:8443"
                "api_username": "john_doe",
                "api_password": "abc@123"
            }
        ]
    },

    // t128 ssr
    "ssr": {
        "conductor_hosts": [ "1.1.1.1", 2.2.2.2" ],
        "conductor_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwc2siOiIxMj",
        "disable_stats": false,
        "proxy": {
              "url": "http://proxy.internal:8080/"
        }
    },

    "gateway_mgmt": {
        // for SRX
        "root_password": "4Ww6r&bzJQh#bm%uEU",

        // for SSR, as direct root access is not allowed
        "admin_sshkeys": [
            "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA...Wxa6p6UW0ZbcP john@host"
        ],

        "disable_console": false,  // for both SSR and SRX disable console port
        "disable_oob": false,  // for both SSR and SRX disable management interface
        "disable_usb": false,  // for SSR and SRX3xx disable usb interface
        // consumes uplink bandwidth, requires WA license
        "app_usage": false,
        "security_log_source_address": "192.168.1.1",
        "security_log_source_interface":"ge-0/0/1.0",
        "probe_hosts": ["8.8.8.8"],
        "probe_hostsv6": ["2001:4860:4860::8888"],
        "app_probing": {
            "enabled": true,
            "apps": [ "facebook" ],  // keys from /const/applications
            "custom_apps": [
                {
                    "name": "pos_app",
                    "protocol": "http", // http (default) / icmp
                    "hostnames": [ "www.abc.com" ], // when protocol is http, optional
                    "url": "www.abc.com", // when protocol is http, optional
                    "app_type": "",  // 
                    "address": "192.168.1.1", // when protocol is icmp
                    "network": "lan", // optional
                    "vrf_name": "lan" // optional
                }
            ]
        },

        # signauture update for 
        "auto_signature_update": {
            "enable": true,  // default is true
            "time_of_day": "11:30",  // optional, Mist will decide the timing
            "day_of_week": "sun"  // optional, daily if omitted
        },

        // the rollback timer for commit confirmed. Default is 10, valid range should be 1-30.
        "config_revert_timer" : 10,

        // restrict inbound-traffic to host  (draft)
        "protect_re": {
            "enabled": true
            // when enabled, all traffic that is not essential to our operation will be dropped
            // e.g. ntp / dns / traffic to mist will be allowed by default
            //      if dhcpd is enabled, we'll make sure it works

            // optionally, host/subnets we'll allow traffic to/from
            "trusted_hosts": ["10.242.3.0/24"] 

            // optionally, services we'll allow
            "allowed_services": ["icmp", "ssh"],

            // optionally, custom acls
            "custom": [
                {
                    "subnets": ["10.1.2.0/24"],
                    "protocol": "tcp",  // tcp / udp / icmp / any (default)
                    "port_range": "80,1035-1040",  // matched dst port, "0" means any, default is "0"
                }
            ]
        },
        "fips_enabled": true // default is false
    },    

    // when Templates are not used, Site Setting holds settings for multiple device types and they can differ
    // to set device-type specific configs, use this
    // whatever is defined under `switch/gateway` will overwrite/shadow the one at root-level
    "switch": {
        // same as above

        // auto_upgrade is only performed first time the device is onboarded for now
        "auto_upgrade": {
            "enabled": true,
            "snapshot": true, // default is false
            "custom_versions": {
                "QFX5130-32CD": "23.4R2-S2.3",
                "QFX5120-32C": "23.4R2-S2.1",
            }
        }
    },

    "gateway": {
        // same as above
    },


    //
    // mxedge/mxtunnel related related
    //

    "mxtunnel": {
        "enabled": false,

        // default mxtunnel
        "vlan_ids": [3, 5, 6, "7-9"],
        "ap_subnets": "0.0.0.0/0",  // optional, as this is hosted on-premises
        "protocol": "udp",
        "mtu": 1100,

        "hello_interval": 60,
        "hello_retries": 3,

        // for AP, how to connect to tunterm or radsecproxy
        "clusters": [
            {
                "name": "primary",
                "tunterm_hosts": ["mxedge1", "mxedge2.local"],
            }
        ],

        "auto_preemption": {
            "enabled": true,
            "time_of_day": "12:00",
            "day_of_week": "sun"
        },

        "additional_mxtunnels" {
            "guest": {
                "vlan_ids": [300, 310, 320],
                "protocol": "udp",
                "mtu": 1100,
                "clusters": [
                    {
                        "name": "primary",
                        "tunterm_hosts": ["mxedge_guest"],
                    }
                ],
                "hello_interval": 60,
                "hello_retries": 3,
            }
        }
    },

    "tunterm_multicast_config": {
        "mdns": {
            "enabled": true,
            "vlan_ids": [2, 3, 5]
        },
        "ssdp": {
            "enabled": true,
            "vlan_ids": [2, 3, 5]
        },
        "multicast_all": true
    },

    "mxedge": {
        "radsec": {
            // site mist edges form a cluster of radsecproxy servers
            // see "radsec" under api/v1/docs/Org#mist-edge-cluster for schema
            "additional_radsecs": {
                "guest": {
                    // see "radsec" under api/v1/docs/Org#mist-edge-cluster for schema
                }
            }
        },        

        "mist_das": {
            // site mist edges form a cluster of cloud-assisted dynamic authorization servers
            // see "mist_das" under api/v1/docs/Org#mist-edge-cluster for schema
        },

        // mist_nac
        "mist_nac": {
            "enabled": true,
            "secret": "testing123",

            "client_ips": {
                "10.0.3.0/24": {

                    // convention to be followed is : "<vendor>-<variant>"
                    // <variant> could be an os/platform/model/company
                    // for ex: for cisco vendor, there could variants wrt
                    // os (such as ios, nxos etc), platforms (asa etc),
                    // or acquired companies (such as meraki, airnonet) etc.
                    //
                    // currentluy supported vendor values are:
                    // generic, juniper, aruba, paloalto,
                    // cisco-aironet, cisco-ios, cisco-meraki

                    "vendor": "cisco-ios",
                    "secret": "alternative_one",  // optional, if different from above
                    // "site_id" is implicit
                }
            },
            "auth_server_port": 1812,  // optional, default is 1812
            "acct_server_port": 1813,  // optional, default is 1813
        },

        // nacedge
        "mist_nacedge": {
            "enabled": true,
            "auth_ttl": 86400,              // cache of last auth result; in seconds,
                                            // 60-2592000; default is 604800
            "default_vlan": "testVlan",     // Default vlan to assign for devices
                                            // not in the cache
            "default_dot1x_vlan": "20",     // default vlan for all dot1x devices,
                                            // if different from default_vlan
            "mxedge_hosts": ["mxedge1.local"] // list of NAC Edges in this site
        },
    },

    "mxedge_mgmt": {
        "mist_password": "MIST_PASSWORD",
        "root_password": "ROOT_PASSWORD",
        "fips_enabled": true, // default is false
        "oob_ip_type": "disabled",  // dhcp (default) / disabled
        "oob_ip_type6": "disabled", // autoconf (default) / dhcp / disabled
        "config_auto_revert": true, // default is false
    },

    "tunterm_monitoring_disabled": false,
    "tunterm_monitoring": [
        {
            "protocol": "ping",   // arp / ping / tcp
            "host": "10.2.8.15",  // can be ip, ipv6, hostname
            "timeout": 300,  // 60 - 3600, default is 300

            // when protocol==tcp
            "port": 80
        }
    ],

    // marvis
    "marvis": {
        "auto_operations": {
            // default are all false
            "bounce_port_for_abnormal_poe_client": false,
            "disable_port_when_rogue_dhcp_server_detected": false,
            "disable_port_when_ddos_protocol_violation": false
        }
    }
}

Get Site Setting Derived

GET /api/v1/sites/:site_id/setting/derived

Response

{
   // ... same as /setting


  // exposed from orgs

  "zoom_accounts": [
    {
      "last_sync": 1738119600,
      "last_status": "failed",
      "account_id": "123451111",
      "errors": ["OAuth token refresh failed, please re-link your account"]
    }
  ],
  "zoom_qss_accounts": [
    {
      "last_sync": 1738129500,
      "last_status": "success",
      "account_id": "123453333",
    }
  ],
  "teams_accounts": [
    {
      "last_sync": 1738119600,
      "last_status": "success",
      "account_id": "aaaaaaaa-1bed-4a49-9fd6-123456789012"
    }
  ],
  "prisma_accounts": [
      {
        "tsg_id": "1899598553",
        "account_id": "171be693-8cd4-41f2-bac8-93b77b6a9c39",
        "service_account_name": "mist-integration@18995xxxx",
        "region": "americas",
        "cloud_name": "api.sase.paloaltonetworks.com",
        "service_connections": {
             "MCD_LAB_SC_1": {
                  "region": "us-southwest"
             }
        },
        // regions configured under this account
        "regions": {
             "us-southwest": {
                  "allocated_bandwidth": 50 // Mbps
             }
        }
      }
  ]
}

Definitions

Name Type Description
analytic.enabled boolean enable Advanced Analytic feature, default is false (using SUB-ANA license)
app_waking boolean default is false
auto_upgrade object auto upgrade
auto_upgrade_esl object auto upgrade AP ESL. When both firmware and ESL auto-upgrade are enabled, ESL upgrade will be done only after firmware upgrade
auto_upgrade_linecard boolean auto upgrade linecards (JUNOS), default is true
bandwidth int channel width for the band, 20 / 40 / 80 / 160, 80 is only applicable for band_5, 160 is only for band_6
ble_config object BLE config (see Site:BLE Config)
ble object BLE asset settings
brightness int 0-255, default is 255
channel int (primary) channel for the band, 0 means auto
channels list list of channels, null or empty array means auto
occupancy object occupancy settings
zone-occupancy-alert object zone occupancy alert settings
device_updown_threshold int enable threshold-based device down delivery via 1) device-updowns webhooks topic, 2) Mist Alert Framework; e.g. send AP/SW/GW down event only if AP/SW/GW Up is not seen within the threshold in minutes; 0 - 240, default is 0 (trigger immediate)
ap_updown_threshold int enable threshold-based device down delivery for AP devices only. When configured it takes effect for AP devices and device_updown_threshold is ignored.
gateway_updown_threshold int enable threshold-based device down delivery for Gateway devices only. When configured it takes effect for GW devices and device_updown_threshold is ignored.
switch_updown_threshold int enable threshold-based device down delivery for Switch devices only. When configured it takes effect for SW devices and device_updown_threshold is ignored.
bgp_neighbor_updown_threshold int enable threshold-based bgp neighbor down delivery.
vpn_peer_updown_threshold int enable threshold-based vpn peer down delivery.
vpn_path_updown_threshold int enable threshold-based vpn path down delivery.
flags list name/val pair objects for location engine to use
hello_interval float in seconds, used as heartbeat to detect if a tunnel is alive. AP will try another peer after missing N hellos specified by hello_retries. between 1 and 300, default is 60 seconds
hello_retries int between 2 and 30, default is 7
led.enabled boolean whether to enable LED, default is true
led object LED control
model_specific object overwrites for a specific model. If a band is specified, it will shadow the default.
config_auto_revert boolean whether to enable ap auto config revert, default is false
mxtunnel.mtu int 552-1500, default is 0
mxtunnel.auto_preemption object schedule to preempt ap’s which are not connected to preferred peer
tunterm_multicast_config object tunterm multicast configs
ntp_servers list list of NTP servers
persist_config_on_device boolean whether to store the config on AP, default is false
power_max int when power=0, min tx power to use, HW-specific values will be used if not set
power_min int when power=0, min tx power to use, HW-specific values will be used if not set
power int tx power of the radio, null or 0 means auto, when power_min=power_max=power=0 to indicate power=0
preamble string short / long / auto, default is short
proxy object Proxy Configuration for APs and Site Edges to talk to Mist
radio_config object site RF settings
remote_syslog object syslog parameters
report_gatt boolean default is false; whether AP should periodically connect to BLE devices and report GATT device info (device name, manufacturer name, serial number, battery %, temperature, humidity)
rogue object rogue detection parameters
rtsa object managed mobility
ssh_keys list when limit_ssh_access = true in Org Setting, list of SSH public keys provided by Mist Support to install onto APs (see Org:Setting)
track_anonymous_devices boolean default is false; whether to track anonymous BLE assets (requires ‘track_asset’ enabled)
track_asset boolean enable Asset Tracking, default is false (using SUB-AST license)
vars object a dictionary of name->value, values should only be strings. The vars can then be used for Device config generation
wifi object managed connectivity

Occupancy settings

Name Type Description
assets_enabled boolean indicate whether named BLE assets should be included in the zone occupancy calculation, default is false
sdkclients_enabled boolean indicate whether SDK clients should be included in the zone occupancy calculation, default is false
clients_enabled boolean indicate whether connected WiFi clients should be included in the zone occupancy calculation, default is true
unconnected_clients_enabled boolean indicate whether unconnected WiFi clients should be included in the zone occupancy calculation, default is false
min_duration int minimum duration, default is 3000

Zone Occupancy Alert Parameters

Name Type Description
enabled boolean indicate whether zone occupancy alert is enabled for the site, default is false
threshold int sending zone-occupancy-alert webhook message only if a zone stays non-compliant (i.e. actual occupancy > occupancy_limit) for a minimum duration specified in the threshold, in minutes, 0 - 30, default is 5 minutes
email_notifiers array of strings list of email addresses to send email notifications when the alert threshold is reached

WiFi settings

Name Type Description
enabled boolean enable WIFI feature, default is true (using SUB-MAN license)
enable_arp_spoof_check boolean when proxy_arp is enabled, check for arp spoofing. default is false
vna.enabled boolean enable Virtual Network Assistant, default is false (using SUB-VNA license)
proxy_arp string default / enabled / disabled
locate_unconnected boolean whether to locate unconnected clients, default is false
mesh_enabled boolean whether to enable Mesh feature for the site, default is false
mesh_allow_dfs boolean whether to allow Mesh to use DFS channels, default is false. For DFS channels, Remote Mesh AP would have to do CAC when scanning for new Base AP, which is slow and will distrupt the connection. If roaming is desired, keep it disabled.
mesh_enable_crm boolean used to enable/disable CRM
mesh_ssid string optional ssid of mesh networking, default is based on site_id
mesh_psk string optional passphrase of mesh networking, default is generated randomly
disable_11k boolean whether to disable 11k, default is false
enable_unii_4 boolean whether to enable U-NII-4 band (channels 169, 173, 177), default is false

Remote Syslog Parameters

Name Type Description
enabled boolean whether or not remote syslog is enabled
send_to_all_servers boolean whether or not send syslog to all servers
servers list list of syslog servers
host string host to which syslog is sent
server_name string server to which syslog is sent
protocol string udp / tcp, protocol to use for remote syslog, default is udp
port int port on which to connect to host for syslog, default is 514 if protocol=udp, 6514 if protocol=tcp
facility string kern / user / mail / daemon / auth / syslog / lpr / news / uucp / cron / authpriv / ftp / ntp / security / console / solaris-cron / local0 - local7, default is config
severity string emerg / alert / crit / err / warning / notice / info / debug, default is info
tag string optional, tag to attach to log record

Rogue Detection Parameters

Name Type Description
enabled boolean whether or not rogue detection is enabled
honeypot_enabled boolean whether or not honeypot detection is enabled
min_rssi int minimum RSSI for an AP to be considered neighbor (ignoring APs that’s far away), default is -80. Minimum allowed value is -85.
min_duration int minimum duration for a bssid to be considered neighbor, maximum is 59, default is 10
min_rogue_rssi int minimum RSSI for an AP to be considered rogue, default is -80. Minimum allowed value is -85.
min_rogue_duration int minimum duration for a bssid to be considered rogue, maximum is 59, default is 10
whitelisted_ssids list list of SSIDs to whitelist
whitelisted_bssids list list of BSSIDs to whitelist
allowed_vlan_ids list list of VLAN IDs on which rogue APs are ignored

Auto Upgrade Parameters

Name Type Description
enabled boolean whether auto upgrade should happen, default is false (Note that Mist may auto-upgrade if the version is not supported)
version string desired version, beta / stable / custom, default is stable
time_of_day string any / HH:MM (24-hour format), upgrade will happen within up to 1-hour from this time
day_of_week string any / mon / tue / wed / thu / fri / sat / sun
custom_versions object custome versions for different models

Engagement Parameters

Name Type Description
dwell_tags object add tags to visits within the duration (in seconds), available tags (passerby, bounce, engaged, stationed)
max_dwell int max time, default is 43200(12h), max is 68400 (18h)
min_dwell int min time, default is 0.
hours object hours of operation filter, the available days (mon, tue, wed, thu, fri, sat, sun). Note: If the dow is not defined then it’s treated as 00:00-23:59.

NOTE: if hours does not exist, it’s treated as everyday of the week, 00:00-23:59. Currently we don’t allow multiple ranges for the same day

NOTE: default values for dwell_tags: passerby (1,300) bounce (301, 14400) engaged (14401, 28800) stationed (28801,

42000)

NOTE: default values for dwell_tag_names: passerby = “Passerby”, bounce = “Visitor”, engaged = “Associates”, stationed = “Assets”

WIDS

Name Type Description
threshold int count of events to trigger
duration int window where a trigger will be detected and action to be taken (in seconds)

Mist Tunnel

Name Type Description
hosts list hostnames or IPs where a Mist Tunnel will use as the Peer (i.e. they are reachable from AP)
ap_subnets list list of subnets where we allow AP to establish Mist Tunnels from
protocol list udp / ip, default is udp
vlan_ids list list of vlan ids/ranges that will be used
hello_interval float in seconds, used as heartbeat to detect if a tunnel is alive. AP will try another peer after missing N hellos specified by hello_retries. between 1 and 300, default is 60 seconds
hello_retries int between 2 and 30, default is 7

Auto Preemption Parameters

Name Type Description
enabled boolean whether auto preemption should happen, default is false
time_of_day string any / HH:MM (24-hour format)
day_of_week string any / mon / tue / wed / thu / fri / sat / sun

Some important / cmmmon properties describing the network topology are captured in the following sections.

NOTE: names of networks or port_usages can only use a-z, 1-9, _, -, . and up to 32 characters

Networks

A network represents a network segment. It can either represent a VLAN (then usually ties to a L3 subnet), optionally associate it with a subnet which can later be used to create addition routes. Used for ports doing family ethernet-switching It can also be a pure L3-subnet that can then be used against a port that with family inet.

Name Type Description
vlan_id int vlan the network is on. Usually used by port_usage that does switching
subnet string subnet in CIDR format for the network. Optional for a switch port.
Port Usage
Name Type Description
description string description
mode string access (default) / trunk
disabled bool whether the port is disabled, default is false
all_networks bool if mode=trunk, whether to trunk all network/vlans, default is false
networks list if mode=trunk, the list of network/vlans
port_network string native network/vlan for untagged traffic
stp_edge string when enabled, the port is not expected to receive BPDU frames
server_reject_network string when radius server reject / fails
mac_auth_preferred bool sets the order of authenticator.
server_fail_network string sets server fail fallback vlan
voip_network string network/vlan for voip traffic, must also set port_network. to authenticate device, set port_auth
port_auth string if dot1x is desired, set to dot1x
enable_mac_auth bool if port_auth=dot1x, whether to enable MAC Auth
mac_auth_only bool if enable_mac_auth is set to True, this option is used to restrict authentication to use mac radius only. This will take priority over mac_auth_preferred.
mac_auth_protocol bool if enable_mac_auth is set to True, this enables users to choose an authentication protocol among pap, eap-peap, and eap-md5. This type is ignored if mist_nac is enabled.
guest_network string if port_auth=dot1x, which network to put the device into if the device cannot do dot1x. default is null (i.e. not allowed)
reauth_interval int if port_auth=dot1x, reauthentication interval range: 10-65535, default is 3600
bypass_auth_when_server_down bool if port_auth=dot1x, bypass auth for known clients if set to true when RADIUS server is down
bypass_auth_when_server_down_for_unknown_client bool if port_auth=dot1x, bypass auth for all (including unknown clients) if set to true when RADIUS server is down,
speed string speed, default is auto to automatically negotiate speed
duplex string link connection mode, choices are auto (default), full, and half
disable_autoneg bool if speed and duplex are specified, whether to disable autonegotiation, default is false
mac_limit int max number of mac addresses, default is 0 for unlimited, otherwise range is 1 or higher, with upper bound constrained by platform
persist_mac bool if mode=access and port_auth!=dot1x, whether the port should retain dynamically learned MAC addresses, default is false
poe_disabled bool whether PoE capabilities are disabled for a port, default is false
storm_control object storm-control-profile settings
mtu int media maximum transmission unit (MTU) is the largest data unit that can be forwarded without fragmentation. The default value is 1514.
enable_qos bool whether QoS is enabled, default is false. When QoS is enabled, the default QoS setting is applied.
allow_dhcpd bool whether DHCP server is allowed on the interfaces with. All the interfaces from
port configs using this port usage are effected. Please notice that allow_dhcpd is a tri-state.
When it is not defined, it means using the system’s default setting which depends on whether the port is a access or trunk port
Storm Control
Name Type Description
percentage int bandwidth-percentage, configures the storm control level as a percentage of the available bandwidth, default is 80
no_broadcast bool whether to disable storm control on broadcast traffic, default is false
no_unknown_unicast bool whether to disable storm control on unknown unicast traffic, default is false
no_multicast bool whether to disable storm control on multicast traffic, default is false
no_registered_multicast bool whether to disable storm control on registered multicast traffic, default is false
disable_port bool whether to enable action-shutdown when the storm control level is exceeded, default is false
Switch Matching

In many scenarios, people have conventions like having port ge-0/0/0 as uplink, ge-0/0/5-42 for user devices, … for many switches in the same site. While it’s achievable by doing Switch Config on each of them, switch_matching allows them to use same setting by matching name/model/role.

Supported attributes: port_config, ip_config, oob_ip_config, uplink_port_config, additional_config_cmds

Dynamic Port Config Parameters
Name Type Description
lldp_chassis_id string MAC address of LLDP neighbor
lldp_system_name string system name of LLDP neighbor
lldp_serial_number string Serial number of LLDP neighbor
lldp_hardware_revision string Hardware revision of LLDP neighbor
lldp_manufacturer_name string The manufacturer of LLDP neighbor
lldp_oui string The OUI of LLDP neighbor
radius_username string The username of the connected supplicant.
radius_usermac string The MAC address of the connected supplicant.
radius_dynamicfilter string User policy filter sent by the RADIUS server.
link_peermac string MAC address of the device directly connected to a port.
Switch and Gateway OSPF Areas

OSPF Areas can be configured both in Site Level (Switch/Gateway Template) or Device (Switch/Gateway) Level

Name Type Description
ospf_areas object OSPF areas, key is the area id
type string OSPF type, default (default) / stub / nssa
networks object networks to participate in an OSPF area, key is the network name
passive' bool whether to send OSPF-Hello, default is false
auth_type string auth type, none (default) / md5 / password
auth_keys object if auth_type==’md5’, the md5 keys
auth_password string if auth_type==’password’, the password, max length is 8
interface_type string interface type, broadcast / nbma (non-broadcast multi-access) / p2p / p2mp, default is broadcast

Create Site Whitelist/Blacklist Client List

This endpoint is to provide list of client macs for annotation as whitelist, blacklist or watched station.

Retrieve the current clients list from ‘whitelist_url’, blacklist_url, or watched_station_url under Site:Setting

POST /api/v1/sites/:site_id/setting/blacklist
POST /api/v1/sites/:site_id/setting/whitelist
POST /api/v1/sites/:site_id/setting/watched_station

Example

{
    "macs": [
        "18-65-90-de-f4-c6",
        "84-89-ad-5d-69-0d"
    ]
}

Delete Site Whitelist/Blacklist/Watched Station Clients

This is to remove the client annotation list

DELETE /api/v1/sites/:site_id/setting/blacklist
DELETE /api/v1/sites/:site_id/setting/whitelist
DELETE /api/v1/sites/:site_id/setting/watched_station

UI Setting

Site UI settings

GET /api/v1/sites/:site_id/uisettings
POST /api/v1/sites/:site_id/uisettings

GET /api/v1/sites/:site_id/uisettings/:uisetting_id
PUT /api/v1/sites/:site_id/uisettings/:uisetting_id
DELETE /api/v1/sites/:site_id/uisettings/:uisetting_id

Response

{
    {
        "isScopeLinked": true,
        "defaultScopeId": "67970e46-4e12-11e6-9188-0242ad112847",
        "name": "New Databoard",
        "defaultScopeType": "site",
        "isCustomDataboard": true,
        "isTimeRangeLinked": true,
        "tiles": [
            {
                "sortedColumns": null,
                "rowspan": 2,
                "chartBand": "2.4 ghz",
                "name": "New Analysis",
                "column": 1,
                "colspan": 5,
                "metric": {
                    "apiName": "client-dhcp-latency"
                },
                "timeRange": {
                    "end": 1508823743,
                    "name": "Past 7 Days",
                    "interval": "1d",
                    "start": 1508223600,
                    "usePreset": true,
                    "endDate": "10/23/2017",
                    "shortName": "7d"
                },
                "chartDirection": "tx + rx",
                "chartRankBy": "",
                "scopeType": "client",
                "hideEmptyRows": true,
                "scopeId": "e0c767834b4c",
                "chartType": "timeSeries",
                "vizType": "averageTimeSeriesChart",
                "row": 1,
                "trendType": "line",
                "id": "7a9ab38c-cfc3-483d-b51a-0aec571fadc0-j956nurl",
                "chartColor": "#00B4AD"
            }
        ],
        "defaultTimeRange": {
            "end": 1508828400,
            "name": "This Week",
            "interval": "1d",
            "start": 1508655600,
            "usePreset": true,
            "endDate": "10/23/2017",
            "shortName": "thisWeek"
        },
        "description": "Description of the databoard",
        "id": "3bdcc7e8-c04d-4512-b4fc-093da9057eb0",
        "for_site": true,
        "site_id": "67970e46-4e12-11e6-9188-0242ad112847",
        "org_id": "6748cfa6-4e12-11e6-9188-0242asfad8365",
        "created_time": 1508823803,
        "modified_time": 1508823803,
        "purpose": "databoard"
    },

}

GET derived UI Setting

Get both site UI settings(for_site=true) and org UI settings (for_site=false)

GET /api/v1/sites/:site_id/uisettings/derived

Get License Usage

This shows license usage (i.e. needed) based on the features enabled for the site.

GET /api/v1/sites/:site_id/licenses/usages

Response

{
    "usages": {
        "SUB-MAN": 60
        "SUB-LOC": 30
    },
    "org_entitled": {
        "SUB-MAN": 60
        "SUB-LOC": 30
    },
    "trial_enabled": false,
    "vna_ui": false,
    "vna_eligible": false,
    "svna_eligible": false,
    "wvna_eligible": false
}

Definitions

Name Type Description
usages object subscriptions and their quantities
org_entitled object license entitlement for the entire org
vna_ui object if True, Conversational Assistant and Marvis Action available
vna_eligible boolean eligibility for the AP/Client SLE
svna_eligible boolean eligibility for the Switch SLE
wvna_eligible boolean eligibility for the WAN SLE

Get OtherDevice

This API is called to view the other devices (3rd party devices) for a specific site.

GET /api/v1/sites/:site_id/otherdevices?vendor=:vendor

Response

[
    {
        "vendor" : "cradlepoint",
        "mac" : "5c5b35000018",
        "serial" : "FXLH2015150025",
        "model" : "AP41",
        "name" : "hallway",
        "site_id" : "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
        "device_mac" : "001122334455"
    }
]

Definitions

Name Type Description
vendor string the vendor
mac string the mac address
serial string the device’s serial number
model string the model of the device
name string the name of the device
site_id string the site id where the device is located
device_mac string the device mac

Webhooks

Webhook defines a webhook, modeled after github’s model (https://developer.github.com/webhooks/) See available webhook topic definitions in GET /api/v1/const/webhook_topics

Base URI

/api/v1/sites/:site_id/webhooks

Example of http-post Webhook

{
    "name": "analytic",
    "type": "http-post",
    "url": "https://username:password@hooks.abc.com/uri/...",
    "secret": "secret",
    "headers":{
        "x-custom-1": "your_custom_header_value1",
        "x-custom-2": "your_custom_header_value2"
    },
    "verify_cert": false,
    "enabled": true,
    "topics": [
        "alarms",
        "asset-raw-rssi",
        "audits",
        "client-info",
        "client-join",
        "client-latency",
        "client-sessions",
        "device-events",
        "device-updowns",
        "guest-authorizations",
        "location",
        "location-asset",
        "location-client",
        "location-sdk",
        "location-unclient",
        "location-centrak"
        "mxedge-events",
        "nac-accounting",
        "nac-events",
        "occupancy-alerts",
        "rssizone",
        "sdkclient-scan-data",
        "site-sle",
        "vbeacon",
        "zone",
    ],
    "single_event_per_message": false,
    "assetfilter_ids": [
        "e06ecc2a-e75b-49bb-b9ea-b0e650cc8072",
        "0d04d6be-8a00-48c6-ae79-38ff14450098",
        "a73b4be2-66ea-4951-aa6c-9e63e1a3635f",
    ]
}

Example of Splunk Webhook

{

    "name": "splunk-mist-alarms",
    "type": "splunk",
    "url": "https://my.splunk.host:8088/services/collector",
    "splunk_token": "7d34bcab-7d3d-49d8-adcf-67747e1f3704",
    "verify_cert": false,
    "enabled": true,
    "single_event_per_message": false,
    "topics": [ "location", "zone", "vbeacon", "rssizone]
}

Parameters

Name Type Description
name string name of the webhook
enabled boolean whether webhook is enabled
topics list list of subscribed topics: alarms/asset-raw/audits/client-info/client-join/client-latency/client-sessions/device-events/device-updowns/guest-authorizations/location/mxedge-events/nac-accounting/nac-events/occupancy-alerts/rssizone/sdkclient-scan-data/vbeacon/zone
type string http-post (default) / splunk / oauth2
url string url
verify_cert boolean when url uses HTTPS, whether to verify the certificate, default is true
headers object optional, when type=http-post, if provided, additional custom HTTP headers will be added. the headers name and value must be string, total bytes of headers name and value must be less than 1000
secret string optional, when type=http-post, if provided, additional signature HTTP headers will be added (see note below)
splunk_token string splunk token, required when type=splunk (If splunk_token is not defined for a type Splunk webhook, it will not send, regardless if the webhook receiver is configured to accept it.)
oauth2_grant_type string client_credentials / password, required when type=oauth2 (see note below)
oauth2_token_url string required when type=oauth2
oauth2_client_id string required when oauth2_grant_type=client_credentials
oauth2_client_secret string required when oauth2_grant_type=client_credentials
oauth2_username string required when oauth2_grant_type=password
oauth2_password string required when oauth2_grant_type=password
oauth2_scopes list optional, when type=oauth2, if provided, will be used in the token request
single_event_per_message boolean optional. default is false. sometimes it’s not trivial/possible to parse multiple events from a single message (e.g. IBM Qradar, DSM), when enabled, only a single event will be sent per message. this feature is only available on certain topics - const/webhook_topics
assetfilter_ids list list of ids to associated asset filters. These filters will be applied to messages routed to a filtered-asset-rssi webhook

NOTE: * when secret is provided, two HTTP headers will be added: - X-Mist-Signature-v2: HMAC_SHA256(secret, body) - X-Mist-Signature: HMAC_SHA1(secret, body) * If headers format is invalid, “X-Mist-Error”: “headers format invalid” will be sent. * If total bytes of headers exceed 1000, “X-Mist-Error”: “headers too big” will be sent. * If any header value is not string, “X-Mist-Error”: “header[%s] not a string” will be sent. * For oauth2_grant_type, Client Credentials Grant (client_credentials) and Resource Owner Password Credentials Grant (password) are supported. * client-latency is supported only to customers who have sufficient SUB-VNA license.

Example Delivery of Location via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "location",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "x": 13.5,
            "y": 3.2,
            "timestamp": 1461220784,

            // for SDK client
            "type": "sdk",
            "id": "de87bf9d-183f-e383-cc68-6ba43947d403",
            "name": "optional",

            // for WIFI
            "type": "wifi",
            "mac": "5684dae9ac8b",
            // Optional for wifi
            "wifi_beacon_extended_info": [
                {"frame_ctrl": 776, "seq_ctrl": 772, "payload": "............"},
            ]

            // for ASSET
            "type": "asset",
            "mac": "7fc2936fd243",
            "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
            "ibeacon_major": 13,
            "ibeacon_minor": 138,
            "eddystone_uid_namespace": "2818e3868dec25629ede",
            "eddystone_uid_instance": "5c5b35000001",
            "eddystone_url_url": "https://www.abc.com",
            "mfg_company_id": 935,
            "mfg_data": "648520a1020000",

            "battery_voltage": 3370
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
id string unique id of the client (a client would have different id for different org)
map_id string map id
x float x, in meter
y float y, in meter
name string name of the client, may be empty
timestamp int timestamp of the event, epoch
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
wifi_beacon_extended_info list optional, list of extended beacon info packets heard from the client, frame and sequence control included with the payload
frame_ctrl int subfield of wifi_beacon_extended_info. frame control field of 802.11 header
seq_ctrl int subfield of wifi_beacon_extended_info. sequence control field of 802.11 header
payload string subfield of wifi_beacon_extended_info. Extended Info Payload associated with frame

Example Delivery of Location Asset via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "location-asset",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "x": 13.5,
            "y": 3.2,
            "timestamp": 1461220784,

            // for ASSET
            "type": "asset",
            "mac": "7fc2936fd243",
            "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
            "ibeacon_major": 13,
            "ibeacon_minor": 138,
            "eddystone_uid_namespace": "2818e3868dec25629ede",
            "eddystone_uid_instance": "5c5b35000001",
            "eddystone_url_url": "https://www.abc.com",
            "mfg_company_id": 935,
            "mfg_data": "648520a1020000",

            "battery_voltage": 3370
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
id string unique id of the client (a client would have different id for different org)
map_id string map id
x float x, in meter
y float y, in meter
name string name of the client, may be empty
timestamp int timestamp of the event, epoch

Example Delivery of Location Client via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "location-client",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "x": 13.5,
            "y": 3.2,
            "timestamp": 1461220784,

            // for WIFI
            "type": "wifi",
            "mac": "5684dae9ac8b",
            // Optional for wifi
            "wifi_beacon_extended_info": [
                {"frame_ctrl": 776, "seq_ctrl": 772, "payload": "............"},
            ]
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
id string unique id of the client (a client would have different id for different org)
map_id string map id
x float x, in meter
y float y, in meter
name string name of the client, may be empty
timestamp int timestamp of the event, epoch
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
wifi_beacon_extended_info list optional, list of extended beacon info packets heard from the client, frame and sequence control included with the payload
frame_ctrl int subfield of wifi_beacon_extended_info. frame control field of 802.11 header
seq_ctrl int subfield of wifi_beacon_extended_info. sequence control field of 802.11 header
payload string subfield of wifi_beacon_extended_info. Extended Info Payload associated with frame

Example Delivery of Location SDK via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "location-sdk",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "x": 13.5,
            "y": 3.2,
            "timestamp": 1461220784,

            // for SDK client
            "type": "sdk",
            "id": "de87bf9d-183f-e383-cc68-6ba43947d403",
            "name": "optional",
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
id string unique id of the client (a client would have different id for different org)
map_id string map id
x float x, in meter
y float y, in meter
name string name of the client, may be empty
timestamp int timestamp of the event, epoch

Example Delivery of Location Unconnected Client via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "location-unclient",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "x": 13.5,
            "y": 3.2,
            "timestamp": 1461220784,

            // for WIFI
            "type": "wifi",
            "mac": "5684dae9ac8b",
            // Optional for wifi
            "wifi_beacon_extended_info": [
                {"frame_ctrl": 776, "seq_ctrl": 772, "payload": "............"},
            ]
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
map_id string map id
x float x, in meter
y float y, in meter
timestamp int timestamp of the event, epoch
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
wifi_beacon_extended_info list optional, list of extended beacon info packets heard from the client, frame and sequence control included with the payload
frame_ctrl int subfield of wifi_beacon_extended_info. frame control field of 802.11 header
seq_ctrl int subfield of wifi_beacon_extended_info. sequence control field of 802.11 header
payload string subfield of wifi_beacon_extended_info. Extended Info Payload associated with frame

Example Delivery of Location Centrak via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "location-centrak",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "x": 13.5,
            "y": 3.2,
            "timestamp": 1461220784,

            // for WIFI
            "type": "wifi",
            "mac": "5684dae9ac8b",
            // Optional for wifi
            "wifi_beacon_extended_info": [
                {"frame_ctrl": 776, "seq_ctrl": 772, "payload": "............"},
            ]
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
map_id string map id
x float x, in meter
y float y, in meter
timestamp int timestamp of the event, epoch
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
wifi_beacon_extended_info list optional, list of extended beacon info packets heard from the client, frame and sequence control included with the payload
frame_ctrl int subfield of wifi_beacon_extended_info. frame control field of 802.11 header
seq_ctrl int subfield of wifi_beacon_extended_info. sequence control field of 802.11 header
payload string subfield of wifi_beacon_extended_info. Extended Info Payload associated with frame

Example Delivery of Zone via http-post

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "zone",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
            "zone_id": "8ac84899-32db-6327-334c-9b6d58544cfe",
            "trigger": "enter",
            "timestamp": 1461220784,

            // for SDK client
            "type": "sdk",
            "id": "de87bf9d-183f-e383-cc68-6ba43947d403",
            "name": "optional",

            // for WIFI
            "type": "wifi",
            "mac": "5684dae9ac8b",

            // for ASSET
            "type": "asset",
            "mac": "7fc2936fd243",
            "asset_id": "c180b858-8f39-11e7-a7a5-346895ed1b7d"
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
id string uuid of SDK-client
name string name of the client, may be empty
site_id string site id
map_id string map id
zone_id string zone id
trigger string enter / exit
timestamp int timestamp of the event, epoch
mac string mac address of wifi client or asset
asset_id string uuid of named asset

Example Delivery of device-events

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "device-events",
    "events": [
        {
            "audit_id": "a8ec4d8a-4da6-4ead-a486-d0f72e40dd08",
            "ap": "5c5b35000001",
            "ap_name": "AP41 Near Lab",
            "device_name": "AP41 Near Lab",
            "device_type": "ap/switch/gateway",
            "ev_type": "NOTICE",
            "mac": "5c5b35000001",
            "org_id": "2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "reason": "power_cycle",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "site_name": "Site 1",
            "text": "event details",
            "timestamp": 1461220784,
            "type": "AP_RESTARTED"
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
audit_id string (optional) audit id
ap string (will be deprecated soon; please use mac instead) ap mac
ap_name string (will be deprecated soon; please use device_name instead) ap name
device_name string device name
device_type string device type (ap/switch/gateway)
ev_type string (optional) event advisory (notice/warn)
mac string device mac
org_id string org id
reason string (optional) event reason
site_id string site id
site_name string site name
text string (optional) event description
timestamp int time the event occurred e.g. 1565987313
type string event type

Example Delivery of device-updowns

device-updowns delivers subset of device-events as followin:

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "device-updowns",
    "events": [
        {
            "org_id": "2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "type": "AP_RESTARTED",
            "ap": "5c5b35000001",
            "ap_name": "AP01",
            "site_name": "SJ1"
            "timestamp": 1461220784
        }
    ]
}

Example Delivery of alarms

For delivery examples for different alarms, please see GET /api/v1/const/alarm_defs

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "alarms",
    "events": [
        {
            "aps": [
                "5c5b350e1003"
            ],
            "bssids": [
                "00024a00310c",
                "5c5b3500e10f",
                "000f24090ff1",
                "c03f0e76fe91",
                "e091f512eda2",
                "e894f6258a3f",
                "40169f1157a4",
                "40169f1151b2",
                "c03f0e7aba91",
                "5c5b35090ff3"
            ],
            "count": 16,
            "id": "95193bda-1fef-4ea6-9e5b-97c9f5e0655a",
            "last_seen": 1549068720,
            "ssids": [
                "qwerty",
                "A-Dot",
                "xfinity",
                "alpha"
            ],
            "timestamp": 1549068202,
            "type": "rogue-ap-detected",
            "update": true,
            "org_id": "2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b"
        }
    ]
}
Name Type Description
topic string topic subscribed to
events list list of events
site_id string site id
org_id string org id
id string event id
type string event type
count string If present, represents number of events of given type occurred in current interval, default=1
update boolean If presents, represents that this is an update to event with given id sent earlier. default=false

N.B.: Fields like aps, bssids, ssids are event specific. They are relevant to this event type ( rogue-ap-detected). For a different event type, different fields may be sent. These don’t contain all affected entities and are representative samples of entities (capped at 10). For marvis action related events, we expose details to include more event specific details.

Events specific fields for other alarm event type can be found with API /api/v1/const/alarm_defs, under “fields” array of /alarm_defs response object.

Example Delivery of audits

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 615
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "audits",
    "events": [
        {
            "admin_name": "Chris Dao chris.dao@yahoo.com",
            "device_id": "00000000-0000-0000-1000-5c5b350e01c7",
            "id": "8e00dd48-b918-4d9b-b40d-b98989ac76a7",
            "message": "Update Device \"Reception\"",
            "org_id": "2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "src_ip": "73.92.124.103",
            "timestamp": 1549047906.201053
        }
    ]
}

Example Delivery of client-join

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 382
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "client-join",
    "events": [
    {
            "ap": “5c5b35d01338",
            "ap_name": “AP43 Test",
            "band": "5",
            "bssid": "5c5b35df18a1",
            "connect": 1592333828,
            "connect_float": 1592333828.324,
            "mac": "70ef0071535f",
            "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
            "rssi": -54,
            "site_id": "d761985e-49b1-4506-88e9-e0368a05c301",
            "site_name": "Test",
            "ssid": "Maui",
            "timestamp": 1592333828,
            "version": 2
            "wlan_id": "6c0c0b07-0d77-44d1-9ab2-610aee9ce711",
        }
    ]
}
Name Type Description
ap string mac address of the AP the client connected to
ap_name string user-friendly name of the AP the client connected to.
band string 5GHz or 2.4GHz band
ssid string ESSID
connect int time when the user connects
connect_float float floating point connect timestamp with millisecond precision
mac string the client’s mac
rssi int RSSI when the client associated
org_id string Org ID
site_id string Site ID
site_name string name of site
timestamp int time the message is sent. E.g. 1565987313
version int schema version of this message
wlan_id string WLAN ID
ip string ip address of client (optional, may be absent if not available)

Example Delivery of client-sessions

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 596
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "client-sessions",
    "events": [
        {
            "ap": “5c5b352f587e",
            "ap_name": “AP41 Test",
            "band": "5",
            "bssid": "5c5b352b51b4",
            "client_family": "iPhone",
            "client_manufacture": "Apple",
            "client_model": "8+",
            "client_os": "13.4.1",
            "connect": 1592333548,
            "connect_float": 1592333548.117,
            "disconnect": 1592333828,
            "disconnect_float": 1592333828.589,
            "duration": 279.835049793,
            "mac": "70ef0071535f",
            "next_ap": "5c5b35d01338",
            "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
            "rssi": -87,
            "site_id": "d761985e-49b1-4506-88e9-e0368a05c301",
            "site_name": "Test",
            "ssid": "Maui",
            "termination_reason": 3,
            "timestamp": 1592333828,
            "version": 2
            "wlan_id": "6c0c0b07-0d77-44d1-9ab2-610aee9ce711",
        }
    ]
}
Name Type Description
ap string mac address of the AP the client roamed or disconnected from
ap_name string user-friendly name of the AP the client roamed or disconnected from.
band string 5GHz or 2.4GHz band
client_family string device family E.g. “Mac”, “iPhone”, “Apple watch”
client_manufacture string device manufacturer E.g. “Apple”
client_model string device model E.g. “8+”, “XS”
client_os string device operating system E.g. “Mojave”, “Windows 10”, “Linux”
connect int time when the user connects
connect_float float floating point connect timestamp with millisecond precision
disconnect int time when the user disconnects
disconnect_float float floating point disconnect timestamp with millisecond precision
duration float the duration of the roamed or complete session indicated by termination_reason field.
mac string the client’s mac
rssi int latest average RSSI before the user disconnects
next_ap string the AP the client has roamed to.
org_id string Org ID
site_id string Site ID
site_name string name of site
ssid string ESSID
termination_reason int 1 disassociate - when the client disassociates. 2 inactive - when the client is timeout. 3 roamed - when the client is roamed between APs
timestamp int time the message is sent. E.g. 1565987313
version int schema version of this message
wlan_id string WLAN ID

Example Delivery of client-info

POST /uri/... HTTP/1.1
Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 191
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e
{
    "topic": "client-info",
    "events": [
        {
            "ip": "21.0.128.151",
            "mac": "6ebaa47a3fd4",
            "org_id": "0c160b7f-1027-4cd1-923b-744534c4b070",
            "site_id": "6e77a2ea-d579-471c-9056-5ff5b4ed70ed",
            "hostname": "service.company.net",  // extracted from DHCP Option 12
            "timestamp": 1703003296
        }
    ]
}
Name Type Description
ip string IP address of client
mac string the client’s mac
org_id string Org ID
site_id string Site ID
hostname string Hostname of client
timestamp float time at which IP address was assigned E.g. 1703003956

Client Raw Data Webhooks

Raw data webhooks are a special subset of webhooks that provide insight into raw data packets emitted by a client, identified by their advertising MAC address (assets, discovered ble, connected wifi, unconnected wifi). The data that client raw data webhooks encompasses are reporting AP information, RSSI Data, and any special packets/telemetry packets that the client may emit. Note that client raw webhooks are the raw data coming from the client and do not contain the X,Y location data of the client. In order to get the location data for a client please see our location webhooks. Clients can be identified uniquely across these client raw data topics and location webhook topic using MAC address as the Unique identifier (client identifier).

Client Raw Data Webhooks Topics

Topics that correspond to client raw data for different client types. To be included in the http-post message for /api/v1/sites/:site_id/webhooks API. 1. asset-raw-rssi - Raw data from packets emitted by named and filtered assets 2. discovered-raw-rssi - Raw data from packets emitted by passive BLE devices 3. wifi-conn-raw - Raw data from packets emitted by connected devices 4. wifi-unconn-raw - Raw data from packets emitted by unconnected devices (passive)

Rules for configuring client raw data webhooks

1. Only one instance of a webhook object containing a client raw data webhook topic is allowed. (a site level entry will override an org level entry for the client raw data webhook topic in question)
2. Only one client raw data webhook topic is allowed per `http-post` message to webhooks api

Example of valid http-post Webhook for configuring client raw data webhooks

POST /api/v1/sites/:site_id/webhooks

{
    "name": "test-asset-raw",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "asset-raw-rssi"]
}

Response

HTTP 200 OK
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "name": "test-asset-raw",
    "url": "https://eoipjcp8ktxjo8p.m.pipedream.net",
    "enabled": true,
    "topics": [
        "asset-raw-rssi"
    ],
    "verify_cert": true,
    "id": "f1ff49e8-9f77-420a-9854-c7de46d7cf80",
    "for_site": true,
    "site_id": "site_id",
    "org_id": "org_id",
    "created_time": 1661300255,
    "modified_time": 1661300255
}

Example of invalid http-post Webhook for configuring client raw webhooks

Example of creating a second webhook integration for a raw client data topic when one already exists will return an error

POST /api/v1/sites/:site_id/webhooks

{
    "name": "test-asset-raw-duplicate",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "asset-raw-rssi"]
}
HTTP 400 Bad Request
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "Webhook already configured for special location topic",
    "webhook_id": "f1ff49e8-9f77-420a-9854-c7de46d7cf80"
}

Example of creating webhook integration for raw client data topic with multiple topic names in request

POST /api/v1/sites/:site_id/webhooks

{
    "name": "invalid multiple topic names",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "discovered-raw-rssi", "wifi-conn-raw"]
}
HTTP 400 Bad Request
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "Only one location topic can be configured per URL"
}

Example delivery of asset-raw-rssi webhook using http-post

{
  "topic": "asset-raw-rssi",
  "events": [
    {
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "beam": 8,
      "device_id": "00000000-0000-0000-1000-ac2316eca70b",
      "ibeacon_major": 2,
      "ibeacon_minor": 2121,
      "ibeacon_uuid": "ac950d7b-af31-42d2-be7c-e15639fab2cd",
      "is_asset": true,
      "mac": "ed2cc53f2770",
      "service_packets": [
        {
          "service_uuid": "UUID",
          "service_data": "010441060606fe3d35700601cecbd902512f000001"
        }
      ],
      "map_id": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "org_id": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "rssi": -79,
      "site_id": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67",
      "timestamp": 1661300746
    },
    {
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "beam": 7,
      "device_id": "00000000-0000-0000-1000-ac2316eca70b",
      "mfg_company_id": 243,
      "mfg_data": "00000000000000000000000000"
      "is_asset": true,
      "mac": "ed2cc53f2771",
      "map_id": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "org_id": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "rssi": -74,
      "site_id": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67",
      "timestamp": 1661300746
    }
  ]
}
Name Type Description
topic string topic subscribed to
events list list of events
site_id string site id
map_id string map id
org_id string org id
device_id string device id of the reporting AP
ap_loc list optional, coordinates (if any) of reporting AP (updated once in 60s per client)
beam int antenna index, from 1-8, clock-wise starting from the LED
rssi float signal strength
mac string MAC of the asset/ beacon
asset_id string asset id
ibeacon_uuid string iBeacon UUID
ibeacon_major string iBeacon major
ibeacon_minor string iBeacon minor
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
service_packets list optional, list of service data packets heard from the asset/ beacon
service_data string optional, data from service data
service_uuid string optional, UUID from service data

Example delivery of discovered-raw-rssi webhook using http-post

{
  "topic": "discovered-raw-rssi",
  "events": [
    {
      "beam": 8,
      "device_id": "00000000-0000-0000-1000-ac2316eca70b",
      "ibeacon_major": 2,
      "ibeacon_minor": 2121,
      "ibeacon_uuid": "ac950d7b-af31-42d2-be7c-e15639fab2cd",
      "is_asset": false,
      "mac": "ed2cc53f2770",
      "map_id": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "org_id": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "rssi": -79,
      "site_id": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67",
      "timestamp": 1661300746
    },
    {
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "beam": 7,
      "device_id": "00000000-0000-0000-1000-ac2316eca70b",
      "service_packets": [
        {
          "service_uuid": "UUID",
          "service_data": "010441060606fe3d35700601cecbd902512f000001"
        }
      ],
      "is_asset": false,
      "mac": "ed2cc53f2771",
      "map_id": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "org_id": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "rssi": -74,
      "site_id": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67",
      "timestamp": 1661300746
    }
  ]
}
Name Type Description
topic string topic subscribed to
events list list of events
site_id string site id
map_id string map id
org_id string org id
device_id string device id of the reporting AP
ap_loc list optional, coordinates (if any) of reporting AP (updated once in 60s per client)
beam int antenna index, from 1-8, clock-wise starting from the LED
rssi float signal strength
mac string MAC of the asset/ beacon
asset_id string asset id
ibeacon_uuid string iBeacon UUID
ibeacon_major string iBeacon major
ibeacon_minor string iBeacon minor
mfg_company_id int optional, BLE manufacturing company ID
mfg_data string optional, BLE manufacturing data in hex byte-string format (ie: “112233AABBCC”)
service_packets list optional, list of service data packets heard from the asset/ beacon
service_data string optional, data from service data
service_uuid string optional, UUID from service data

Example delivery of wifi-conn-raw webhook using http-post

{
  "topic": "wifi-conn-raw",
  "events": [
    {
      "ap_id": "ac-23-16-ec-a7-0b",
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "client_id": "28-f0-76-2d-22-1e",
      "connected_site": false,
      "mapid": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "orgid": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "packets": [
        {
          "band": "5GHz",
          "rssi": -92
        }
      ],
      "siteid": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67"
    },
    {
      "ap_id": "ac-23-16-ec-a7-0b",
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "client_id": "38-f9-d3-99-08-6e",
      "connected_site": false,
      "mapid": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "orgid": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "packets": [
        {
          "band": "5GHz",
          "rssi": -94.333336
        }
      ],
      "extended_info_list": [
        {
          "frame_ctrl": 776,
          "sequence_ctrl": 8432,
          "payload": "010441060606fe3d35700601cecbd902512f000001"
        }
      ],
      "siteid": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67"
    }
  ]
}
Name Type Description
topic string topic subscribed to
events list list of events
site_id string site id
map_id string map id
org_id string org id
ap_id string MAC address of the reporting AP
ap_loc list optional, coordinates (if any) of reporting AP (updated once in 60s per client)
client_id string MAC of the wifi device
connected_site bool connected wifi client or passive wifi device
packets list band-wise average rssi reported by Wifi device
rssi float signal strength
band string band associated with RSSI
extended_info_list list optional, list of specific telemetry packets emited by certain wifi tags (Eg. Centrak)
frame_ctrl int optional, Frame Control
sequence_ctrl int optional, Sequence control
payload string optional, payload from the wifi beacon

Example delivery of wifi-unconn-raw webhook using http-post

{
  "topic": "wifi-unconn-raw",
  "events": [
    {
      "ap_id": "ac-23-16-ec-a7-0b",
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "client_id": "28-f0-76-2d-22-1e",
      "connected_site": false,
      "mapid": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "orgid": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "packets": [
        {
          "band": "5GHz",
          "rssi": -92
        }
      ],
      "siteid": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67"
    },
    {
      "ap_id": "ac-23-16-ec-a7-0b",
      "ap_loc": [
        36.03303862386182,
        43.57022468463291,
        2.75
      ],
      "client_id": "38-f9-d3-99-08-6e",
      "connected_site": false,
      "mapid": "bd42f0c3-2e6a-4f8a-ac2d-d34e268c1418",
      "orgid": "9c3e516c-397d-11e6-ae35-0242ac110008",
      "packets": [
        {
          "band": "5GHz",
          "rssi": -94.333336
        }
      ],
      "siteid": "27ea2f07-6fe6-4eab-be1b-b8e3ce083d67"
    }
  ]
}
Name Type Description
topic string topic subscribed to
events list list of events
site_id string site id
map_id string map id
org_id string org id
ap_id string MAC address of the reporting AP
ap_loc list optional, coordinates (if any) of reporting AP (updated once in 60s per client)
client_id string MAC of the wifi device
connected_site bool connected wifi client or passive wifi device
packets list band-wise average rssi reported by Wifi device
rssi float signal strength
band string band associated with RSSI
extended_info_list list optional, list of specific telemetry packets emited by certain wifi tags (Eg. Centrak)
frame_ctrl int optional, Frame Control
sequence_ctrl int optional, Sequence control
payload string optional, payload from the wifi beacon

Asset Filtering for Client Raw Data Webhooks

The asset-raw-rssi webhook topic supports filtering of raw data by incorporating asset filters in the webhook payload.

The filter topic allows multiple Webhooks to receive a subset of the asset-raw-rssi data by assigning asset filters to a given webhook. The asset-raw-rssi filter topic is filtered-asset-rssi.

A webhook assigned to a filter topic can take a list of AssetFilter IDs, which act as inclusive filters to determine which named asset and filtered asset data is sent to the assigned filter topic. Filters can be applied to multiple webhooks, and the same data can be sent to multiple filter topics.

Rules for Configuring Client Raw Data Webhooks

  1. Only four instances of a webhook object can contain a specific filter topic. - A site-level entry will override an org-level entry for the same client raw data webhook topic.
  2. An assigned asset filter must exist and belong to the same site as the webhook it is assigned to.

Example of valid http-post Webhook for configuring asset raw webhook with filters.

POST /api/v1/sites/:site_id/webhooks

{
    "name": "test-filtered-asset-rssi",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "filtered-asset-rssi"],
    "assetfilter_ids": [
        "e06ecc2a-e75b-49bb-b9ea-b0e650cc8072",
        "0d04d6be-8a00-48c6-ae79-38ff14450098",
        "a73b4be2-66ea-4951-aa6c-9e63e1a3635f",
    ]
}

Response

HTTP 200 OK
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "name": "test-filtered-asset-rssi",
    "url": "https://eoipjcp8ktxjo8p.m.pipedream.net",
    "enabled": true,
    "topics": [
        "filtered-asset-rssi"
    ],
    "verify_cert": true,
    "id": "f1ff49e8-9f77-420a-9854-c7de46d7cf80",
    "for_site": true,
    "site_id": "site_id",
    "org_id": "org_id",
    "assetfilter_id": [
    "e06ecc2a-e75b-49bb-b9ea-b0e650cc8072",
    "0d04d6be-8a00-48c6-ae79-38ff14450098",
    "a73b4be2-66ea-4951-aa6c-9e63e1a3635f",
    ],
    "created_time": 1661300255,
    "modified_time": 1661300255
}

Example of invalid http-post Webhook for configuring asset raw webhook.

Example of adding an malformed assetfilter_id to a webhook

POST /api/v1/sites/:site_id/webhooks

{
    "name": "test-asset-raw-malformed-assetfilter-id",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "filtered-asset-rssi"],
    "assetfilter_ids": [
        "non_existant_assetfilter_id",
    ]
}
HTTP 400 Bad Request
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "invalid field: assetfilter_ids"
}

Example of invalid http-post Webhook for configuring asset raw webhook.

Example of adding an invalid assetfilter_id to a webhook

POST /api/v1/sites/:site_id/webhooks

{
    "name": "test-asset-raw-non-existant-assetfilter-id",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "filtered-asset-rssi"],
    "assetfilter_ids": [
        "00000000-0000-0000-0000-000000000000",
    ]
}
HTTP 400 Bad Request
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "invalid field: assetfilter_ids"
}

Example of invalid http-post Webhook for configuring asset raw webhook.

Example of adding a duplicate assetfilter_id to a webhook

POST /api/v1/sites/:site_id/webhooks

{
    "name": "test-asset-raw-duplicate-assetfilter-ids",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "filtered-asset-rssi"],
    "assetfilter_ids": [
        "e06ecc2a-e75b-49bb-b9ea-b0e650cc8072",
        "e06ecc2a-e75b-49bb-b9ea-b0e650cc8072",
    ]
}
HTTP 400 Bad Request
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "invalid field: assetfilter_ids",
    "reason": "contains duplicate uuids"
}

Example of invalid http-post Webhook for configuring asset raw webhook.

Example of attempting to create a filter webhook at an org level

POST /api/v1/orgs/:org_id/webhooks

{
    "name": "test-asset-raw-org-level-filter-webhook",
    "url": "https://xyz.abc",
    "enabled": true,
    "topics": [ "filtered-asset-rssi"],
    "assetfilter_ids": [
        "e06ecc2a-e75b-49bb-b9ea-b0e650cc8072",
    ]
}
HTTP 400 Bad Request
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "invalid field: topics",
    "reason": "filtered asset webhooks must be associated with a site"
}

Ping Webhook

send a Ping event to the webhook

POST /api/v1/sites/:site_id/webhooks/:webhook_id/ping

Example Delivery via http-post

{
    "topic": "ping",
    "events": [
        {
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "id": "18ff1f91-a9e0-c3b7-74ea-2ce4ea372f72",
            "name": "my webhook",
            "timestamp": 1461220784
        }
    ]
}

Example Delivery of occupancy-alerts

{
    "topic": "occupancy-alerts",
    "events": [
        {
            "alert_events": [
                {
                    "current_occupancy": 10,
                    "map_id": "f5d26c7f-1670-4921-a79d-09f887f46b44",
                    "occupancy_limit": 5,
                    "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
                    "timestamp": 1594861457,
                    "type": "COMPLIANCE-VIOLATION",
                    "zone_id": "b83312a7-7269-4ae1-bea8-e7cfe0e3073c",
                    "zone_name": "PLM and Leadership"
                },
                {
                    "current_occupancy": 20,
                    "map_id": "f5d26c7f-1670-4921-a79d-09f887f46b44",
                    "occupancy_limit": 10,
                    "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
                    "timestamp": 1594861457,
                    "type": "COMPLIANCE-VIOLATION",
                    "zone_id": "80acf542-e863-43cf-9efd-9295468585e7",
                    "zone_name": "CSQA"
                },
                {
                    "current_occupancy": 9,
                    "map_id": "f5d26c7f-1670-4921-a79d-09f887f46b44",
                    "occupancy_limit": 4,
                    "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
                    "timestamp": 1594861457,
                    "type": "COMPLIANCE-VIOLATION",
                    "zone_id": "a4c7a7c2-880e-4a0e-9626-02e5a9471f86",
                    "zone_name": "Marketing & Sales Ops"
                }
            ],
            "site_id": "67970e46-4e12-11e6-9188-0242ac110007",
            "site_name": "TRUE MIST OFFICE [STAGING]"
        }
    ]
}
Name Type Description
site_id string Site ID
site_name string user-friendly name of site
alert_events array list of occupancy alerts for non-compliance zones within the site detected around the same time
org_id string Org ID
type string event type (COMPLIANCE-VIOLATION / COMPLIANCE-OK)
timestamp int time the message is sent. E.g. 1565987313
map_id string Map ID of the zone the event type is reported
zone_id string Zone ID of the zone the event type is reported
zone_name string user-friendly name of zone if it exists
occupancy_limit int occupancy limit of the zone the event type is reported
current_occupancy int Actual occupancy of the zone the event type is reported

Example Delivery of sdkclient-scan-data

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 596
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "sdkclient-scan-data",
    "events": [
        {
            "connection_ap": “5c5b352f587e",
            "connection_band": "2.4",
            "connection_channel": 11,
            "connection_bssid": "5c5b352b51b4",
            "mac": "70ef0071535f",
            "connection_rssi": -87,
            "site_id": "d761985e-49b1-4506-88e9-e0368a05c301",
            "last_seen": 1592333828,
            "scan_data": [
                {
                    "ap": “5c5b352f587e",
                    "bssid": "5c5b352b51b4",
                    "band": "2.4",
                    "channel": 11,
                    "rssi": -87
                    "ssid": "mist-wifi",
                    "timestamp": 1592333828
                },
                {
                    "ap": “5c5b352f587e",
                    "bssid": "5c5b352b51b8",
                    "band": "5",
                    "channel": 36,
                    "rssi": -75
                    "ssid": "mist-wifi",
                    "timestamp": 1592333828
                }
            ]
        }
    ]
}
Name Type Description
connection_ap string mac address of the AP the client is connected to
connection_band string 5GHz or 2.4GHz band, of the BSSID the client is connected to
connection_channel int channel of the band the client is connected to
connection_bssid string BSSID of the AP the client is connected to
mac string the client’s mac
connection_rssi int RSSI of the client’s connection to the AP/BSSID
site_id string Site ID
last_seen int time client last seen with scan data
ap string mac address of the AP associated with the BSSID scanned
band string 5GHz or 2.4GHz band, associated with the BSSID scanned
channel int channel of the band found in the scan
bssid string BSSID found during client’s background scan for wifi
rssi int client’s RSSI relative to the BSSID scanned
ssid string ESSID containing the BSSID scanned
timestamp int time the scan of the particular BSSID occurred

Example delivery of site-sle

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 596
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic": "site-sle",
    "events": [
        {
            "timestamp": 1694620800,
            "org_id": “2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "sle": {
                "ap-availability": 0.6,
                "time-to-connect": 0.9,
                "successful-connect": 0.7,
                ...
            } 
        }
    ]
}

Example webhook delivery of client-latency

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 596
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
    "topic":"client-latency",
    "events": [
        {
            "avg_auth": 0.17170219,
            "avg_dhcp": 0.017828934,
            "avg_dns": 0.024532124,
            "min_auth": 0.16050219,
            "min_dhcp": 0.015828934,
            "min_dns": 0.022532124,
            "max_auth": 0.18170219,
            "max_dhcp": 0.027828934,
            "max_dns": 0.029532124,
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "org_id": "2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "timestamp": 1696401600
        }
    ]
}

Example delivery of guest-authorizations

POST /uri/... HTTP/1.1
Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 596
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e
{
    "topic": "guest-authorizations",
    "events": [
        {
            "ap":"5c5b350e55c8",
            "auth_method": "passphrase",
            "authorized_expiring_time":1677076639,
            "authorized_time":1677076519,
            "carrier": "docomo",
            "client": "ac2316eca70a",
            "company": "MIST",
            "email": ""abcd@abcd.com",
            "field1": "field1 value",
            "field2": "field2 value",
            "field3": "field3 value",
            "field4": "field4 value",
            "mobile": "+0123456789",
            "name": "Dr Strange",
            "org_id":"1688605f-916a-47a1-8c68-f19618300a08",
            "site_id":"ec3b5624-73f1-4ed3-b3fd-5ba3ee40368a",
            "sms_gateway": "Telstra",
            "sponsor_email": "sponsor@gmail.com",
            "ssid":"Portal Auth",
            "wlan_id":"7681be9a-044a-4622-90cf-3accde5ad853",
        }
    ]
}
Name Type Description
ap string mac address of the AP the guest is connected to
auth_method string authentication method used
authorized_expiring_time int expiry time for guest
authorized_time int time of authorization of guest
carrier string carrier used when authentication by free cell provider
client string client mac
email string guest email
field1 string field1 value
field2 string field2 value
field3 string field3 value
field4 string field4 value
mobile string mobile number
name string guest name
org_id string org id
site_id string site id
sms_gateway string sms gateway used via text auth paid service
ssid string ssid
wlan_id string wlan id

Search/Count Webhooks Deliveries

Topics Supported:

- alarms
- audits
- device-updowns
- occupancy-alerts
- ping

Search webhooks deliveries

GET /api/v1/sites/:site_id/webhooks/:webhook_id/events/search?status=success&topic=device-updowns&limit=10

Request

Name Type Description
org_id string org ID
site_id string site ID
webhook_id string webhook object ID
status string optional, success / failure
status_code int optional, HTTP response status code
topic string optional, webhook topic

Example Responses

{
    "results": [
        {
            "id" : "47ea9366-bf66-427a-886a-153104bbf355",
            "org_id" : "929e52a7-9edc-4e2f-a836-1af577b043ed",
            "site_id" : "21134243-0667-44ae-8f58-42b640ad39bb",
            "webhook_id" : "6b0b5d05-430a-4414-86ca-eb081aff03e8",
            "status_code" : 200,
            "status": "success",
            "topic" : "ping",
            "req_headers" : "{"Content-Type":["application/json"],"User-Agent":["Mist-webhook"]}",
            "req_url" : "http://example.com",
            "req_payload" : "{"topic":"ping","events":[{"id":"6b0b5d05-430a-4414-86ca-eb081aff03e8","name":"webhook event delivery test","site_id":"21134243-0667-44ae-8f58-42b640ad39bb","timestamp":1685985159.0102212}]}",
            "resp_headers" : "{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Methods":["OPTIONS, HEAD, GET, POST, PUT, DELETE"],"Access-Control-Allow-Origin":["*"],"Access-Control-Expose-Headers":["Date, Server, X-Frame-Options"],"Access-Control-Max-Age":["3600"],"Content-Length":["3"],"Content-Type":["text/html; charset=utf-8"],"Date":["Mon, 05 Jun 2023 17:12:39 GMT"],"Server":["Apache/2.4.18 (Ubuntu)"],"X-Frame-Options":["SAMEORIGIN"]}",
            "resp_body" : "Ok"
        },
        {
            "id" : "55b0f02f-ebf6-4ad2-8b10-200508a97581",
            "org_id" : "fc7e2967-e7ef-41e6-b007-1217713de05a",
            "site_id" : "256c3a35-9cb7-436e-bc6d-314972645d95",
            "webhook_id" : "7a11b901-f719-4c91-8aef-deb8699a6364",
            "status_code" : 200,
            "status": "success",
            "topic" : "audits",
            "req_headers" : "{"Content-Type":["application/json"],"User-Agent":["Mist-webhook"]}",
            "req_url" : "http://example.com",
            "req_payload" : "{"topic":"audits","events":[{"admin_name":"John Doe john.doe@juniper.net","after":"{\"radio_config\": {\"band_24\": {\"disabled\": false, \"allow_rrm_disable\": false, \"power_min\": null, \"power_max\": null, \"power\": 10, \"preamble\": \"short\", \"channels\": [1, 10], \"bandwidth\": 20}}}","before":"{\"radio_config\": {\"band_24\": {\"disabled\": false, \"allow_rrm_disable\": false, \"power_min\": 8, \"power_max\": 18, \"power\": null, \"preamble\": \"long\", \"channels\": [1, 10], \"bandwidth\": 20}}}","id":"737909a2-04ff-4aeb-b9da-cc924e74a4dd","message":"Update Site Settings","org_id":"fc7e2967-e7ef-41e6-b007-1217713de05a","site_id":"256c3a35-9cb7-436e-bc6d-314972645d95","site_name":"Test Site","src_ip":"1.2.3.4","timestamp":1685956576.923601,"user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"}]}",
            "resp_headers" : "{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Methods":["OPTIONS, HEAD, GET, POST, PUT, DELETE"],"Access-Control-Allow-Origin":["*"],"Access-Control-Expose-Headers":["Date, Server, X-Frame-Options"],"Access-Control-Max-Age":["3600"],"Content-Length":["3"],"Content-Type":["text/html; charset=utf-8"],"Date":["Mon, 05 Jun 2023 09:16:17 GMT"],"Server":["Apache/2.4.18 (Ubuntu)"],"X-Frame-Options":["SAMEORIGIN"]}",
            "resp_body" : "Ok"
        }
    ]
}

Additional Response fields:

Name Type Description
id string delivery ID
req_headers object HTTP request headers
req_url string HTTP request URL
req_payload object HTTP request payload
resp_headers object HTTP response headers
resp_body string HTTP response body
error string error message, if there is one

Count webhooks deliveries

GET /api/v1/sites/:site_id/webhooks/:webhook_id/events/count?distinct=status&topic=device-updowns&limit=10

Request

Name Type Description
org_id string org ID
site_id string site ID
webhook_id string webhook object ID
distinct string optional, status / topic / status_code / webhook_id (default)
status string optional, success / failure
status_code int optional, HTTP response status code
topic string optional, webhook topic

Example Responses

{
    "results": [
        {
            "status": "success",
            "count": 20
        },
        {
            "status": "failure",
            "count": 1
        }
    ],
    "limit": 10,
    "start": 1712085924,
    "end": 1712172324,
    "distinct": "status",
    "total": 2
}

Subscriptions

Subscriptions define how Site Alerts/Reports are delivered to whom

Subscribe

POST /api/v1/sites/:site_id/subscriptions

Unsubscribe

DELETE /api/v1/sites/:site_id/subscriptions

Get all the subscriptions

GET /api/v1/self/subscriptions

Device Stats

To improve performance and reduce response size, please use paginated requests. We strongly recommend specifying pagination parameters when calling these endpoints. Even though a call without pagination parameters will return the full list of device stats, this behavior is temporary. In the future, paginated responses (with default values of limit=100 and page=1) will be enforced.

Query Parameters for Pagination:

When you include these parameters in your request, the response will also contain the following HTTP headers: - X-Page-Page: The current page number. - X-Page-Limit: The limit per page. - X-Page-Total: The total number of items in the result set.

Get Device Current Stats

/stats returns a combined view of the device which includes configs and stats.

GET /api/v1/sites/:site_id/stats/devices?limit=100&page=1

Request

Name Type Description
type string ap, switch, gateways, all. Default is ap
status string all, connected, disconnected. Default is all

Response

[
    {
        # information from manufacturing, immutable
        "mac": "5c5b35000010",
        "model": "AP200",
        "type": "ap",
        "serial": "FXLH2015170017",
        "last_seen": 1470417522,

        # configurations
        "name": "conference room",
        "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
        "x": 53.5,
        "y": 173.1,
        "radio_config": {
            "band_24": {
                "channel": 0,
                "bandwidth": 20,
                "power": 0,
                "dynamic_chaining_enabled": false,
                "tx_chain": 4,
                "rx_chain": 4
            },
            "band_5": {
                "channel": 0,
                "bandwidth": 40,
                "power": 0,
                "dynamic_chaining_enabled": false,
                "tx_chain": 1,
                "rx_chain": 4
            },
            "band_6": {
                "channel": 0,
                "bandwidth": 40,
                "power": 0,
                "tx_chain": 1,
                "rx_chain": 4
            },
            "scanning_enabled": true
        },
        "ip_config": {
            "type": "static",
            "ip": "10.2.1.1",
            "netmask": "255.255.255.0",
            "gateway": "10.2.1.254",
            "dns": [ "8.8.8.8", "4.4.4.4" ],
            "dns_suffix": [ ".mist.local", ".mist.com" ]
        },
        "ble_config": {
            "power_mode": "custom",
            "power": 10,
            "beacon_rate_model": "custom",
            "beacon_rate": 3,
            "beam_disabled": [ 1, 3, 6 ]
        },
        "led": {
            "enabled": true,
            "brightness": 255
        },

        # current stat
        "status": "connected",
        "version": "1.0.0",
        "ip": "10.2.9.159", // first IP
        "ext_ip": "73.92.124.103",
        "num_clients": 10,
        "num_wlans": 2,
        "uptime": 13500,
        "tx_bps": 634301,
        "rx_bps": 60003,
        "tx_bytes": 211217389682,
        "tx_pkts": 812204062,
        "rx_bytes": 8515104416,
        "rx_pkts": 57770567,

        "locating": false,

        "radio_stat": {
            "band_24": {
                "mac": "5c5b350004a0"
                "channel": 6,
                "bandwidth": 20,
                "power": 19,
                "num_wlans": 1,
                "num_clients": 6,
                "tx_bytes": 211166512114,
                "tx_pkts": 812058566,
                "rx_bytes": 8504737800,
                "rx_pkts": 57731964
            },
            "band_5": {
                "mac": "5c5b350004b0"
                "channel": 44,
                "bandwidth": 80,
                "power": 15,
                "num_wlans": 1,
                "num_clients": 4,
                "tx_bytes": 50877568,
                "tx_pkts": 145496,
                "rx_bytes": 10366616,
                "rx_pkts": 38603
            }
        },
        "port_stat": {
            "eth0": {
                "up": true,
                "speed": 1000,
                "full_duplex": true,
                "tx_bytes": 2056,
                "tx_pkts": 670,
                "rx_bytes": 2056,
                "rx_pkts": 670,
                "rx_errors": 0,
            },
            "eth1": {
                "up": false
            },
            "module": {
                "up": false
            }
        },
        "ip_stat": {
            "ip": "10.2.1.1",
            "netmask": "255.255.255.0",
            "gateway": "10.2.1.254",
            "ip6": "2607:f8b0:4005:808::2004",
            "netmask6": "/32",
            "gateway6": "2607:f8b0:4005:808::1",
            "dns": [ "8.8.8.8", "4.4.4.4" ],
            "dns_suffix": [ ".mist.local", ".mist.com" ],
            "ips": {
                "vlan1": "10.2.1.1/24,2607:f8b0:4005:808::1/32",
                "vlan193": "10.73.1.31/16",
                "vlan3157": "10.72.11.14/24"
            }
        },
        "ble_stat": {
            "power": 10,
            "beacon_rate": 3,
            "uuid": "ada72f8f-1643-e5c6-94db-f2a5636f1a64",
            "major": 12345,
            "minors": [ 201, 202, 203, 204, 205, 206, 207, 208 ],
            "tx_pkts": 135135135,
            "tx_bytes": 5231513353,
            "tx_resets": 0,
            "rx_pkts": 135,
            "rx_bytes": 135,

            "ibeacon_enabled": true,
            "ibeacon_uuid": "f3f17139-704a-f03a-2786-0400279e37c3",
            "ibeacon_major": 13,
            "ibeacon_minor": 138,

            "eddystone_uid_enabled": false,
            "eddystone_uid_namespace": "2818e3868dec25629ede",
            "eddystone_uid_instance": "5c5b35000001",
            "eddystone_uid_freq_msec": 200,

            "eddystone_url_enabled": true,
            "eddystone_url_url": "https://www.abc.com",
            "eddystone_url_freq_msec": 100
        },
        "l2tp_stat": {
            "7dae216d-7c98-a51b-e068-dd7d477b7216": {
                "wxtunnel_id": "7dae216d-7c98-a51b-e068-dd7d477b7216",
                "state": "established_with_sessions",
                "uptime": 135,
                "sessions: [
                    {
                        "remote_id": "vpn1",
                        "state": "established",
                        "remote_sid": 13,
                        "local_sid": 31
                    }
                ]
            }
        },
        "lldp_stat": {
            "system_name": "TC2-OWL-Stack-01",
            "system_desc": "HP J9729A 2920-48G-POE+ Switch",
            "mgmt_addr": "10.1.5.2",
            "mgmt_addrs": ["10.1.5.2", "2002:A01:203:0:0:0:0:0"],
            "lldp_med_supported": false,
            "port_desc": "2/26",
            "port_id": "port1",
            "chassis_id": "63:68:61:73:73:69",
            "lldp_med_supported": false,
            "power_request_count": 3,
            "power_allocated": 15500,
            "power_requested": 25500,
            "power_draw": 15000
        },
        "lldp_stats": {
            "eth0": {
                "system_name": "TC2-OWL-Stack-01",
                "system_desc": "HP J9729A 2920-48G-POE+ Switch",
                "mgmt_addr": "10.1.5.2",
                "mgmt_addrs": ["10.1.5.2", "2002:A01:203:0:0:0:0:0"],
                "lldp_med_supported": false,
                "port_desc": "2/26",
                "port_id": "port1",
                "chassis_id": "63:68:61:73:73:69",
                "lldp_med_supported": false,
                "power_request_count": 3,
                "power_allocated": 15500,
                "power_requested": 25500,
                "power_draw": 15000
            },
            "eth1": {
                "system_name": "TC2-OWL-Stack-02",
                "system_desc": "HP J9728A 2920-24G-POE+ Switch",
                "mgmt_addr": "10.1.5.3",
                "mgmt_addrs": ["10.1.5.3"],
                "lldp_med_supported": true,
                "port_desc": "1/12",
                "port_id": "port2",
                "chassis_id": "chassis2",
                "power_request_count": 2,
                "power_allocated": 15400,
                "power_draw": 14000,
                "power_requested": 15400
            }
        },
        "power_src": "PoE 802.3at",
        "power_srcs": ["PoE 802.3at", "PoE 802.3af"],
        "power_budget": -12000,
        "power_constrained": true,
        "power_opmode": "[20] 6GHz(2x2) 5GHz(4x4) 2.4GHz(2x2).",

        "switch_redundancy": {
            "num_redundant_aps": 1,
        },

        "ant_mode": "external",  // if AP supported

        // IoT stats
        "iot_stat": {
            "DI2": {
                "value": 0
            }
        },

        // Environment stats
        "env_stat": {
            "cpu_temp": 51,
            "ambient_temp": 39,
            "humidity": 11,
            "attitude": 0,
            "pressure": 1015
            "accel_x": -0.012,
            "accel_y": 0.004,
            "accel_z": -1.012,
            "magne_x": 0.0,
            "magne_y": 1.3,
            "magne_z": 0.0,
            "vcore_voltage": 0
        },
        "mount": 'faceup',


        // ESL Stats
        "esl_stat": {
            "up": true,
            "type": "imagotag",  // if up

            // following are type-dependent
            "connected": true,
            "channel": 3,
        },

        // for a base AP
        "mesh_downlinks": {
            "00000000-0000-0000-1000-5c5b356be59f": {
                "site_id": "0e525da3-6033-428c-9a51-9f652f643baf",
                "band": "24",
                "proto": "a",
                "channel": 7,

                "last_seen": 1470417522,
                "idle_time": 3,

                "rssi": -65,
                "snr": 31,
                "tx_rate": 65,
                "rx_rate": 65,

                "tx_bytes": 175132,
                "tx_bps": 6,
                "tx_packets": 1566,
                "tx_retries": 500,
                "rx_bytes": 217416,
                "rx_bps": 12,
                "rx_packets": 2337,
                "rx_retries": 5
            }
        },

        // for a remote/relay AP
        "mesh_uplink": {
            "uplink_ap_id": "00000000-0000-0000-1000-5c5b35000010",
            "uplink_site_id": "1916d52a-4a90-11e5-8b45-1258369c38a9",
            "band": "24",
            "proto": "a",
            "channel": 7,

            "last_seen": 1470417522,
            "idle_time": 3,

            "rssi": -65,
            "snr": 31,
            "tx_rate": 65,
            "rx_rate": 65,

            "tx_bytes": 175132,
            "tx_bps": 6,
            "tx_packets": 1566,
            "tx_retries": 500,
            "rx_bytes": 217416,
            "rx_bps": 12,
            "rx_packets": 2337,
            "rx_retries": 5
        },
        "fwupdate": {
            "timestamp": 1428949501,
            "status": "inprogress",
            "status_id": 5,
            "progress": 10
        },

        "last_trouble": {
            "code": "03",
            "timestamp": 1428949501
        },

        // if RADSec is enabled, device certs will be automatically generated and managed
        // with the expiration time exposed
        "cert_expiry": 1534534392
        "expiring_certs": {
            "483412046338348876283259475264040058183366677871": 1534534392,  // serial_number -> expiry timestamp
            "375895068012951219417723061830777179121567314483": 1535534392
        },
        "locked": false,
        "auto_placement": {
            "x": 53.5,
            "y": 173.1,
            "x_m": 5.35,
            "y_m": 17.31,
            "status": "localized",
            "status_detail": "localized",
            "recommended_anchor": false,
            "info": {
                "cluster_number": 0,
                "orientation_state": 0,
                "probability_surface": {
                    "radius": 2.1,
                    "x": 5.65,
                    "y": 17.10
                }
            },
            "_id": "5c5b35000010"
        },
        "gps_stat": {
            "altitude": 99.939,
            "latitude": 37.29548,
            "longitude": -122.03304,
            "src": "gps",
            "timestamp": 1428949501,
            "accuracy": 12.5
        }
    }
]

Switch Stats

{
    "mac": "dc38e1dbf3cd",
    "model": "EX4600",
    "type": "switch",
    "serial": "TC3714190003",
    "last_seen": 1553203563,

    # configurations
    "name": "xg50b",  // configured

    # current stat
    "hostname": "sj-sw1",  //reported
    "status": "connected",
    "version": "18.4R1.8",
    "ip": "10.2.11.137", // first IP

    "uptime": 13500,
    "ip_stat": {
        "ip": "10.2.11.137",
        "netmask": "255.255.192.0",
        "gateway": "10.2.1.1",
        "ip6": "2607:f8b0:4005:808::2004",
        "netmask6": "/32",
        "gateway6": "2607:f8b0:4005:808::1",
        "dns": [ "8.8.8.8", "4.4.4.4" ],
        "dns_suffix": [ ".mist.local", ".mist.com" ],
        "ips": {
            "vlan1": "10.2.1.1/24,2607:f8b0:4005:808::1/32",
            "vlan193": "10.73.1.31/16",
            "vlan3157": "10.72.11.14/24"
        }
    },
    "cpu_stat": {
        "interrupt": 8,
        "idle": 28,
        "user": 23,
        "system": 41,
        "load_avg": [
            0.9700000286102295,
            1.0499999523162842,
            1.0199999809265137
        ],
    },
    "memory_stat": {
        "usage": 35
    },
    "if_stat": {
        "ge-0/0/9.0": {
            "tx_pkts": 3625,
            "rx_pkts": 3630,
            "rx_bytes": 1255980,
            "port_id": "ge-0/0/9",
            "up": true,
            "tx_bytes": 1511602
        },
        "irb.125": {
            "tx_pkts": 10971,
            "vlan": 125,
            "rx_pkts": 8683,
            "rx_bytes": 695212,
            "port_id": "irb",
            "up": false,
            "ips": [
                "80.80.80.1/24"
            ],
            "tx_bytes": 1061466
        },
        "me0.0": {
            "tx_pkts": 939805,
            "rx_pkts": 720490,
            "rx_bytes": 75544938,
            "port_id": "me0",
            "up": true,
            "ips": [
                "60.60.60.5/24"
            ],
            "tx_bytes": 248394725
        }
     },
    "module_stat": [
        {
            "vc_role": "master",
            "model": "EX4300-48P",
            "serial": "PX8716230021",
            "fans": [
                {
                    "name": "Fan 0"
                    "status": "absent",
                },
                {
                    "name": "Fan 1"
                    "airflow": "out",
                    "status": "ok"
                }
            ],
            "temperatures": [
                {
                    "name": "CPU",
                    "status": "ok",
                    "celsius": 45.0
                }
            ],
            "psus": [
                {
                    "name": "Power Supply 0",
                    "status": "ok"
                },
                {
                    "name": "Power Supply 1",
                    "status": "failed"
                }
            ],
            "poe": {
                "max_power": 250.0,
                "power_draw": 120.3
            },
            "vc_links": [
                {
                    "port_id": "vcp-255/1/0",
                    "neighbor_module_idx": 1,
                    "neighbor_port_id": "vcp-255/1/0"
                }
            ],
            "pics": [
                {
                    "idx": 0,
                    "port_groups": [
                        {
                            "type": "sfp+", "count": 12
                        }
                    ]
                }
            ]
        }
    ],
    "clients": [
        {
            "port_id": "eth-0/0/0,ge-0/0/1",
            "mac": "b0c4e7001544",
            "hostname": "test-sw1",
            "device_mac": "dc38e1dbf3cd",
        }
    ],
    "num_clients": {
        "total": {
            "num_clients": 5,
            "num_aps": 3,
        },
        "0": {
            "num_clients": 2,
            "num_aps": 1,
        }
    },
    "last_trouble": {
        "code": "110",
        "timestamp": 1666258858685
    },
    "has_pcap": true
}

Gateway Stats

{
    "mac": "dc38e1dbf3cd",
    "model": "SRX320",
    "type": "gateway",
    "serial": "TC3714190003",
    "last_seen": 1553203563,

    # configurations
    "name": "sj1",  // configured

    # current stat
    "hostname": "sj1",  // reported
    "status": "connected",
    "version": "18.4R1.8",
    "ip": "10.2.11.137", // first IP

    "uptime": 13500,
    "ip_stat": {
        "ip": "10.2.11.137",
        "netmask": "255.255.192.0",
        "gateway": "10.2.1.1",
        "ip6": "2607:f8b0:4005:808::2004",
        "netmask6": "/32",
        "gateway6": "2607:f8b0:4005:808::1",
        "dns": [ "8.8.8.8", "4.4.4.4" ],
        "dns_suffix": [ ".mist.local", ".mist.com" ],
        "ips": {
            "vlan1": "10.2.1.1/24,2607:f8b0:4005:808::1/32",
            "vlan193": "10.73.1.31/16",
            "vlan3157": "10.72.11.14/24"
        }
    },
    "dhcpd_stat": {
        "LAN-network-name-here": {
            "num_ips": 100,
            "num_leased": 20
        }
    },
    "cpu_stat": {
        "interrupt": 8,
        "idle": 28,
        "user": 23,
        "system": 41,
        "load_avg": [
            0.9700000286102295,
            1.0499999523162842,
            1.0199999809265137
        ],
    },
    "memory_stat": {
        "usage": 35
    },

    // for a Gateway, the SPU (Services Processing Unit) stats
    "spu_stat": {
        "cpu": 15,
        "memory": 32,
        "sessions": {
            "current": 41,
            "valid": 15,
            "pending": 12,
            "max": 65535
        }  
    },

    "module_stat": [
        {
            "vc_role": "master",
            "model": "EX4300-48P",
            "serial": "PX8716230021",
            "fans": [
                {
                    "name": "Fan 0"
                    "status": "absent",
                },
                {
                    "name": "Fan 1"
                    "airflow": "out",
                    "status": "ok"
                }
            ],
            "temperatures": [
                {
                    "name": "CPU",
                    "status": "ok",
                    "celsius": 45.0
                }
            ],
            "psus": [
                {
                    "name": "Power Supply 0",
                    "status": "ok"
                },
                {
                    "name": "Power Supply 1",
                    "status": "failed"
                }
            ],
            "poe": {
                "max_power": 250.0,
                "power_draw": 120.3
            },
            "vc_links": [
                {
                    "port_id": "vcp-255/1/0",
                    "neighbor_module_idx": 1,
                    "neighbor_port_id": "vcp-255/1/0"
                }
            ],

            // `errors` array in `module{,2}_stat` is used to report all error states the device node is running into
            "errors": [
                // An error should always have `type` and `since` fields, and could have some other fields specific to that type.

                // FW_UPGRADE_REQUIRED_BY_FEATURE error: generated when SSR is running an non-compliance firmware version.
                {
                    "type": "FW_UPGRADE_REQUIRED_BY_FEATURE",
                    "since": 1657497600,

                    "feature": "Mist-Management",
                    "minimum_version": "128T-6.0.0-1"
                },

                // INACTIVE error: generated when SSR 128T service is stopped
                {
                    "type": "INACTIVE",
                    "since": 1657497600
                },

                // HA_FW_MISMATCH error: generated when SSR cluster node firmware versions do not match
                {
                    "type": "HA_FW_MISMATCH",
                    "since": 1658244424
                },

                // HA_FORMATION_FAILED / HA_DISSOLUTION_FAILED error: generated when HA formation / dissolution failed
                {
                    "type": "HA_FORMATION_FAILED",  // HA_FORMATION_FAILED or HA_DISSOLUTION_FAILED
                    "since": 1658277429,

                    "reason": "config invalid"
                },

                // HA_DOWN error: generated when HA formed but not working properly
                {
                    "type": "HA_DOWN",
                    "since": 1658277429
                },

                // CONFIG_OUT_OF_SYNC / CONFIG_REVERTED error: generated when config out-of-sync / reverted is detected
                {
                    "type": "CONFIG_OUT_OF_SYNC",                   // CONFIG_OUT_OF_SYNC or CONFIG_REVERTED
                    "since": 1684825000.123456
                },

                // UNABLE_TO_CONNECT_TO_LOG_SERVER error: generated when srx device not connected with Mist srx-log-term service
                {
                    "type": "UNABLE_TO_CONNECT_TO_LOG_SERVER",
                    "since": 1709203262
                },

                // REBOOT_REQUIRED error: generated when some config change requires SSR device to be rebooted
                {
                    "type": "REBOOT_REQUIRED",
                    "since": 1720403426
                }
            ]
        }
    ],

    // for HA, all above stats are for node0
    // node1 stats are expressed in
    "ip2_stat": ...
    "dhcpd2_stat": ...
    "cpu2_stat": ...
    "memory2_stat": ...
    "spu2_stat": ...
    "module2_stat": ...

    "cluster_stat": {
        "
        "node0": {
            "status": "
        },
        "node1": {
            ...
        }
    },

    // redundancy
    "ap_redundancy": {
        "num_aps": 15,
        "num_aps_with_switch_redundancy": 8,

        # for a VC / stacked switches
        "modules": {
            "1": {
                "num_aps": 15,
                "num_aps_with_switch_redundancy": 8
            },
            ...
        }
    }
}

Device Stat Definition

Also see Device Config

Name Type Description
mac string device mac
model string device model
type string device type, ap / ble
serial string serial
version string firmware version
last_seen long last seen timestamp
name string device name if configured
hostname string hostname reported by the device
ip string IP address
ext_ip string External / Public IP
status string connected / disconnected / restarting / upgrading
uptime long how long, in seconds, has the device been up (or rebooted)
num_clients int how many wireless clients are currently connected
num_wlans int how many WLANs are applied to the device
tx_bps float rate of transmitting traffic to the clients, bits/seconds, last known
rx_bps float rate of receiving traffic from the clients, bits/seconds, last known
tx_bytes float amount of transmitting traffic to the clients, since reboot
rx_bytes float amount of receiving traffic from the clients, since reboot
tx_pkts float amount of transmitting traffic to the clients, since reboot
rx_pkts float amount of receiving traffic from the clients, since reboot
locating boolean whether the device is in locating mode (LED blinking)
ip_config object IP config, see Device Config
ip_stat object current IP information, see Device Config
module_stat array device chassis stats, member index == array index (e.g. member 0 is at index 0)
if_stat object a map of interface stats
memory_stat object memory usage stat (for virtual chassis, memory usage of master RE)
cpu_stat object a map of CPU usage stat
module_stat.vc_role string device chassis stack role (e.g. master/backup)
ips object all IPs the devices has, internal interface name -> CIDR mapping
radio_config object a map of radio config, see Device Config
led object device LED control, see Device Config
env_stat object device environment, including CPU temperature, Ambient temperature, Humidity, Attitude, Pressure, Accelerometers, Magnetometers and vCore Voltage
locked boolean whether this AP is considered locked (placement / orientation has been vetted)
last_trouble object last trouble code of switch
auto_placement object auto placement stats
gps_stat object gps stats
has_pcap boolean whether the switch supports packet capture
expiring_certs object a map of certificate serial numbers to their expiry timestamps (in epoch) for certificates expiring within 30 days
ant_mode string internal / external antenna for AP which supports selectable antennas

Radio Config / Status

Name Type Description
radio_stat object a map of radio stats, key can be band_24 / band_5
band_24 object radio stat of 2.4G radio
band_5 object radio stat of 5G radio
band_6 object radio stat of 6G radio
mac string radio (base) mac, it can have 16 bssids (e.g. 5c5b350001a0-5c5b350001af)
channel int current channel the radio is running on
bandwidth int current channel bandwidth, 20 / 40 / 80 / 160
power int transmit power (in dBm)
util_all int all utilization in percentage
util_tx int transmission utilization in percentage
util_rx_in_bss int reception of “In BSS” utilization in percentage, only frames that are received from AP/STAs within the BSS
util_rx_other_bss int reception of “Other BSS” utilization in percentage, all frames received from AP/STAs that are outside the BSS
util_unknown_wifi int reception of “No Category” utilization in percentage, all 802.11 frames that are corrupted at the receiver
util_non_wifi int reception of “No Packets” utilization in percentage, received frames with invalid PLCPs and CRC glitches as noise
util_undecodable_wifi int reception of “UnDecodable Wifi” utilization in percentage, only Preamble, PLCP header is decoded, Rest is undecodable in this radio
dynamic_chaining_enabled boolean Use dynamic chaining for downlink
tx_chain int number of chains to use for tx. This is only used when dynamic chaining is not enabled
rx_chain int number of chains to use for rx. This is only used when dynamic chaining is not enabled
num_wlans int how many WLANs are applied to the device

Port Status

Name Type Description
port_stat objects ports status
eth0 object port status of eth0 (eth0+PoE)
eth1 object port status of eth1
eth2 object port status of eth2
eth3 object port status of eth3
module object port status of module port
up boolean whether the port is up, default is false (down)
speed int 10 / 100 / 1000 / 2500, Mbps (mega bits per second)
full_duplex boolean true / false

L2TP Status

Name Type Description
l2tp_stat objects l2tp tunnel status (key is the wxtunnel_id)
wxtunnel_id string WxlanTunnel ID
state string idle / wait-ctrl-reply / wait-ctrl-conn / established / established_with_sessions
uptime int uptime
sessions list list of sessions
remote_id string WxlanTunnel Remote ID (user-configured)
remote_sid int remote sessions id (dynamically unless Tunnel is said to be static)
local_sid int remote sessions id (dynamically unless Tunnel is said to be static)

LLDP Status

Name Type Description
lldp_stat object LLDP neighbor information and power negotiations. For backward compatibility, when multiple neighbors exist, only information from the first neighbor is displayed.
lldp_stats object Map of ethernet ports (“eth0”, “eth1”, etc.) to their respective LLDP neighbor information and power negotiations. Only present when multiple neighbors exist.
system_name string Name of the switch, e.g. “TC2-OWL-Stack-01”
system_desc string Description provided by switch, e.g. “HP J9729A 2920-48G-POE+ Switch”
mgmt_addr string Management IP address of the switch
mgmt_addrs string[] List of management IP addresses (IPv4 and IPv6)
port_desc string Port description, e.g. “2/20”, “Port 2 on Switch0”
port_id string Port identifier
chassis_id string Chassis identifier
lldp_med_supported boolean Whether LLDP-MED is supported
power_request_count int Number of power negotiations
power_allocated int In mW, power allocated by PSE
power_requested int In mW, power requested by PD
power_draw int In mW, total power needed by PD
power_src string Single power source (DC Input / PoE 802.3at / PoE 802.3af / PoE 802.3bt / MULTI-PD / LLDP / ? (unknown)).
power_srcs string A list of multiple power sources. (DC Input / PoE 802.3at / PoE 802.3af / PoE 802.3bt / MULTI-PD / LLDP / ? (unknown) / NONE (no power on the port))
power_avail `int In mW, total Power Avail at AP from pwr source
pwr_needed int In mW, total Power needed incl Peripherals
power_budget int In mW, surplus if positive or deficit if negative
power_constrained boolean Whether power is insufficient
power_opmode string Constrained mode

BLE Stat

Name Type Description
ble_stat objects BLE stats
tx_pkts float TxBytes
tx_bytes float TxCommands
tx_resets float resets due to tx hung
rx_pkts float RxEvents
rx_bytes float RxBytes
ibeacon_enabled boolean Whether iBeacon is Enabled
ibeacon_uuid string UUID value for iBeacon
ibeacon_major int Major number for iBeacon
ibeacon_minor int Minor number for iBeacon
eddystone_uid_enabled boolean Whether Eddystone-UID beacon is enabled
eddystone_uid_namespace string Eddystone-UID namespace
eddystone_uid_instance string Eddystone-UID instance for the device
eddystone_uid_freq_msec int Frequency (msec) of data emmit by Eddystone-UID beacon
eddystone_url_enabled boolean Whether Eddystone-URL beacon is enabled
eddystone_url_url string URL pointed by Eddystone-URL beacon
eddystone_url_freq_msec int Frequency (msec) of data emmit by Eddystone-UID beacon

Firmware Upgrade Status

Name Type Description
fwupdate object last firmware update status
timestamp float timestamp
status string starting / inprogress / success / error
status_id int the internal status id
progress int progress of upgrading expressed in percentage

Interface Stat

Name Type Description
port_id string interface name
tx_pkts int Output packets
rx_pkts int Input packets
tx_bytes int Output bytes
rx_bytes int Input bytes
up boolean whether the port is up, default is false (down)

CPU Stat

Name Type Description
system int Percentage of CPU time being used by system processes
idle int Percentage of CPU time that is idle
interrupt int Percentage of CPU time being used by interrupts
user int Percentage of CPU time being used by user processes
load_avg array Load averages for the last 1, 5, and 15 minutes

Last Trouble

Name Type Description
code enum last trouble code of the switch reported by lldp neighbors
timestamp long timestamp of last trouble code reported
Trouble Code Possible Values
Code Description
102 No DHCP lease received on any interface
103 No default gateway
104 Gateway unreachable
105 No DNS server
106 DNS lookup failed
108 Agent cannot connect to controller
109 Authentication failed
110 Underlying service (i.e. Netconf/SSH/HTTPS) is down
113 DNS failure with Mist cloud
114 Empty DNS response with Mist cloud

Autoplacement Stats

Name Type Description
x float X Autoplaced Position in pixels
y float Y Autoplaced Position in pixels
x_m float X Autoplaced Position in meters
y_m float Y Autoplaced Position in meters
status string Basic Placement Status
status_detail string Additional info about placement status
recommended_anchor boolean Flag to represent if AP is recommended as an anchor by auto placement service
info object Additional information about auto placements AP data
Auto Placement Info
Name Type Description
cluster_number int All APs sharing a given cluster number can be placed relative to each other
orientation_state int The orientation of an AP
probability_surface object Coordinates representing a circle where the AP is most likely exists in the event of an inaccurate placement result
Auto Placement Probability Surface
Name Type Description
radius float The radius representing placement uncertainty, measured in pixels
radius_m float The radius representing placement uncertainty, measured in meters
x float X-coordinate of the potential placement’s center, measured in pixels
y float Y-coordinate of the potential placement’s center, measured in pixels

GPS Stat

Name Type Description
altitude float The elevation of the AP above sea level, measured in meters.
latitude float The geographic latitude of the AP, measured in degrees.
longitude float The geographic longitude of the AP, measured in degrees.
src string The origin of the GPS data, either gps from this device’s GPS estimates or other_ap from neighboring device GPS estimates.
timestamp long The unix timestamp when the GPS data was recorded.
accuracy float The estimated accuracy or accuracy of the GPS coordinates, measured in meters.

Attributes are similar to a client Name|Type| Description ----|----|------------ mesh_downlinks|object| mesh downlinks established

Import Information for Multiple Devices

POST /api/v1/sites/:site_id/devices/import

Upload via CSV file

A multi-part POST

"file": CSV File

Device Import CSV File Format

mac,name,map_id,x,y,height,orientation,labels,band_24.power,band_24.bandwidth,band_24.channel,band_24.disabled,band_5.power,band_5.bandwidth,band_5.channel,band_5.disabled,band_6.power,band_6.bandwidth,band_6.channel,band_6.disabled
5c5b53010101,"AP 1",845a23bf-bed9-e43c-4c86-6fa474be7ae5,30,10,2.3,45,"guest, campus, vip",1,20,0,false,0,40,0,false,17,80,0,false

Parameters

Name Type Description
mac string device mac
name string name / label of the device
map_id string map where the device belongs to
x float x in pixel
y float y in pixel
orientation int orientation, 0-359, in degrees, up is 0, right is 90.
height float height, in meters
labels list list of comma-separated strings
band_24.power int band 2.4G power
band_24.bandwidth int band 2.4G bandwidth
band_24.channel int band 2.4G channel
band_24.disabled boolean if band 2.4G is disabled
band_5.power int band 5G power
band_5.bandwidth int band 5G bandwidth
band_5.channel int band 5G channel
band_5.disabled boolean if band 5G is disabled
band_6.power int band 6G power
band_6.bandwidth int band 6G bandwidth
band_6.channel int band 6G channel
band_6.disabled boolean if band 6G is disabled

POST via JSON

Alternatively, you can POST it via a equivalent JSON

[
    {
        "mac": "5c5b53010101",
        "name": "AP 1",
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "x": 30,
        "y": 10,
        "height": 2,3,
        "orientation": 45,
        "labels": "guest, campus, vip"
    },
    ...
]

Response

{
    "updated": [ "5c5b53010101" ],
    "errors": [
        "Device[2c47d2c7b2a2] does not exist",
        "Map[845a23bf-bed9-e43c-4c86-6fa474be7ae5] does not exist"
    ]
}

Export Device Information

To download the exported device information

GET /api/v1/sites/:site_id/devices/export

Response

mac,name,map_id,x,y,height,orientation,labels,type
5c5b53010101,"AP 1",845a23bf-bed9-e43c-4c86-6fa474be7ae5,30,10,2.3,45,"guest, campus, vip","ap"

Get stat for a single device

GET /api/v1/sites/:site_id/stats/devices/:device_id

Request

Name Type Description
fields list list of comma-separated strings. E.g.: ports,tunnels,vpn_peers,bgp_peers

Response

{
    # This object is like object returned by `GET /api/v1/sites/:site_id/stats/devices` array,
    # but can also include the following optional fields if specified in the `fields` parameter.

    # `ports` -- only present when included in `fields` parameter
    # `ports` is like `port_stat` but is an array.
    # This array can be converted to a dict using (port_id, node) as key.
    "ports": [
        // Each port object is same as `GET /api/v1/sites/:site_id/stats/ports/search` result object,
        // except that org_id, site_id, mac, model are removed
        {
            "port_id": "ge-0/0/1",
            "node": "node0",        // Absent if this device is standalone
            .
            .
            .
        }            
    ],

    # `tunnels` -- only present when included in `fields` parameter
    "tunnels": [
        // Each port object is same as `GET /api/v1/orgs/:org_id/stats/tunnels/search` result object,
        // except that org_id, site_id, mac, model are removed
        {
            "node": "node0",
            "tunnel_name": "SECHub1",
            "protocol": "ipsec",
            "ike_version": "2",
            "auth_algo": "AES_GCM_16_128-HMAC_SHA2_256-MODP2048",
            "priority": "primary",
            "wan_name": ...,
            "ip": ...,
            "peer_ip": ...,
            "peer_host": ...,
            "rx_bytes": ...,
            "tx_bytes": ...,
            "rx_pkts": ...,
            "tx_pkts": ...,
            "up": false,
            "uptime": 0,
            "last_event": "No response from peer. Negotiation failed",
            "last_seen":1723072157.123456
        }
    ],

    # `vpn_peers` -- only present when included in `fields` parameter
    "vpn_peers": [
        // Each port object is same as `GET /api/v1/orgs/:org_id/stats/vpn_peers/search` result object,
        // except that org_id, site_id, mac, model are removed
        {
            "node": "node0"
            "vpn_name": ...,
            "type": "svr",
            "vpn_role": "spoke",
            "router_name": ...,
            "wan_name": ...,
            "port_id": ...,
            "network_interface": ...,
            "peer_mac": ...,
            "peer_router_name": ...,
            "peer_site_id": ...,
            "peer_port_id": ...,
            "latency": 6.0,
            "mos": 440.0,
            "loss": 0.0,
            "jitter": 0.0,
            "mtu": 1500,
            "is_active": true,
            "up": true,
            "uptime": 61975,
            "last_seen": 1723072157.123456
        }
    ],

    # `bgp_peers` -- only present when included in `fields` parameter
    "bgp_peers": [
        // Each port object is same as `GET /api/v1/sites/:site_id/stats/bgp_peers/search` result object,
        // except that org_id, site_id, mac, model are removed
        {
            "node": "node0",
            "neighbor_as": 65010,
            "local_as": 65012,
            "evpn_overlay": false,
            "evpn_underlay": true,
            "vrf_name": "default",
            "neighbor": ...,
            "neighbor_mac": ...,
            "state": "established",
            "rx_pkts": 2363,
            "tx_pkts": 2350,
            "rx_routes": 9,
            "tx_routes": 3,
            "up": true,
            "uptime": 63908,
            "timestamp": 1723072157.290559
        }
    ],
}

Client Stats

Get wireless client stat

GET /api/v1/sites/:site_id/stats/clients
GET /api/v1/sites/:site_id/stats/maps/:map_id/clients
GET /api/v1/sites/:site_id/stats/devices/:device_id/clients

Response

[
    {
        "mac": "5684dae9ac8b",
        "last_seen": 1470417522,

        "username": "david@mist.com",
        "hostname": "David-Macbook",
        "os": "OS X 10.10.2",
        "manufacture": "Apple",
        "family": "iPhone",
        "model": "6S",

        "ip": "192.168.1.8",
        "ip6": "2001:db8:3333:4444:5555:6666:7777:8888",

        "ap_mac": "5c5b35000010",
        "ap_id": "0000000-0000-0000-1000-5c5b35000010",
        "ssid": "corporate",
        "wlan_id": "be22bba7-8e22-e1cf-5185-b880816fe2cf",
        "psk_id": "732daf4e-f51e-8bba-06f9-b25cd0e779ea",

        "uptime": 3568,
        "idle_time": 3,
        "power_saving": true,
        "band": "24",
        "proto": "a",
        "key_mgmt": "WPA2-PSK/CCMP",
        "dual_band": false,

        "channel": 7,
        "vlan_id": "",
        "airespace_ifname": "",
        "rssi": -65,
        "snr": 31,
        "tx_rate": 65,
        "rx_rate": 65,

        "tx_bytes": 175132,
        "tx_bps": 6,
        "tx_packets": 1566,
        "tx_retries": 500,
        "rx_bytes": 217416,
        "rx_bps": 12,
        "rx_packets": 2337,
        "rx_retries": 5,

        "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
        "x": 53.5,
        "y": 173.1,
        "x_m": 5.35
        "y": 17.31
        "num_locating_aps": 3,

        "is_guest": true,
        "guest": {
            "authorized": True,
            "authorized_time": 1428939300,
            "authorized_expiring_time": 1429109300

            "name": "John",
            "email": "john@abc.com",
            "company": "ABC",
            "field1": "whatever",
            "cross_site": True
        },
        "airwatch": {
            "authorized": True
        },
        "_ttl": 250
    }
]

Client Stat Definition

Name Type Description
mac string client mac
hostname string hostname that we learned from sniffing DHCP
username string username that we learned from 802.1X exchange or Per-user PSK or User Portal
manufacture string device manufacture, through fingerprinting or OUI
os string device os, through fingerprinting
family string device family, through fingerprinting. iPod / Nexus Galaxy / Windows Mobile or CE …
model string device model, may be available if we can identify them
ap_mac string AP the client is connected to
ap_id string AP ID the client is connected to
ssid string SSID the client is connected to
wlan_id string WLAN ID the client is connected to
psk_id string PSK id (if multi-psk is used)
uptime long how long, in seconds, has the client been connected
idle_time long how long, in seconds, has the client been idle (since the last RX packet)
last_seen long last seen timestamp
power_saving boolean if it’s currently in power-save mode
band string “24” or “5”
proto string b / g / n / a / ac
key_mgmt string e.g. WPA2-PSK/CCMP
dual_band boolean whether the client is dual-band capable (determined by whether we’ve seen probe requests from both bands)
channel int current channel
vlan_id string vlan id, could be empty (from older AP)
rssi int signal strength
snr int signal over noise
tx_rate float TX Rate, Mbps
rx_rate float RX Rate, Mbps
tx_bps float rate of transmitting traffic to the clients, bits/seconds, last known
rx_bps float rate of receiving traffic from the clients, bits/seconds, last known
tx_bytes float amount of traffic sent to client since client connects
rx_bytes float amount of traffic received from client since client connects
tx_pkts float amount of traffic sent to client since client connects
rx_pkts float amount of traffic received from client since client connects
tx_retries float amount of tx retries
rx_retries float amount of rx retries
map_id string estimated client location - map_id
x int estimated client location in pixels
y int estimated client location in pixels
x_m int estimated client location in meter
y_m int estimated client location in meter
num_locating_aps int number of APs used to locate this client
accuracy int estimated client location accuracy, in meter
is_guest boolean whether this is a guest, default is false
guest object information about this portal
authorized boolean whether this guest is authorized, default is false
authorized_time int when the guest is authorized
authorized_expiring_time int when the guest authorization will expire
cross_site boolean whether this guest is authorized for cross site, default is false
airwatch object information if airwatch enabled
_ttl int TTL of the validity of the stat

Get Wireless Client Stat with More Details

GET /api/v1/sites/:site_id/stats/clients/:client_mac

Response

{
    ...
    // in addition to the same information as provided from GET /api/v1/sites/:site_id/stats/clients
    // it also has

    "zones": [
        {
            "id": "8ac84899-32db-6327-334c-9b6d58544cfe",
            "since": 1428939600
        }
    ],
    "vbeacons": [
        {
            "id": "d379d29d-24b4-96c5-5dd4-6f2a2dc5aaeb",
            "since": 1428939300
        }
    ],

    "rssizones": [
        {
            "id": "b49390de-f124-4854-9404-0e59d63e6b99",
            "since": 1428939400
        }
    ],

    "wxrule_id": "ac3f89d3-15ad-685a-7c1e-cc5c5f1df07a",
    "wxrule_usage" [
        {
            "tag_id": "dfc6d6e0-8411-45a9-833a-9cbf21a311b2",
            "usage": 20
        },
        {
            "tag_id": "00000000-0000-0000-0000-000000000000",
            "usage": 4
        }
    ]
}

Client Stat Definition

Name Type Description
zones list list of zone_id’s where client is in and since when (if known)
vbeacons list list of beacon_id’s where the client is in and since when (if known)
rssizones list list of rssizone_id’s where client is in and since when (if known)
wxrule_id string current WxlanRule using for a Client or an authorized Guest (portal user). null if default rule is matched.
wxrule_usage list current WxlanRule usage per tag_id
predictive object derived information from backend
client_dl float estimated wireless client download throughput, in Mbps
wan_dl float estimated WAN download throughput, in Mbps

Subscribe to Client Stats Updates

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/clients"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/stats/clients",
    "data": {
        "mac": "5684dae9ac8b",
        ...
        // same as above
    }
}

Get AP wired client stat

GET /api/v1/sites/:site_id/stats/clients?wired=true
GET /api/v1/sites/:site_id/stats/clients/:mac?wired=true
GET /api/v1/sites/:site_id/stats/clients/:ap_id?wired=true

Response

[
    {
        "mac": "e45f01319a43",
        "site_id": "1916d52a-4a90-11e5-8b45-1258369c38a9",
        "ap_id": "00000000-0000-0000-1000-d420b085fdff",
        "rx_pkts": 0,
        "tx_pkts": 0,
        "rx_bytes": 0,
        "tx_bytes": 0,
        "eth_port": "eth1",
        "auth_state": "authorizedForCompleteAccess",
        "vlan_id": 70,
        "last_seen": 1645060912.0751352,
        "uptime": 8723766
        "_ttl": 277,
        "_id": "003ee1bec926"
    }
]

Client Stat Definition

Name Type Description
mac string client mac
ap_id string AP ID the client is connected to
last_seen long time when last Tx/Rx observed
vlan_id string vlan id, could be empty (from older AP)
tx_bytes float amount of traffic sent to client since client connects
rx_bytes float amount of traffic received from client since client connects
tx_pkts float amount of traffic sent to client since client connects
rx_pkts float amount of traffic received from client since client connects
_ttl int TTL of the validity of the stat
auth_state string client authorization status
uptime long how long, in seconds, has the client been connected
eth_port string port on AP where the wired client is connected

Subscribe to locations for clients on a map

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/maps/:map_id/clients"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/stats/maps/63eda950-c6da-11e4-a628-60f81dd250cc/clients",
    "data": {
        "mac": "5684dae9ac8b",
        "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
        "x": 53.5,
        "y": 173.1,
        "num_locating_aps": 3
    }
}

Disconnect a Client

This disconnect a client (and it’s likely to connect back)

POST /api/v1/sites/:site_id/clients/:client_mac/disconnect

Reauth a 802.1x Client

Trigger a CoA (change of authorization) against a client

POST /api/v1/sites/:site_id/clients/:client_mac/coa

Disconnect Multiple Clients

To unauthorize multiple clients, use

POST /api/v1/sites/:site_id/clients/disconnect

Request

[
    "683b679ac024",
    ...
]

Unauthorize a Client

This unauthorize a client (if it’s a guest) and disconnect it. From the guest’s perspective, s/he will see the splash page again and go through the flow (e.g. Terms of Use) again.

POST /api/v1/sites/:site_id/clients/:client_mac/unauthorize

Unauthorize Multiple Clients

To unauthorize multiple clients, use

POST /api/v1/sites/:site_id/clients/unauthorize

Request

[
    "683b679ac024",
    ...
]

Search Wireless Clients

GET /api/v1/sites/:site_id/clients/search?hostname=john&limit=10

Request

Name Type Description
mac string partial / full MAC address
hostname string partial / full hostname
device string device type, e.g. Mac, Nvidia, iPhone
os string os, e.g. Sierra, Yosemite, Windows 10
model string model, e.g. “MBP 15 late 2013”, 6, 6s, “8+ GSM”
ap string AP mac where the client has connected to
ssid string SSID
text string partial / full MAC address, hostname, username, psk_name or ip
psk_id string PSK ID
psk_name string PSK name
nacrule_id string nacrule_id

NOTE: fuzzy logic can be used with ‘*’, supported filters: mac, hostname, device, os, model. E.g. /clients/search?device=Mac*&hostname=jerry

Response

{
    "results": [
        {
            "hostname": [
                "jerry"
            ],
            "ap": [
                "5c5b350e0492",
                "5c5b350eb39d",
                "5c5b350e03c0"
            ],
            "ip": [
                "192.168.5.43",
                "192.168.20.125"
            ],
            "vlan": [
                1
            ],
            "mac": "60f81dd250cc",
            "device": [
                "Mac"
            ],
            "os": [
                "Sierra",
                "High Sierra"
            ],
            "model": [
                "",
                "MBP 15\" late 2013"
            ],
            "ssid": [
                "Guest"
            ],
            "psk_id": [
                "9d31efe6-e205-47eb-9f1d-dd66d8ef66bd"
            ],
            "psk_name": [
                "test key"
            ],
        }
        ...
    ]
}

Count by Distinct Attributes of Clients

GET /api/v1/sites/:site_id/clients/count?distinct=hostname

Request

In addition to the filters that you can have in the search

Name Type Description
distinct string ssid, ap, ip, vlan, hostname, os, model, device, default is device

NOTE: the filters from /clients/search can also be used. E.g. /clients/count?distinct=device&ssid=Guest

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 10,
    "distinct": "device",

    "total": 2,
    "results": [
        {
            "device": "Mac",
            "count": 61
        },
        {
            "device": "iPhone",
            "count": 44
        }
    ]
}

Search Client Events

GET /api/v1/sites/:site_id/clients/events/search

Request

Name Type Description
type string event type, e.g. MARVIS_EVENT_CLIENT_FBT_FAILURE
reason_code int for assoc/disassoc events
ssid string SSID
ap string AP MAC
proto string b / g / n / a / ac
band string 5 / 24
wlan_id string wlan_id

Response

{
    "start": 1512572151,
    "end": 1513176951,
    "limit": 10,

    "total": 1,
    "results": [
        {
            "ap": "5c5b350eb31b",
            "ssid": "Guest",
            "bssid": "5c5b350918f1",
            "proto": "ac",
            "timestamp": 1513358874.667,
            "band": "5",
            "type_code": 15,
            "type": "CLIENT_DNS_OK",
            "text": "Status code 0 \"Successful\" ",
            "channel": 149,
            "wlan_id": "be22bba7-8e22-e1cf-5185-b880816fe2cf"
        }
    ]
}

Count by Distinct Attributes of Client-Events

GET /api/v1/sites/:site_id/clients/events/count?distinct=type

Request

Name Type Description
distinct string type / proto / band / channel / wlan_id / ssid

NOTE: the filters from /clients/:mac/events can also be used. E.g. /clients/events/count?distinct=device&ssid=Guest

Response

{
    "start": 1513276353,
    "end": 1513362753,
    "limit": 3,

    "total": 3,
    "results": [
        {
            "count": 580,
            "type": "CLIENT_AUTHENTICATED"
        },
        {
            "count": 536,
            "type": "CLIENT_GW_ARP_OK"
        },
        {
            "count": 519,
            "type": "CLIENT_ASSOCIATION"
        }
    ]
}

Search Client Sessions

GET /api/v1/sites/:site_id/clients/sessions/search

Request

Name Type Description
ap string AP MAC
band string 5 / 24
client_family string E.g. “Mac”, “iPhone”, “Apple watch”
client_manufacture string E.g. “Apple”
client_model string E.g. “8+”, “XS”
client_os string E.g. “Mojave”, “Windows 10”, “Linux”
ssid string SSID
wlan_id string wlan_id
psk_id string PSK ID
psk_name string PSK name

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 10,
    "total": 100,
    "results": [
        {
            "ap": "5c5b350e0262",
            "disconnect": 1565208448.662,
            "ssid": "Dummy WLAN 2",
            "tags": [
                "disassociate"
            ],
            "org_id": "3139f2c2-fac6-11e5-8156-0242ac110006",
            "site_id": "70e0f468-fc13-11e5-85ad-0242ac110008",
            "mac": "b019c66c8348",
            "connect": 1565208388.568,
            "band": "5",
            "timestamp": 1565208448.662,
            "duration": 60.09423865,
            "client_manufacture": "Apple",
            "wlan_id": "99bb4c74-f954-4f36-b844-6b030faffabc",
            "psk_id": "8a4a134b-210a-4908-a6be-105dca78e226",
            "psk_name": "test key"
        },
        ...
    ]
}

Count by Distinct Attributes of Client Sessions

GET /api/v1/sites/:site_id/clients/sessions/count

Request

In addition to the filters that you can have in the search

Name Type Description
distinct string ssid, wlan_id, ap, mac, client_family, client_manufacture, client_model, client_os, default is mac

NOTE: the filters from /clients/sessions/search can also be used. ( E.g. /clients/sessions/count?distinct=client_manufacture)

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 100,
    "distinct": "client_manufacture",
    "total": 20,
    "results": [
        {
            "count": 217,
            "client_manufacture": "Apple"
        },
        {
            "count": 35,
            "client_manufacture": "Intel Corporate"
        },
        ...
    ]
}

Get Events for a Wireless Client

GET /api/v1/sites/:site_id/clients/:client_mac/events

Count by Distinct Attributes of Skyatp Events (WIP)

GET /api/v1/sites/:site_id/skyatp/events/count?distinct=type

Request

Name Type Description
distinct string type, mac, device_mac, threat_level, default is type

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 10,
    "distinct": "type",

    "total": 2,
    "results": [
        {
            "type": "mw",
            "count": 6
        },
        {
            "device": "fs",
            "count": 3
        }
    ]
}

Search Skyatp Events (WIP)

GET /api/v1/sites/:site_id/skyatp/events/search

Request

Name Type Description
type string event type, e.g. cc, fs, mw
mac string client MAC
device_mac string device MAC
threat_level int threat level
ip string client ip

Response

{
    "start": 1512572151,
    "end": 1513176951,
    "limit": 10,

    "total": 1,
    "results": [
        {
            "mac": "b019c66c8348",
            "threat_level": 7,
            "device_mac": "658279bb1fa4",
            "timestamp": 1592524478,
            "org_id": "3139f2c2-fac6-11e5-8156-0242ac110006",
            "site_id": "70e0f468-fc13-11e5-85ad-0242ac110008",
            "type": "cc",
            "ip": "172.16.0.11"
        }
    ]
}

Get Guest Authorizations

GET /api/v1/sites/:site_id/guests

Parameters

Name Type In Description
wlan_id string query (optional) UUID of single or multiple (Comma separated) WLAN under Site site_id (to filter by WLAN)

Response

[
    {
        "mac": "5684dae9ac8b",
        "authorized": true,
        "authorized_time": 1480704355,
        "authorized_expiring_time": 1480704955,
        "name": "John Smith",
        "email": "john@abc.com",
        "company": "abc",
        "field1": "xxx"
    }
]
Name Type Description
mac string mac
authorized boolean whether the guest is current authorized
authorized_time long when the guest was authorized
authorized_expiring_time long when the authorization would expire
name string optional, the info provided by user
email string optional, the info provided by user
company string optional, the info provided by user
field1 string optional, the info provided by user

Get Guest Authorization

GET /api/v1/sites/:site_id/guests/:guest_mac

Response

[
    {
        "mac": "5684dae9ac8b",
        "authorized": true,
        "authorized_time": 1480704355,
        "authorized_expiring_time": 1480704955,
        "name": "John Smith",
        "email": "john@abc.com",
        "company": "abc",
        "field1": "xxx"
    }
]
Name Type Description
mac string mac
authorized boolean whether the guest is current authorized
authorized_time long when the guest was authorized
authorized_expiring_time long when the authorization would expire
name string optional, the info provided by user
email string optional, the info provided by user
company string optional, the info provided by user
field1 string optional, the info provided by user

Update Guest Authorization

PUT /api/v1/sites/:site_id/guests/:guest_mac

Request

{
    "name": "guest1",
    "email": "guest1@email.com",
    "company":"companyXYZ",
    "minutes": 60,
    "field1": "value1",
    ......
}
Name Type Description
minutes int minutes, the maximum is 259200 (180 days)

Delete Guest Authorization

DELETE /api/v1/sites/:site_id/guests/:guest_mac

Search Authorized Guest

GET /api/v1/sites/:site_id/guests/search?wlan_id=88ffe630-95b8-11e8-b294-346895ed1b7d&limit=2

Response

{
    "end": 1531862583.0,
    "results": [
        {
            "ssid": "openNet",
            "timestamp": 1531782218,
            "company": "mistsystems",
            "auth_method": "passphrase",
            "ap": "5c5b350e0001",
            "authorized_expiring_time": 1531810258.186273,
            "authorized_time": 1531782218,
            "email": "user@mistsys.com",
            "name": "john"
        },
        {
            "ssid": "openNet",
            "timestamp": 1531782632,
            "company": "xyz inc.",
            "auth_method": "facebook",
            "ap": "5c5b350e0001",
            "authorized_expiring_time": 1531810821.145,
            "authorized_time": 1531782632,
            "email": "cool_user@yahoo.com",
            "name": "John White"
        }
    ],
    "next": "/api/v1/sites/8aaba0aa-09cc-44bd-9709-33b98040550c/guests/search?wlan_id=88ffe630-95b8-11e8-b294-346895ed1b7d&end=1531855849.000&limit=2&start=1531776183.0",
    "start": 1531776183.0,
    "limit": 2,
    "total": 14
}

Count Authorized Guest

GET /api/v1/sites/:site_id/guests/count?distinct=auth_method

Response

{
    "end": 1531862583.0,
    "results": [
        {
            "auth_method": "passphrase",
            "count": 2
        },
        {
            "auth_method": "facebook",
            "count": 4
        }
    ],
    "start": 1531776183.0,
    "total": 2
}

Zone Stats

Get Zone Stats

GET /api/v1/sites/:site_id/stats/zones?map_id=845a23bf-bed9-e43c-4c86-6fa474be7ae5

Response

[
    {
        "id": "8ac84899-32db-6327-334c-9b6d58544cfe",
        "name": "Board Room",
        "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
        "num_assets": 0,
        "assets_waits": {
            "max": 0,
            "min": 0,
            "avg": 0,
            "p95": 0
        }
        "num_sdkclients": 10,
        "sdkclients_waits": {
            "max": 3610,
            "min": 600,
            "avg": 1200,
            "p95": 2800
        }
        "num_clients": 80,
        "clients_waits": {
            "max": 3610,
            "min": 600,
            "avg": 1200,
            "p95": 2800
        }
    }
]

Zone Stat Definition

Name Type Description
id string id of the zone
name string name of the zone
map_id string map_id of the zone
sdkclient_waits object sdkclient wait time right now
client_waits object client wait time right now
asset_waits object ble asset wait time right now
num_assets int number of assets
num_clients int number of wifi clients (unconnected + connected)
num_sdkclients int number of sdk clients
max int longest wait time in seconds
min int shortest wait time in seconds
avg int average wait time in seconds
p95 int 95th percentile of all the wait time(s)

Get Detail Zone Stats

GET /api/v1/sites/:site_id/stats/<zones|rssizones>/:zone_id

Response

{
    "id": "8ac84899-32db-6327-334c-9b6d58544cfe",
    "name": "Board Room",
    "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
    "num_sdkclients": 0,
    "num_clients": 80,
    "client_waits": {
        "max": 3610,
        "min": 600,
        "avg": 1200,
        "p95": 2800
    },
    "sdkclients": [
        "7e2b463d-c91c-ff7d-f3c0-6eccc6949ff8"
        ...
    ],
    "clients": [
        "5684dae9ac8b",
    ]
}

Zone Stat Definition

Name Type Description
id string id of the zone
name string name of the zone
map_id string map_id of the zone
sdkclient_waits object sdkclient wait time right now
client_waits object client wait time right now
sdkclients list list of sdkclients currently in the zone and when they entered
clients list list of clients currently in the zone and when they entered
assets list list of ble assets currently in the zone and when they entered
max int longest wait time in seconds
min int shortest wait time in seconds
avg int average wait time in seconds
p95 int 95th percentile of all the wait time(s)

Search Zone Sessions

Recent Zone Visits (7-days) are searchable via the following APIs

GET /api/v1/sites/:site_id/zones/visits/search?user_type=asset&scope_id=85fbba9e-4e12-11e6-9188-0242ac110007&limit=2
GET /api/v1/sites/:site_id/rssizones/visits/search?user_type=asset&scope_id=85fbba9e-4e12-11e6-9188-0242ac110007&limit=2

Request

Name Type Description
user_type string user type, client (default) / sdkclient / asset
user string client MAC / Asset MAC / SDK UUID
scope_id string if scope == map/zone/rssizone, the scope id
scope string scope, site (default) / map / zone / rssizone
tags string tags

Response

{
    "end": 1541705289.769911,
    "results": [
        {
            "scope": "map",
            "enter": 1541705254,
            "user": "c4b301c81166",
            "timestamp": 1541705254
        },
        {
            "scope": "map",
            "enter": 1541705247,
            "user": "c57bbb6a1277",
            "timestamp": 1541705247
        }
    ],
    "next": "/api/v1/sites/67970e46-4e12-11e6-9188-0242ac110007/zones/visits/search?limit=2&end=1541705247.000&scope_id=85fbba9e-4e12-11e6-9188-0242ac110007&user_type=asset&start=1541618889.77",
    "start": 1541618889.769886,
    "limit": 2,
    "total": 5892
}

Count Zone Sessions

GET /api/v1/sites/:site_id/zones/visits/count?distinct=scope_id
GET /api/v1/sites/:site_id/rssizones/visits/count?distinct=scope_id

Request

Name Type Description
user_type string user type, client (default) / sdkclient / asset
user string client MAC / Asset MAC / SDK UUID
scope_id string if scope == map/zone/rssizone, the scope id
scope string scope, site (default) / map / zone / rssizone

Response

{
    "end": 1531862583.0,
    "results": [
        {
            "scope_id": "f0c38357-9370-4506-84f9-0f94a63faddd",
            "count": 18
        },
        {
            "scope_id": "a002eb82-6d08-4556-b8c5-2f2547a7c7f8",
            "count": 7
        },
        {
            "scope_id": "85fbba9e-4e12-11e6-9188-0242ac110007",
            "count": 5
        }
    ],
    "start": 1531776183.0,
    "total": 3
}

Location

Get SdkClient Stats

This has information about

GET /api/v1/sites/:site_id/stats/maps/:map_id/sdkclients

Response

[
    {
        "id": "de87bf9d-183f-e383-cc68-6ba43947d403",
        "uuid": "ada72f8f-1643-e5c6-94db-f2a5636f1a64",
        "name": "John's iPhone",

        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "last_seen": 1428939600,
        "x": 60,
        "y": 80,

        "network_connection": {
            "type": "WiFi",
            "rssi": -75,
            "mac": "c3-b6-e5-af-41-15",
            "signal_level": 3
        }
    },
    ...
]

SDK Client Definition

Name Type Description
uuid string uuid of the sdk client
name string name of the sdk client (if provided)
map_id string map_id of the sdk client (if known), or null
last_seen long last seen timestamp
x int x (in pixels) of user location on the map (if known)
y int y (in pixels) of user location on the map (if known)
network_connection object various network connection info for the SDK client (if known, else omitted), with RSSI in dBm, and signal level as # of bars/signal indicator of signal strength

Get Detail Stats of a SdkClient

This has information about

GET /api/v1/sites/:site_id/stats/sdkclients/:sdkclient_uuid

Response

{
    "id": "de87bf9d-183f-e383-cc68-6ba43947d403",
    "uuid": "ada72f8f-1643-e5c6-94db-f2a5636f1a64",
    "name": "John's iPhone",

    "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
    "zones": [
        {
            "id": "8ac84899-32db-6327-334c-9b6d58544cfe",
            "since": 1428939600
        }
    ],
    "vbeacons": [
        {
            "id": "d379d29d-24b4-96c5-5dd4-6f2a2dc5aaeb",
            "since": 1428939300
        }
    ],

    "last_seen": 1428939600,
    "x": 60,
    "y": 80,

    "network_connection": {
        "type": "WiFi",
        "rssi": -75,
        "mac": "c3-b6-e5-af-41-15",
        "signal_level": 3
    }
}

SDK Client Definition

Name Type Description
uuid string uuid of the sdk client
name string name of the sdk client (if provided)
map_id string map_id of the sdk client (if known), or null
zones list list of zone_id’s of the sdk client is in and since when (if known)
vbeacons list list of beacon_id’s of the sdk client is in and since when (if known)
last_seen long last seen timestamp
x int x (in pixels) of user location on the map (if known)
y int y (in pixels) of user location on the map (if known)
network_connection object various network connection info for the SDK client (if known, else omitted), with RSSI in dBm, and signal level as # of bars/signal indicator of signal strength

Subscribe to sdkclients Stream

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/maps/:map_id/sdkclients"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/stats/maps/845a23bf-bed9-e43c-4c86-6fa474be7ae5/sdkclients",
    "data": {
        "id": "de87bf9d-183f-e383-cc68-6ba43947d403",
        "uuid": "ada72f8f-1643-e5c6-94db-f2a5636f1a64",
        "name": "John's iPhone",

        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",

        "last_seen": 1428939600,
        "x": 60,
        "y": 80
    }
}

Unconnected Client Location

GET /api/v1/sites/:site_id/stats/maps/:map_id/unconnected_clients

Response

[
    {
        "mac": "5684dae9ac8b",
        "ap_mac": "5c5b350e0410",
        "map_id": "ea77be98-ab51-4ff8-a863-ac3c8e1b1c3a",
        "x": 60,
        "y": 80,
        "rssi": -75.0,
        "manufacture": "Apple",
        "last_seen": 1428939600
    }
]

Definitions

Name Type Description
mac string mac address of the (unconnected) client
ap_mac string mac address of the AP that heard the client
map_id string map_id of the client (if known), or null
x int x (in pixels) of user location on the map (if known)
y int y (in pixels) of user location on the map (if known)
rssi int client RSSI observered by the AP that heard the client (in dBm)
manufacture string device manufacture, through fingerprinting or OUI
last_seen long last seen timestamp

Subscribe to Unconnected clients Stream

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/stats/maps/:map_id/unconnected_clients"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/stats/maps/63eda950-c6da-11e4-a628-60f81dd250cc/unconnected_clients",
    "data": {
         "mac": "5684dae9ac8b",
         "ap_mac": "5c5b350e0410",
         "map_id": "63eda950-c6da-11e4-a628-60f81dd250cc",
         "x": 60,
         "y": 80,
         "rssi": -75.0,
         "manufacture": "Apple",
         "last_seen": 1480715946,
         "num_locating_aps": 0
    }
}

RF Glass

WS /api-ws/v1/stream

subscribe RFGlass information

// for SDK Client
{
    "subscribe": "/sites/:site_id/sdkclients/:sdkclient_id/diag"
}

// WIFI Client
{
    "subscribe": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/clients/112233445566/diag"
}

// BLE Asset
{
    "subscribe": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/assets/7beb14fc-dc99-d51a-bc9e-9c7360db8520/diag"
}

Event if subscription is successful

{
    "event": "channel_subscribed",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/sdkclients/de87bf9d-183f-e383-cc68-6ba43947d403/diag"
}

Event if something is wrong

{
    "event": "subscribe_failed",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/sdkclients/de87bf9d-183f-e383-cc68-6ba43947d403/diag",
    "detail": "permission denied"
}

RF Glass Data

//For SDK Client
{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/sdkclients/de87bf9d-183f-e383-cc68-6ba43947d403/diag",
    "data": {
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "grid": {
            "topleft_x_m": -0.86,
            "topleft_y_m": 9.2486,
            "size_m": 0.5,
            "width": 40,
            "height": 40,
            "data": "<base-64 encoded data intended to be interpreted by atob() in JS>",
        },
        "motion": true,

        "avg_duration": 3,
        "vbles": [
            {
                "type": "device",
                "id": "00000000-0000-0000-1000-5c5b350e0060",
                "orientation": 90,
                "xyz_m": [ 5.79, 4.33, 3.04 ],
                "rssis": [ -52.32, -53, -55, -57, -60.25, null, null, -62, null ]
            },
            {
                "type": "beacon",
                "id": "00000000-0000-0000-1000-e74489000052",
                "xyz_m": [ 8.79, 10.33, 3.04 ],
                "rssi": -59.5
            }
        ],
        "peak": {
            "vble_id": "00000000-0000-0000-1000-e74489000052",
            "max_rssi": -53.428,
            "plf": -73,
            "ple": -21,
            "intercept": -52
        },

        // estimates based on probability surface, we'll always have this
        "raw_xyz_m": [ 18.7486, 10.13269, 0 ],
        "smoothed_xyz_m": [ 18.7486, 10.13269, 0 ],

        // available only if present
        "app_xyz_m": [18.714, 10.1102, 0],
        "dead_reckoning_xyz_m": [18.791, 10.1613, 0],
        "dead_reckoning_raw_xyz_m": [18.157, 10.110, 0],

        "model": "iPod7",
        "os": "",
        "version": "10.2.1",
        "beams_count": 12,
        "beams_mean": 4,
        "missing_beams": 16,
        "speed": 1,
        "direction": 235,
        "timestamp": 1501113999.758902,

        // the loudest mote estimate
        "closest_mote_xyz_m": [ 8.79, 10.33, 3.04 ],
        // 3 past consecutive mote estimates
        "adjusted_mote_xyz_m": [ 8.79, 10.33, 3.04 ],
        // another algorithm, more sophisticated
        "vector_mote_xyz_m": [ 8.79, 10.33, 3.04 ]

        //particle reset flags
        "pf_reset": false,
        "pf_hard_reset": false

        "latency": 123
    }
}

// WIFI locations from 3 or more APs
{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/clients/112233445566/diag",
    "data": {
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "grid": {
            "topleft_x_m": -0.86,
            "topleft_y_m": 9.2486,
            "size_m": 0.5,
            "width": 40,
            "height": 40,
            "data": "<base-64 encoded data intended to be interpreted by atob() in JS>",
        },
        "vbles": [
            {
                "type": "beacon",
                "id": "00000000-0000-0000-1000-5c5b350e0060",
                "xyz_m": [ 5.79, 4.33, 3.04 ],
                "rssi": -52.32
            }
        ],
        "peak": {
            "vble_id": "00000000-0000-0000-1000-e74489000052",
            "max_rssi": -53.428,
            "plf": -73,
            "ple": -21,
            "intercept": -52
        },

        // estimates based on probability surface, we'll always have this
        "raw_xyz_m": [ 18.7486, 10.13269, 0 ],
        "smoothed_xyz_m": [ 18.7486, 10.13269, 0 ],
        "model": "",
        "speed": null,
        "direction": null,
        "timestamp": 1501113989.754602,

        //particle reset flags
        "pf_reset": false,
        "pf_hard_reset": false

    }
}
// WIFI locations from <3 AP
{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/clients/6ba43947d403/diag",
    "data": {
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "grid": null,
        "vbles": [
            {
                "type": "beacon",
                "id": "00000000-0000-0000-1000-5c5b350e0060",
                "xyz_m": [ 5.79, 4.33, 3.04 ],
                "rssi": -52.32
            }
        ],
        "peak": {
            "vble_id": "00000000-0000-0000-1000-e74489000052",
            "max_rssi": -53.428,
            "plf": -73,
            "ple": -21,
            "intercept": -52
        },

        // estimates based on probability surface, we'll always have this
        "raw_xyz_m": [ 18.7486, 10.13269, 0 ],
        "smoothed_xyz_m": [ 18.7486, 10.13269, 0 ],
        "model": "",
        "speed": null,
        "direction": null,
        "timestamp": 1501113912.759202,

        //particle reset flags
        "pf_reset": false,
        "pf_hard_reset": false

    }
}

// For BLE ASSET Client
{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/assets/115825352113/diag",
    "data": {
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "grid": {
            "topleft_x_m": -0.86,
            "topleft_y_m": 9.2486,
            "size_m": 0.5,
            "width": 40,
            "height": 40,
            "data": "<base-64 encoded data intended to be interpreted by atob() in JS>",
        },
        "motion": false,

        "vbles": [
            {
                "type": "device",
                "id": "00000000-0000-0000-1000-5c5b350e0060",
                "orientation": 90,
                "xyz_m": [ 5.79, 4.33, 3.04 ],
                "rssis": [ -52.32, -53, -55, -57, -60.25, null, null, -62, null ]
            },
            {
                "type": "beacon",
                "id": "00000000-0000-0000-1000-e74489000052",
                "xyz_m": [ 8.79, 10.33, 3.04 ],
                "rssi": -59.5
            }
        ],
        "peak": {
            "vble_id": "00000000-0000-0000-1000-e74489000052",
            "max_rssi": -53.428,
            "plf": -73,
            "ple": -21,
            "intercept": -52
        },

        // estimates based on probability surface, we'll always have this
        "raw_xyz_m": [ 18.7486, 10.13269, 0 ],
        "smoothed_xyz_m": [ 18.7486, 10.13269, 0 ],

        "model": "asset",
        "speed": null,
        "direction": null,
        "timestamp": 1501113197.768402,


        // the loudest mote estimate
        "closest_mote_xyz_m": [ 8.79, 10.33, 3.04 ],
        // 3 past consecutive mote estimates
        "adjusted_mote_xyz_m": [ 8.79, 10.33, 3.04 ],
        // another algorithm, more sophisticated
        "vector_mote_xyz_m": [ 8.79, 10.33, 3.04 ]

        //particle reset flags
        "pf_reset": false,
        "pf_hard_reset": false
    }
}

Definition

Name Type Description
map_id string map id
vbles list list of vble devices we used to calculate the estimates
avg_duration int duration over which rssis are averaged
type string device (our VBLE device) / beacon (3rd party beacon)
id string device or beacon id
orientation int orientation if type==device, 0 for beacon
xyz_m list location of the vble
rssis list 9 rssi values array if type==device, value is null if such beam not used, last/9th entry is for the omni antenna while the rest are for the directional ones
rssi float rssi if type==beacon
grid object the grid intended to be renderred
topleft_x_m float grid’s top-left x position on map, in meter, can be negative
topleft_y_m float grid’s top-left y position on map, in meter, can be negative
size_m float size of the grid, in meter
width int number of grids on x-axis
height int number of grids on y-axis
data string base64 encoded byte array with size == width*height, value is from 0-250, confidence level
motion bool whether sdk client is moving
raw_xyz_m list raw client location in meter
smoothed_xyz_m list smoothed client location in meter
app_xyz_m list client location in meter from app
dead_reckoning_xyz_m list dead reckoning based client location in meter
dead_reckoning_raw_xyz_m list raw dead reckoning based client location in meter
closest_mote_xyz_m list raw client location in meter
adjusted_mote_xyz_m list smoothed client location in meter
vector_mote_xyz_m list mote
peak object peak metrics, as each vble-ap has its own ple+int, we use the strongest beam (RSSI-wise, excluding the omni) to identify the location
device_id string device id
max_rssi int max rssi (across beams in all vbles, excluding the omnis)
plf float PLE + INT from machine learning
ple float PLE from machine learning
intercept float INT from machine learning
model string model name of the client
beam_count int number of beams as seen by client
beam_mean float avg beacons per beam
missing_beams int difference between expected beams and actual heard beam count
speed float speed of the client in metres/second (available only for SDK Client when particle algorithm is enabled). Otherwise, null.
direction int direction of client in degrees, 0 means up is north, 90 means up is east. (available only for SDK Client when particle algorithm is enabled). Otherwise, null.
timestamp float timestamp
os string os information of the client if available
version string os version information of the client if available
latency int Round trip time (rtt) latency

unsubscribe SdkClient RFGlass information

{
    "unsubscribe": "/sites/:site_id/stats/sdkclients/:sdkclient_id/diag"
}

RF Glass Recording

Start recording

POST /api/v1/sites/:site_id/rfdiags

Request

{
    "name": "Troubleshooting",
    "type": "sdkclient",
    "sdkclient_id": "de87bf9d-183f-e383-cc68-6ba43947d403",
    "duration": 120
}

Parameters

Name Type Description
name string name of the recording, the name of the sdk client would be a good default choice
type string sdkclient / client/ asset
sdkclient_id string if type==sdkclient, sdkclient_id of this recording
mac string if type==client or asset, mac of the device
duration int recording length in seconds, max is 180. Default value is also 180.

Stop Recording

POST /api/v1/sites/:site_id/rfdiags/:rfdiag_id/stop

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.

List Recordings

GET /api/v1/sites/:site_id/rfdiags

Response

[
    {
        "id": "8b944030-04cd-4f91-d61c-3557bb088cad",
        "name": "Troubleshooting",
        "type": "sdkclient",
        "sdkclient_id": "de87bf9d-183f-e383-cc68-6ba43947d403",
        "sdkclient_name": "app-client",
        "sdkclient_uuid": "5b3ee6be-5b7c-11e7-b288-346895ed1b7d",
        "map_id": "845a23bf-bed9-e43c-4c86-6fa474be7ae5",
        "url": "https://s3.amazon.com/.../frames.json",
        "raw_events": "https://s3.amazon.com/.../raw-events.json",
        "start_time": 1476990144,
        "end_time": 1476990204,
        "duration": 60,
        "frame_count": 12,
        "ready": True,
        "next": "8b944179-04cd-4f91-d61c-3557bb08813d"
    }
]

Definitions

Name Type Description
type string sdkclient / client / asset
sdkclient_id string if type==sdkclient, sdkclient_id of this recording
sdkclient_uuid string if type==sdkclient, device_id of sdkclient
asset_id string if type==asset, id of the asset
mac string if type==client or type==asset, mac of the device
start_time int timestamp of the recording (the start)
end_time int timestamp of end of recording
duration int recording length in seconds, max is 120
ready boolean whether it’s ready for playback
url string URL to a JSON file that contains an array of frames, each frame is the same format
raw_events string URL to a JSON file that contains array of raw location diag events
frame_count int Number of frames in the output
sdkclient_name string if type==sdkclient, name of the sdkclient
client_name string if type==client, hostname of the client
asset_name string if type==asset, name of the asset
next string Optional. id of the next recoding if present. Only valid for site survey.

Update Recording

PUT /api/v1/sites/:site_id/rfdiags/:rfdiag_id

Request

{
    "name": "Trouble-Shoot"
}

Delete Recording

DELETE /api/v1/sites/:site_id/rfdiags/:rfdiag_id

Download Recording

Download raw_events blob

GET /api/v1/sites/:site_id/rfdiags/:rfdiag_id/download

Export Json document as CSV file

Allows downloading provided json content as csv file

POST /api/v1/utils/json_to_csv

Request

{"json": "{
    \"filename\": \"content.txt\",
    \"rows\": [
        {
            \"plf\": -77,
            \"loc_err\": 0.112,
            \"way2\": 5,
        },
        {
            \"plf\": -74,
            \"loc_err\": 1.192,
            \"way1\": 1,
            \"way2\": 7
        }
    ],
    \"headers\": [\"plf\", \"loc_err\", \"way1\", \"way2\"]
    }"
}

Response

A file called content.txt will be downloaded with following content

plf,loc_err,way1,way2
-77,0.112,,5
-74,1.192,1,7

Machine Learning

Get Beam Coverage Overview

GET /api/v1/sites/:site_id/location/coverage?map_id=845a23bf-bed9-e43c-4c86-6fa474be7ae5

Request

Name Type Description
duration string 1d, 30m, 5h, where the start time will be calculated (with end time is now), default is 1h
type string sdkclient / client / asset, default is sdkclient
map_id string map_id (filter by map_id)
resolution string default / fine
client_type string client_type (as filter. optional)

Response

{
    "start": 1428939600,
    "end": 1428954000,
    "beams_means": [
        [ 1, 3, 3.2 ],
        [ 6, 10, 6.5 ],
        ...
    ],
    "gridsize": 1.0,
    "result_def": [
        'x', 'y', 'beams_mean', 'beacons_mean', 'max_rssi', 'avg_rssi'
    ],
    "results": [
        [ 1, 3, 3.2, 18.5, -68, -70 ],
        [ 6, 10, 6.5, 30,1, -72.5, -75 ],
        ...
    ]
}

Response Definitions

Name Type Description
beams_means list list of [x, y, mean]s, x/y are in meters (UI would need to use map.ppm to calulate the pixel location from top-left).
gridsize float the size of grid, in meter
results list list of results, see result_def.
result_def list list of names annotating the fields in results

Get Machine Learning Current Stat

For 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.

GET /api/v1/sites/:site_id/location/ml/current?map_id=:map_id

Request

Name Type Description
map_id string map_id (as filter, optional)

Response

[
    {
        "device_id": "b069b358-4c97-5319-1f8c-7c5ca64d6ab1",
        "current": {
            "iOS": {"ple": -3, "level": 6, "int": -6, "completed": 16, "src": "default", "quality": "2", "timestamp": 1442854704},
            "Android": {"ple": -3, "level": 3, "int": -6, "completed": 36,  "src": "device", "quality": "4", "timestamp": 1442854794},
            "iPod": {"ple": -5, "int": -10, "src": "overwrite", "overwrite": true}
        }
    },
    {
        "beacon_id": "7913f032-aab4-c3ae-e83e-5a2756ef4d40",
        "current": {
            "iOS": {"ple": -3, "level": 6, "int": -6, "completed": 16, "src": "device", "quality": "last", "timestamp": 1442854704},
        }
    }
    ...
]

Response Definition

Name Type Description
device_id stirng id of device if this ML is for Mist AP
beacon_id string id of beacon if this ML is for 3rd party beacon
current object ml stats, per client_type
level int level of learning
completed int learning completeness to the next level
ple float internal
int float internal
quality int from 0 - 4, 4 being most accurate
src string where the PLF comes from. machine (PLF from last learning) / device (last learnt PLF from this device) / model (model of the client device) / overwrite (from ML overwrite)
timestamp long epoch, last updated

Get Default PLF for Models

GET /api/v1/sites/:site_id/location/ml/defaults

Response

{
    "iOS": {"ple": -3, "int": -6, "completed": 16,"quality": "2"},
    "Android": {"ple": -3,"int": -6, "completed": 36, "quality": "4"}
}

Response Definition

Name Type Description
ple float internal
int float internal
quality int from 0 - 4, 4 being most accurate

Overwrite ML For Device

PUT /api/v1/sites/:site_id/location/ml/device/:device_id

Request

{
    "iOS": { "ple": -3, "int": 6 },
    "iPod": { "ple": -5, "int": -10 }
}

To clear ML overwrite for a certain model, call above api with plf value as null.

{ "iOS": null }

Clear ML Overwrite for Device

DELETE /api/v1/sites/:site_id/location/ml/device/:device_id

Overwrite ML For Map

PUT /api/v1/sites/:site_id/location/ml/map/:map_id

Request

See above

Clear ML Overwrite for Map

DELETE /api/v1/sites/:site_id/location/ml/map/:map_id

Reset ML Stats by Map

POST /api/v1/sites/:site_id/location/ml/reset/map/:map_id

Request

Name Type Description
map_id stirng id of map, all devices on the map will have ML reset

Insights

Get Available Insight Metrics

GET /api/v1/const/insight_metrics

Response

{
    // as timeseries
    "num_clients": {
        "description": "number of client over time",
        "type": "timeseries",
        "unit": "",
        "scopes": ["site", "ap"],
        "intervals": {
            "10m": {"interval": 600, "max_age": 86400},
            "1h": {"interval": 3600, "max_age": 1209600}
        },
        "report_scopes": ["site"],
        "report_intervals": {
            "1d": {"interval": 86400}
        },
        "example": [ 18, null, 15 ]
    },

    // as key value
    "top-client": {
        "description": "top clients",
        "type": "keyvalues",
        "key": {"mac": {"hint": "client"}},
        "values": {"bytes": {"unit": "bytes"}},
        "scopes": ["site", "ap"],
        "intervals": {
            "10m": {"interval": 600, "max_age": 86400},
            "1h": {"interval": 3600, "max_age": 1209600}
        },
        "report_scopes": ["site"],
        "report_intervals": {
            "1d": {"interval": 86400}
        },
        "example": [
            {
                "mac": "5684dae9ac8b",
                "bytes": 1232333
            }
        ]
    },

}

Get Insight Metrics

There can be more detailed metrics in different scopes.

GET /api/v1/sites/:site_id/insights/:metric
GET /api/v1/sites/:site_id/insights/device/:mac/:metric
GET /api/v1/sites/:site_id/insights/client/:mac/:metric

Parameters

Name Type Description
wlan_id string UUID of the wlan. This parameter is supported only for site scope.

Response

{
    "start": 1428939600,
    "end":   1428954000,
    "interval": 3600,

    // data
    "results": [
        {
            // results depends on :metric
        },
        ...
    ],
}

Get Anomaly Events

Some metrics has anomaly derection built in (if sle_baselined is true in Insight Metric Definitions) If supported , SLE anomaly events can get retrieved from

GET /api/v1/sites/:site_id/anomaly/:metric
GET /api/v1/sites/:site_id/anomaly/device/:mac/:metric
GET /api/v1/sites/:site_id/anomaly/client/:mac/:metric

Response

The format is the similar to Insights with additional info.

{
    "start": 1428939600,
    "end":   1428954000,
    "limit": 100,
    "page": 1,
    "results": [
        {
            "timestamp": 1431384000,
            "sle_baseline": 0.5,
            "sle_deviation": -0.15,
            "events": ["config_update"],

            // supported by some anomalies
            "since": 1431380400
        }
    ]
}

Rogue Detection and Mitigation

Get Neighbor APs

GET /api/v1/sites/:site_id/insights/rogues?limit=100&duration=1h

Parameters

Name Type Description
duration string 1d / 1h, default is 1d
limit int max number of results, default = 100
type string honeypot (honeypots) / lan (wired rogue) / spoof / others, default is others

Response

{
    "start": 1428939600,
    "end":   1428954000,
    "limit": 100,
    "next": /api/v1/sites/a3eda150-ab3f-11e4-aa18-13e21dd250cc/rogues?start=1498482000&end=1498485600&limit=10&interval=1h&type=others&token="003600100000002e00080000015ce445d20000000657656566656500001162632d36342d34622d33382d39642d31620000036f7267007fffff9bed6131885196aa1b76969c4411,
    "results": [
        {
            "ssid": "xfinitywifi",
            "bssid": "d8-97-ba-76-b5-aa",
            "num_aps": 4,
            "ap_mac": "5c5b350e021c",
            "channel": "11",
            "avg_rssi": -72.0,
            "times_heard": 8
        },
        ..........
    ]
}
Name Type Description
next string link to next set of results. If more results aren’t present, next is null.
ssid string ssid of the network detected as threat
bssid string bssid of the network detected as threat
num_aps int num of aps that heard the ssid/bssid pair
ap_mac string mac of the device that had strongest signal strength for ssid/bssid pair
channel string channel over which ap_mac heard ssid/bssid pair
avg_rssi float average signal strength of ap_mac for ssid/bssid pair
times_heard int represents number of times the pair was heard in the interval. Each count roughly corresponds to a minute.
seen_on_lan boolean whether the reporting AP see a wireless client (on LAN) connecting to it

Deauth Clients connected to a Rogue

Send Deauth frame to clients connected to a Rogue AP

POST /api/v1/sites/:site_id/rogues/:rogue_bssid/deauth_clients

Get Rogue Clients

GET /api/v1/sites/:site_id/insights/rogues/clients?limit=100&duration=1h

Parameters

Name Type Description
duration string 1d / 1h, default is 1d
limit int max number of results, default = 100

Response

{
    "start": 1428939600,
    "end":   1428954000,
    "limit": 100,
    "next": /api/v1/sites/a3eda150-ab3f-11e4-aa18-13e21dd250cc/rogues/clients?start=1498482000&end=1498485600&limit=10&interval=1h&token="00d400100000125e00080000015ce44512000000065765656666500001162632d36342d34622d33382d39642d31620000036f7267007fffff9bed6131885196aa1b76969c4411,
    "results": [
        {
            "bssid": "d8-97-ba-76-b5-aa",
            "ap_mac": "5c-5b-35-0e-02-1c",
            "client_mac": "34-f8-32-13-57-c2"
            "num_aps": 2,
            "band": "5",
            "avg_rssi": -63.9,
            "annotation": "whitelist"
        },
        ..........
    ]
}

Get Rogue AP Details

GET /api/v1/sites/:site_id/rogues/:rogue_bssid

Response

{
    "seen_as_client": true,
    "manufacture": "Intel Corporate"
}

Search Rogue Events

GET /api/v1/sites/:site_id/rogues/events/search?type=honeypot

Response

{
    "results": [
        {
            "ssid": "MyHomeNetwork",
            "bssid": "38ff363c8c4c",
            "timestamp": 1538074612,
            "ap": "5c5b350e10030",
            "rssi": -54.0,
            "channel": 136
        },
        {
            "ssid": "Home-Office",
            "bssid": "60d02c2394cc",
            "timestamp": 1538074612,
            "ap": "5c5b350e10030",
            "rssi": -59.0,
            "channel": 11
        }
    ],
    "start": 1538071200,
    "end": 1538074800,
    "limit": 10,
    "total": 2
}

Count Rogue Events

GET /api/v1/sites/:site_id/rogues/events/count?distinct=bssid

Response

{
    "results": [
        {
            "count": 1,
            "bssid": "38ff363c8c4c"
        },
        {
            "count": 1
            "bssid": "60d02c2394cc"
        }
    ],
    "start": 1538071200,
    "end": 1538074800,
    "limit": 10,
    "total": 2
}

Get system level changes per site for comparison with Service Level Experience (SLE) impact

GET /api/v1/sites/:site_id/events/system?start=1431384000&end=1431298000&limit=10

Query

Name Type Description
start long start time, in epoch,
end long start time, default is now()
limit long number of events

Response

{
    "start": 1428939600,
    "end":   1428954000,
    "results": [
        {
            "change_cat": "admin_action",
            "type": "config_update"
            "timestamp": 1431384000,
            "message": "WLAN config was updated"
        },
        {
            "change_cat": "rrm_update",
            "type": "interference",
            "timestamp": 1431384001,
            "message": " Power on Channel 40 was reduced on AP aa-bb-cc-dd-ee-ff"
        },
        ...
    ]
}


Response definitions

Name Type Description
change_cat string event name used as an identifier. The string is typically a human understandable string with all lower case letters and snake-cased if there are multiple words
timestamp long time since epoch
type string Additional subtype of the event, where applicable. For RRM, 3 types will be Interference,Reboot,Periodic. For admin action, 3 types will be manual_reboot,fw_update and config_change.Not all events might have associated types.
message string All metadata associated with the event as string.

Get system level changes per site per device for comparison with Service Level Experience (SLE) impact

GET /api/v1/sites/:site_id/devices/:device_id/events/system?start=1496256371&end=1496259837&limit=10

Query

Name Type Description
start long start time, in epoch,
end long start time, default is now()
limit long number of events

Response

{
  "page": "",
  "sys_change_per_ap_data": [
    {
      "metadata": "{\"ap\": \"5c-5b-35-0e-02-b7\", \"update\": \"Mist engineering is aware of the software issue & working to resolve it\"}",
      "change_cat": "ap_health",
      "type": "software-panic",
      "timestamp": 1496259837
    },
    {
      "metadata": "{\"ap\": \"5c-5b-35-0e-02-b7\", \"update\": \"Mist engineering is aware of the software issue & working to resolve it\"}",
      "change_cat": "ap_health",
      "type": "software-panic",
      "timestamp": 1496256965
    },
    {
      "metadata": "{\"ap\": \"5c-5b-35-0e-02-b7\", \"update\": \"Mist engineering is aware of the software issue & working to resolve it\"}",
      "change_cat": "ap_health",
      "type": "software-panic",
      "timestamp": 1496256373
    }
  ]
}

Response definitions

Name Type Description
change_cat string event name used as an identifier. The string is typically a human understandable string with all lower case letters and snake-cased if there are multiple words
timestamp long time since epoch
type string Additional subtype of the event, where applicable. For RRM, 3 types will be Interference,Reboot,Periodic. For admin action, 3 types will be manual_reboot,fw_update and config_change.Not all events might have associated types.
metadata string All metadata associated with the event as JSON.

Alarms

Alarm definitions

Get the definitions of alarms you’d seen from our backend and example

GET /api/v1/const/alarm_defs

Ack An alarm

Acknowledge an alarm.

POST /api/v1/sites/:site_id/alarms/:alarm_id/ack

Body

{
    "note": "maintenance window"
}

Parameters

Name Type In Description
site_id string path UUID of the site
alarm_id string path UUID of the alarm
note string body (optional) Some text note describing the intent

Unack An alarm

Unacknowledge an alarm.

POST /api/v1/sites/:site_id/alarms/:alarm_id/unack

Body

{
    "note": "maintenance window"
}

Parameters

Name Type In Description
site_id string path UUID of the site
alarm_id string path UUID of the alarm
note string body (optional) Some text note describing the intent

Ack multiple alarms

Acknowledge multiple alarms at once.

POST /api/v1/sites/:site_id/alarms/ack

Body

{
    "alarm_ids": ["ccb8c94d-ca56-4075-932f-1f2ab444ff2c", "98ff4a3d-ec9b-4138-a42e-54fc3335179d"],
    "note": "maintenance window"
}

Parameters

Name Type In Description
site_id string path UUID of the site
alarm_ids list body List of UUIDs of the alarms to ack
note string body (optional) Some text note describing the intent

UnAck multiple alarms

Unacknowledge multiple alarms at once.

POST /api/v1/sites/:site_id/alarms/unack

Body

{
    "alarm_ids": ["ccb8c94d-ca56-4075-932f-1f2ab444ff2c", "98ff4a3d-ec9b-4138-a42e-54fc3335179d"],
    "note": "maintenance window"
}

Parameters

Name Type In Description
site_id string path UUID of the site
alarm_ids list body List of UUIDs of the alarms to unack
note string body (optional) Some text note describing the intent

Ack all alarms

Acknowledge all the alarms of a site at once.

POST /api/v1/sites/:site_id/alarms/ack_all

Body

{
    "note": "maintenance window"
}

Parameters

Name Type In Description
site_id string path UUID of the site
note string body (optional) Some text note describing the intent

Unack all alarms

Unacknowledge all the alarms of a site at once.

POST /api/v1/sites/:site_id/alarms/unack_all

Body

{
    "note": "maintenance window"
}

Parameters

Name Type In Description
site_id string path UUID of the site
note string body (optional) Some text note describing the intent

N.B.: Batch size for multiple alarm ack and unack has to be less or or equal to 1000.

Get Alarms

List or Search alarms within a site.

GET /api/v1/sites/:site_id/alarms/search

Parameters

Name Type In Description
site_id string path UUID of the site
type string query Key-name of the alarms; accepts multiple values separated by comma
ack_admin_name string query Name of the admins who have acked the alarms; accepts multiple values separated by comma
acked boolean query
group string query Alarm group name; accepts multiple values separated by comma
severity string query Alarm severity; accepts multiple values separated by comma
status string query Alarm status; accepts multiple values separated by comma

Response

Status: 200 OK

Body

{
    "results": [
        {
            "id": "8a93ab2d-b745-a093-7936-80d7922559b5",
            "timestamp": 1431382121,
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "type": "device-down"

            "count": 3,
            "acked": true,
            "acked_time": 1431388121,
            "ack_admin_name": "FirstName LastName first.last@someorg.com",
            "ack_admin_id": "ab6fdaa0-e7c4-428b-9259-7d7a603afa8a",
            "note": "upgrade switch",

            // additional information per alarm type defined under `fields` in API: GET /api/v1/const/alarm_defs (see "Additional Information" section)
        }
    ]
}

Definition

Name Type Description
results list List of result objects
id list UUID of the alarm
site_id string UUID of the site
org_id string UUID of the org
type string Key-name of the alarm type
group string Group of the alarm
severity string Severity of the alarm
count int Number of incident within an alarm window
timestamp long Epoch (seconds) of the first incident/alarm
last_seen long Epoch (seconds) of the last incident/alarm within an alarm window
acked boolean (optional)Whether the alarm is acked or not
acked_time long (optional)Epoch (seconds) when the alarm was acked
ack_admin_name string (optional)Name & Email ID of the admin who acked the alarm
ack_admin_id string (optional)UUID of the admin who acked the alarm
note string (optional)Text describing the alarm
component string (optional)Component of the alarm
status string (optional)Status of the alarm (open/resolved)
resolved_time long (optional)Epoch (seconds) of the resolved_time for the alarm

Additional Information

Additional information per alarm type.

Name Type Description
aps list List of MACs of the APs e.g. [“ffeeddccbbaa”, “ffeeddccbbab”]
switches list List of MACs of the switches e.g. [“ffeeddccbbaa”, “ffeeddccbbab”]
gateways list List of MACs of the gateways e.g. [“ffeeddccbbaa”, “ffeeddccbbab”]
hostnames string List of Hostnames of the devices (AP/Switch/Gateway)
ssids list List of SSIDs
bssids list List of BSSIDs

Count Alarms

Count alarms within a site.

GET /api/v1/sites/:site_id/alarms/count

Parameters

Name Type In Description
site_id string path UUID of the site
type string query Key-name of the alarms; accepts multiple values separated by comma
ack_admin_name string query Name of the admins who have acked the alarms; accepts multiple values separated by comma
acked boolean query
group string query Alarm group name; accepts multiple values separated by comma
severity string query Alarm severity; accepts multiple values separated by comma
distinct string query (optional)Group by and count the alarms by some distinct field (e.g. type, group, severity etc.); default=type

Response

Status: 200 OK

Body

{
    "results": [
        {
            "type": "switch_restarted", // here `type` is a value (<group-by>) to parameter `distinct`
            "count": 2
        },
        {
            "type": "device_down",
            "count": 1
        },
        {
            "type": "device_restarted",
            "count": 1
        }    
    ],
    "start": 1625477727.0,
    "end": 1625566540.9141023,
    "limit": 10,
    "distinct": "group",
    "total": 1,
}

Definition

Name Type Description
results list List of result objects
<group-by> string A field based on which alarms are grouped & counted
count int Number of alarms grouped by distinct parameter value

Adopted Switches

Get version compliance metrics for managed or monitored switches

GET /api/v1/sites/:site_id/stats/switches/metrics

Request (Default)

No input parameter is required for default

Request (Switch Level)

For switch level, the following parameters can be used. Switch level query is applicable only for metric type: active_ports_summary

{
    "type": "active_ports_summary",
    "scope": 'switch',
    "switch_mac": "fc334262ef00"
}

Parameters

Name Type Description
scope string metric scope, site/switch
type string metric type, only active_ports_summary metric type is supported
switch_mac string switch mac, used only with metric type active_ports_summary

Response (Default)

{
    "version_compliance": {
        "total_switch_count": 2,
        "score": 100.0,
        "details": {
            "major_versions": [
                {
                    "major_version": "21.4R3.5",
                    "system_names": [],
                    "model": "EX2300-C-12P",
                    "major_count": 1
                },
                {
                    "major_version": "6.0.4-11",
                    "system_names": [],
                    "model": "SSR120",
                    "major_count": 1
                }
            ]
        }
    },
    "config_success": {
        "total_switch_count": 2,
        "score": 100.0,
        "details": {
            "config_success_count": 2
        }
    },
    "active_ports_summary": {
        "total_switch_count": 2,
        "score": 100.0,
        "details": {
            "total_port_count": 4, 
            "active_port_count": 4
        }
    }
}

Response (Switch Level)

    "active_ports_summary": {
        "total_switch_count": 1,
        "score": 50.0,
        "switch_id": "67970e46-4e12-11e6-9188-0242ac110007_fc334262ef00",  // site_id + switch_mac
        "details": {
            "total_port_count": 2,
            "active_port_count": 1
        }
    }
}

Discovered Switches

Get a list of switches that we discovered, with connected AP list

Get Discovered Switches

GET /api/v1/sites/:site_id/stats/discovered_switches/search
GET /api/v1/sites/:site_id/stats/discovered_switches/count

Response

{
    "results": [
        {
            "system_name": "mist-lab-ex2300c",
            "hostname": "mist-lab-ex2300c",
            "mgmt_addr": "10.1.1.1",
            "vendor": "Juniper Networks",
            "org_id": "6748cfa6-4e12-11e6-9188-0242ac110007",
            "aps": [
                {
                    "inactive_wired_vlans": [],
                    "hostname": "ap41nearlab",
                    "when": "2019-06-13T19:53:16.870+0000",
                    "mac": "5c5b352e2001",
                    "poe_status": true
                }
            ],
            "site_id": "67970e46-4e12-11e6-9188-0242ac110007",
            "system_desc": "Juniper Networks, Inc. ex2300-c-12p Ethernet Switch, kernel JUNOS 18.2R2.6, Build date: 2018-12-07 13:19:04 UTC Copyright (c) 1996-2018 Juniper Networks, Inc.",
            "version": "18.2R2.6",
            "timestamp": 1560457177.037,
            "model": "EX2300-C-12P",
            "ap_redundancy": {
                "num_aps": 15,
                "num_aps_with_switch_redundancy": 8,

                # for a VC / stacked switches
                "modules": {
                    "1": {
                        "num_aps": 15,
                        "num_aps_with_switch_redundancy": 8
                    }
                    ...
                }
            }
        }
    ]
}

Get Discovered Switches Metrics

Discovered switches related metrics, lists related switch system names & details if not compliant

GET /api/v1/sites/:site_id/stats/discovered_switches/metrics

Response

{
    "version_compliance": {
        "score": 75,
        "details": {
            "major_versions": [
                {
                    "model": "EX2300-C-12P",
                    "major_count": 2,
                    "system_names": [
                        "switch1",
                        "mist-lab-ex2300c"
                    ]
                },
                {
                    "model": "EX4300-48P",
                    "major_count": 1,
                    "system_names": []
                },
            ],
            "total_switch_count": 5
        }
    },
    "switch_ap_affinity": {
        "score": 33.3333,
        "details": {
            "threshold": 12,
            "system_name": [
                "mist-lab-ex2300c",
                "switch1"
            ]
        }
    },
    "inactive_wired_vlans": {
        "score": 100.0,
        "details": {}
    },
    "poe_compliance": {
        "score": 100.0,
        "details": {
            "total_power": 981500.0,
            "total_aps": 63
        }
    }
}

Parameters

Name Type Description
threshold string configurable # ap per switch threshold, default 12
system_name string system name for switch level metrics, optional

Discovered Switch Metrics Search

Get a list of wired assurance metrics, lists related switch system names & details if not compliant

Search Discovered Switch Metrics

GET /api/v1/sites/:site_id/stats/discovered_switch_metrics/search

Response

{
    "results": [
        {
            "details": {
                "system_names": [
                    "CORP-D-SW-2"
                ]
            },
            "site_id": "c1698122-c14c-11e5-8e81-1258369c38a9",
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "timestamp": 1568917200,
            "scope": "site",
            "score": 95,
            "type": "inactive_wired_vlans"
        },
        {
            "timestamp": 1568917200,
            "site_id": "c1698122-c14c-11e5-8e81-1258369c38a9",
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "scope": "site",
            "type": "poe_compliance",
            "score": 100.0,
            "details": {
                "total_power": 78000.0,
                "total_aps": 4
            }
        },
        {
            "timestamp": 1568917201,
            "site_id": "c1698122-c14c-11e5-8e81-1258369c38a9",
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "scope": "site",
            "total_switch_count": 1,
            "type": "version_compliance",
            "score": 100.0,
            "details": {
                "major_versions": [
                    {
                        "major_version": "18.2R3-S6.5",
                        "system_names": [],
                        "model": "EX2300-48P",
                        "major_count": 1
                    }
                ]
            }
        },
        {
            "timestamp": 1568917201,
            "site_id": "c1698122-c14c-11e5-8e81-1258369c38a9",
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "scope": "site",
            "type": "switch_ap_affinity",
            "score": 100.0,
            "details": {
                "threshold": 12
            }
        }
    ]
}

Parameters

Name Type Description
scope string metric scope, site/switch, default is site, optional
type string metric type, inactive_wired_vlans/switch_ap_affinity/poe_compliance/version_compliance, optional

Search Switch / Gateway Ports

GET /api/v1/sites/:site_id/stats/ports/search

Request

The following fields are available for searching.

Name Type Description
full_duplex boolean indicates full or half duplex
mac string device identifier
device_type string device type, ap / ble / switch / gateway / mxedge / nac
port_usage string gateway port usage, wan / lan
neighbor_mac string Chassis identifier of the chassis type listed
neighbor_port_desc string Description supplied by the system on the interface E.g. “GigabitEthernet2/0/39”
neighbor_system_name string Name supplied by the system on the interface E.g. neighbor system name E.g. “Kumar-Acc-SW.mist.local”
poe_disabled boolean whether PoE capabilities are disabled for a port, default is false
poe_mode string PoE mode depending on class. 802.3af / 802.3at / 802.3bt
poe_on boolean is the device attached to POE
port_id string interface name
port_mac string interface mac address
power_draw float Amount of power being used by the interface at the time the command is executed. Unit in watts.
tx_pkts int Output packets
rx_pkts int Input packets
tx_bytes int Output bytes
rx_bytes int Input bytes
tx_bps int Output rate
rx_bps int Input rate
tx_errors int Output errors
rx_errors int Input errors
tx_mcast_pkts int Multicast output packets
tx_bcast_pkts int Broadcast output packets
rx_mcast_pkts int Multicast input packets
rx_bcast_pkts int Broadcast input packets
speed int port speed
mac_limit int Limit on number of dynamically learned macs
mac_count int Number of mac addresses in the forwarding table
up boolean indicates if interface is up
stp_state string if up == true, forwarding / blocking / learning / listening / disabled
stp_role string if up == true, designated / backup / alternate / root / root-prevented
xcvr_part_number string Optic Slot Partnumber, Check for null/empty
xcvr_serial string Optic Slot SerialNumber, Check for null/empty
xcvr_model string Optic Slot ModelName, Check for null/empty
optics_bias_current float Optic port laser bias current in mA
optics_tx_power float Optic port output power in dBm
optics_rx_power float Optic port laser receiver power in dBm
optics_module_temperature float Optic port laser module temperature in Celsius
optics_module_voltage float Optic port laser module voltage in V
auth_state string if up == true && has Authenticator role, init / authenticated / authenticating / held
lte_imsi string LTE IMSI value, Check for null/empty
lte_iccid string LTE ICCID value, Check for null/empty
lte_imei string LTE IMEI value, Check for null/empty
active boolean Indicates if interface is active/inactive
jitter float Last sampled jitter of the interface
loss float Last sampled loss of the interface
latency float Last sampled latency of the interface
unconfigured boolean indicates if interface is unconfigured
disabled boolean indicates if interface is disabled
last_flapped float indicates when the port was last flapped

E.g. /api/v1/sites/:site_id/stats/ports/search?mac=001122334455

Response

E.g.

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 10,
    "total": 100,
    "results": [
         {
            "rx_bytes": 4563443626,
            "rx_pkts": 30360265,
            "xcvr_part_number":"740-021487",
            "xcvr_serial":"N6AA9HT",
            "xcvr_model":"SFP+-10G-SR",
            "site_id": "c1698122-c14c-11e5-8e81-1258369c38a9",
            "neighbor_system_name": "CORP-D-SW-2",
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "up": true,
            "port_mac": "5c4527a96580",
            "neighbor_port_desc": "GigabitEthernet1/0/21",
            "tx_pkts": 14610886,
            "mac": "5c4527a96580",
            "tx_bytes": 11299516780,
            "neighbor_mac": "64d814353400",
            "poe_disabled": true,
            "speed": 1000,
            "port_id": "me0"
        },
        {
            "rx_bps": 1176,
            "rx_bytes": 2628451,
            "rx_pkts": 11829,
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "full_duplex": true,
            "site_id": "c1698122-c14c-11e5-8e81-1258369c38a9",
            "up": true,
            "poe_mode": "802.3at",
            "port_mac": "0c8126c6ff6f",
            "mac": "0c8126c6ff6c",
            "tx_pkts": 492176,
            "neighbor_port_desc": "ETH0",
            "tx_bps": 14264,
            "port_id": "ge-0/0/0",
            "tx_bytes": 96810192,
            "neighbor_mac": "5c5b350eb361",
            "neighbor_system_name": "kevinsap",
            "speed": 1000,
            "poe_on": true,
            "power_draw": 5.4,
            "last_flapped": 1571174567.807,
        },
        ...
    ]
}

Count by Distinct Attributes of Switch Ports

GET /api/v1/sites/:site_id/stats/ports/count

Request

In addition to the filters that you can have in the search

Name Type Description
distinct string port_id, port_mac, full_duplex, mac, neighbor_mac, neighbor_port_desc, neighbor_system_name, poe_disabled, poe_mode, poe_on, speed, up

NOTE: the filters from /stats/ports/search can also be used. (E.g. /stats/ports/count?distinct=mac)

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 100,
    "distinct": "mac",
    "total": 20,
    "results": [
        {
            "count": 217,
            "mac": "112233445566"
        },
        {
            "count": 35,
            "mac": "001122334455"
        },
        ...
    ]
}

Gateway Metrics

Gateway related metrics, lists scores for version compliance and config success for gateway devices in a site.

GET /api/v1/sites/:site_id/stats/gateways/metrics

Response

Status: 200 OK

Body

{
    "version_compliance": {
        "score": 100.0,
        "major_versions": {
            "SRX320": {

                "major_version": "19.4R2-S1.2",

                "major_count": 1
            }
        },

        "type": "gateway"
    },
    "config_success": 100.0
}

Parameters

Name Type In Description
site_id string path UUID of the site
version_compliance object body version compliance score, major versions for gateway, type

config_success|float|body|config success score

Search Wired Clients

GET /api/v1/sites/:site_id/wired_clients/search

Request

The following fields are available for searching.

Name Type Description
device_mac string device mac
mac string client mac
port_id string port id
vlan int vlan
nacrule_id string nacrule_id
dhcp_hostname string dhcp hostname
dhcp_fqdn string dhcp full qualified domain name
dhcp_client_identifier string dhcp client identifier
dhcp_vendor_class_identifier string dhcp vendor class identifier
dhcp_request_params string dhcp request parameters
auth_state string authentication state
auth_method string authentication method
source string source from where the client was learned (lldp, mac)

E.g. /api/v1/sites/:site_id/wired_clients/search?client=001122334455

Response

{
    "results": [
        {
            "device_mac": [
                "001122334455"
            ],
            "org_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "vlan": [
                0,
                1001
            ],
            "site_id": "c168ddee-c14c-11e5-8e81-1258369c38a9",
            "mac": "112233445566",
            "timestamp": 1571174567.807,
            "port_id": [
                "et-0/0/1"
            ],
            "device_mac_port": [
              {
                "device_mac": "9c5a80414500",
                "port_id": "ge-0/0/33",
                "start": "2025-04-18T11:12:25.806+0000",
                "when": "2025-05-13T18:33:11.565+0000",
                "ip": "10.204.34.209",
                "ip6": "",
                "port_parent": "",
                "node": ""
                "source": "lldp"
              }
            ],
            "dhcp_hostname": "ITS-VMMT0-D1N02",
            "dhcp_fqdn": "ITS-VMMT0-D1N02.mgthub.local",
            "dhcp_client_identifier": "MAC address 00155df6d500",
            "dhcp_vendor_class_identifier": "MSFT 5.0",
            "dhcp_request_params": "1 3 6 15 31 33 43 44 46 47 119 121 249 252",
            "dhcp_client_options": [
                {
                    "code": "DHO_DHCP_MESSAGE_TYPE(53)", 
                    "data": "DHCPREQUEST"
                }, {
                    "code": "DHO_DHCP_CLIENT_IDENTIFIER(61)",
                    "data": "MAC address 00155df6d500",  
                }, {
                    "code": "DHO_DHCP_REQUESTED_ADDRESS(50)",
                    "data": "172.17.10.255",
                }, {
                    "code": "DHO_DHCP_SERVER_IDENTIFIER(54)",
                    "data": "172.17.8.1"
                }, {
                    "code": "DHO_DHCP_MAX_MESSAGE_SIZE(57)",
                    "data": "1280"
                }, {
                    "code": "DHO_DHCP_PARAMETER_REQUEST_LIST(55)",
                    "data": " 1 3 6 12 15 28 43 180"
                }, {
                    "code": "DHO_VENDOR_CLASS_IDENTIFIER(60)",
                    "data": "MSFT 5.0"
                }, {
                    "code": "DHO_HOST_NAME(12)",
                    "data": "ITS-VMMT0-D1N02"
                }
            ]
        }
    ],
    "start": 1538071200,
    "end": 1538074800,
    "limit": 10,
    "total": 1
}

Count by Distinct Attributes of Wired Clients

GET /api/v1/sites/:site_id/wired_clients/count

Request

Name Type Description
distinct string port_id, vlan, mac, default is mac

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 100,
    "distinct": "",
    "total": 20,
    "results": [
        {
            "count": 217,
            "vlan": 0
        },
        {
            "count": 35,
            "vlan": 1
        },
        ...
    ]
}

Doing CoA against a wired client

POST /api/v1/sites/:site_id/wired_clients/:mac/coa

Request

Name Type Description
mac string wired_client mac

Response

{
    "device_mac": "5c5b35000002",
    "port_id": "ge-0/0/0",
    "session": "0a2a11b8-4b30-40d8-a6d1-e91ea540d86f"
}

Packet Capture

Get a list of captures

GET /api/v1/sites/:site_id/pcaps?start=1461099816&end=1461089816&limit=100

Request

Name Type Description
start int start time
end int end time
client_mac string optional client mac filter

Response

{
    "start": 1461099816,
    "end": 1461089816,
    "limit": 100,
    "next": "/api/v1/sites/67970e46-4e12-11e6-9188-0242ac110007/pcaps?start=1461099816&limit=100&end=1461089816

    "results": [
        {
            "type": "new_assoc",
            "timestamp": 1461869041,
            "ap_macs": ["5c5b35000010"],
            "url": "https://..."
        },
        {
          "last_seen": 1694055531.513,
            "aps": [
                "5c5b35000010"
            ],
            "format": "stream",
            "termination_reason": "default",
            "type": "scan",
            "max_num_packets": 1024.0,
            "duration": 600.0,
            "timestamp": 1694098696.981433,
            "org_id": "00000000-0000-0000-0000-000000000000",
            "site_id": "00000000-0000-0000-0000-000000000000",
            "id": "12981770-dd35-4111-9f2f-ae54c26b3e2a",
            "pcap_url": "https://...",
            "pcap_aps": {
                "5c5b35000010": {
                    "band": "6",
                    "bandwidth": "20",
                    "channel": 133,
                    "tcpdump_expression": null
                }
            }
            "num_packets": 1024.0
        }
    ]
}
Name Type Description
pcap_aps dict contains AP specific configuration selected by user during scan pcap.
similar to below response.

Get Capturing status

GET /api/v1/sites/:site_id/pcaps/capture

Response

{
    // from the initiation of the packet capture
    "type": "radiotap",
    "max_pkt_len": 128,
    "includes_mcast": false,
    "ssid": null,
    "ap_mac": null,
    "client_mac": "60a10a773412",
    "max_num_packets": 1000,
    "num_packets" : 999,
    "duration": 300,   
    "id": "87093aed-94d6-4310-83a9-d7248c9e2d93"
    "tcpdump_expression" : "vlan and icmp"
    // what's actually being done
    "started_time": 1435080709
    "aps": ["5c5b350e001c","5c5b350e001b"],
    "ok": ["5c5b350e001c","5c5b350e001b"],"
    "failed": []
    "pcap_aps": {
        "5c5b35000010": {
            "band": "6",
            "bandwidth": "20",
            "channel": 133,
            "tcpdump_expression": null
        }
    }
}
Name Type Description
type string packet capture type, for example: new_assoc, client, wired, wireless, radiotap, gateway
aps []string List of target APs to capture packets
ok []string List of target APs successfully configured to capture packets
failed []string List of APs where configuration attempt failed
gateways dict Information on gateways to capture packets on if a gateway capture type is specified
switches dict Information on switches to capture packets on if a switch capture type is specified. irb port interface is automatically added to capture as needed to ensure all desired packets are captured.
mxedges dict Information on mxedges to capture packets on if a mxedge capture type is specified
id string unique id for the capture
max_num_packets int max number of packets configured by user
num_packets int total number of packets captured by all AP, not applicable for type [client, new_assoc]
tcpdump_expression string tcpdump expression provided by the user (common)
wired_tcpdump_expression string wired_tcpdump_expression provided by the user when type = ‘wired’
radiotap_tcpdump_expression string radiotap_tcpdump_expression expression provided by the user when type = ‘rdiotap’
scan_tcpdump_expression string scan_tcpdump_expression provided by the user when type = ‘scan’
wireless_tcpdump_expression string wireless_tcpdump_expression provided by the user when type = ‘wireless’
pcap_aps dict contains AP specific configuration selected by user during scan pcap.

Initiate a Client Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "client",
    "client_mac": "60a10a773412",
    "num_packets": 1000,
    "duration": 300,

    "max_pkt_len": 128,
    "includes_mcast": false,
    "ssid": null,
    "ap_mac": null
}

Parameters

Name Type Description
client_mac string client mac, required if type==client; optional otherwise
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
ssid string optional filter by ssid
ap_mac string optional filter by ap_mac

Initiate a packet Capture for New Wireless Client Associations

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "new_assoc",
    "num_packets": 100,
    "duration": 600,

    "max_pkt_len": 128,
    "includes_mcast": false,
    "ssid": null,
    "ap_mac": null,
    "client_mac": "60a10a773412"
}

Parameters

see above

Initiate a Wired Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "wired",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 512,
    "tcpdump_expression": "tcp port 80",
    "ap_mac": null
}

Parameters

Name Type Description
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
tcpdump_expression string tcpdump expression
ap_mac string optional filter by ap_mac
format string pcap format, pcap / stream, default is pcap

Initiate a Wireless Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "wireless",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 512,
    "ap_mac": null,
    "band": "24"
}

Parameters

Name Type Description
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
ap_mac string optional filter by ap_mac
format string pcap format, pcap / stream, default is pcap
wlan_id string WLAN ID
band string 24 / 5 / 6, default is 24

Initiate a Radiotap Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "radiotap",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 512,
    "ap_mac": null,
    "band": "24",
    "format": "stream"
    "tcpdump_expression": "tcp port 80",
    "ssid": "atest"
    "wlan_id": "fac8e973-feb9-421a-b381-aabbc4b61f5a"
    "client_mac": "38f9d3972ff1"
}

Parameters

Name Type Description
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
ap_mac string optional filter by ap_mac
format string pcap format, pcap / stream, default is pcap
band string 24,5,6 / 24 / 5 / 6, default is 24
tcpdump_expression string tcpdump expression specific to radiotap
ssid string optional filter by ssid
wlan_id string wlan id associated with the respective ssid.
client_mac string optional filter by client mac

Initiate a scan radio Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "scan",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 512,
    "ap_mac": null,
    "band": "24", 
    "format": "stream"
    "tcpdump_expression": "tcp port 80",
    "client_mac": "38f9d3972ff1",
    "band": "24",     // 24  / 5 (default) / 6
    "bandwidth": 20,  // 20 (default) / 40
    "channel": 1,     // 1 (default), if band == 5 then default value of channel is 7.

    // optional, if specified, `ap_mac` is ignored and only specified APs will be used. If not specified, all APs in the site will be used
    "aps": {
          "5c5b35000001": {
                 // all optional, if not specified, parent one will be used
                 "channel": 7,
                 "band": "5",
                 "bandwidth": 20,
                 "tcpdump_expression": "..."
          },
         ...
    }    
}

Parameters

Name Type Description
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
ap_mac string optional filter by ap_mac
format string pcap format, pcap / stream, default is pcap
band string 24 / 5 / 6, default is 5 (for scan) and 24 (for other). Only Single value allowed, default value gets applied when user provides wrong values
tcpdump_expression string tcpdump expression specific to radiotap
client_mac string optional filter by client mac
channel int specify the channel value where scan PCAP has to be started, default value gets applied when user provides wrong values
bandwidth int channel width for the band, 20 / 40 / 80 / 160, 80 is only applicable for band_5 and 160 is only for band_6, defaults to ‘20’ when user provides wrong values
aps dict dictionary key is AP mac and value is a dictionary which contains key “band”, “bandwidth”, “channel” and “tcpdump_expression”. In case keys are missed we will take parent value if parent values are not set we will use default value.

Initiate a Radiotap Packet Capture and Wired Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "radiotap,wired",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 512,
    "tcpdump_expression":<common>,
    "wired_tcpdump_expression": "tcp port 80",
    "radiotap_tcpdump_expression": "type data",
    "wireless_tcpdump_expression": ""
    "ap_mac": null,
    "format": "stream",
    "band": "24",
    "ssid": "atest"
    "wlan_id": "fac8e973-feb9-421a-b381-aabbc4b61f5a"
    "client_mac": "38f9d3972ff1"
}

Parameters

Name Type Description
type string packet capture type, currently supported value is radiotap,wired.
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
tcpdump_expression string tcpdump expression common for wired,radiotap
wired_tcpdump_expression string tcpdump expression for wired interface
wireless_tcpdump_expression string tcpdump expression for wireless interface (802.11)
radiotap_tcpdump_expression string tcpdump expression for radiotap interface (802.11 + radio headers)
ap_mac string optional filter by ap_mac
format string pcap format, pcap / stream, default is pcap
band string 24,5,6 / 24 / 5 / 6, default is 24, config used only for radiotap
ssid string optional filter by ssid
wlan_id string wlan ID associated with the respective ssid, only used for configuring radiotap
client_mac string optional filter by client mac, only used for configuring radiotap

Initiate a gateway (SSR/SRX) Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "gateway",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 1500,
    "gateways": {
        "001122334455": {
            "ports": {"ge-0/0/0": {"tcpdump_expression": "tcp"},
                      "ge-0/0/1": {"tcpdump_expression": "port 443"},
                      "ge-1/0/0": {"tcpdump_expression": "tcp"},
                      "ge-1/0/1": {"tcpdump_expression": "port 443"}}
        },
        "001122334466": {
            "ports": {"ge-0/0/0": {"tcpdump_expression": "udp"},
                      "ge-0/0/1": {"tcpdump_expression": "port 32768"}}
        },
    },
    "format": "stream"
}

Parameters

Name Type Description
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 86400 (24h)
max_pkt_len int max_len of each packet to capture in bytes, default is 512, minimum is 64 (SSR) / 68 (SRX) maximum is 10240 (SSR) / 1520 (SRX).
gateways dict dict of gateways which uses mac as the key
ports list dict of port which uses port id as the key
tcpdump_expression string tcpdump expression per port
format string pcap format: stream (default, the only supported option)

Initiate a switch (Junos) Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "switch",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 1500,
    "switches": {
        "001122334455": {            
            "ports": {"irb": {"tcpdump_expression": "udp"}, // irb port auto-included (with no tcpdump filter) if not provided in request
                      "ge-0/0/1": {},
                      "ge-1/0/0": null}
                      // 6 ports max per switch supported, or 5 max with irb port auto-included into capture request
        },
        "001122334466": {
            "ports": {"ge-0/0/0": {}}
        },
    },
    "tcpdump_expression": "port 443",
    "format": "stream"
}

Parameters

Name Type Description
num_packets int number of packets to capture, 0 for unlimited, default is 1024, maximum is 10000
duration int duration of the capture, in seconds, default is 600, minimum is 60 and maximum is 10800
max_pkt_len int max_len of each packet to capture, default is 512, minimum is 64 and maximum is 2048
switches dict dict of switches which uses mac as the key
ports dict dict of port which uses port id as the key; 6 ports max per switch supported, or 5 max with irb port auto-included into capture request
tcpdump_expression string tcpdump expression, port specific if specified under ports dict, otherwise applicable across ports if specified at top level of payload. Port specific value overrides top level value when both exist.
format string pcap format: stream (default, the only supported option)

Initiate a Mist Edge Packet Capture

POST /api/v1/sites/:site_id/pcaps/capture

Request

{
    "type": "mxedge",
    "num_packets": 100,
    "duration": 600,
    "max_pkt_len": 1500,
    "mxedges": {
        "00000000-0000-0000-1000-001122334455": {
            "interfaces": {"port1": {"tcpdump_expression": "udp port 67 or udp port 68"},
                      }
        },
    },
    "tcpdump_expression": "vlan 999",
    "format": "tzsp",
    "tzsp_host": "192.168.1.2",
    "tzsp_port": 37008
}

Parameters

Name Type Description
num_packets int number of packets to capture, default is 1024, maximum of 10000
duration int duration of the capture, in seconds, default is 600, maximum is 10800
max_pkt_len int max_len of each packet to capture, default is 512, maximum is 2048
mxedges dict dict of mxedges which uses mxedge_id as the key, currently limited to one mxedge per site capture session
interfaces dict dict of interfaces to capture for, for given mxedge (examples: port1, kni0, lacp0, ipsec, drop, oobm), currently limited to specifying one interface per mxedge
tcpdump_expression string tcpdump expression, interface specific if specified under interfaces dict, otherwise applicable across interfaces if specified at top level of payload. Interface specific value overrides top level value when both exist.
format string pcap format: stream (default, to Mist cloud), tzsp (stream packets (over UDP as TZSP packets) to a remote host (typically running Wireshark) instead of Mist cloud)
tzsp_host string remote host accessible to mxedges over the network for receiving the captured packets. Required when format is tzsp.
tzsp_port int optional port on remote host for receiving the captured packets, default (if not provided) 37008 (TZSP).

Stop current capture

DELETE /api/v1/sites/:site_id/pcaps/capture

Update or add notes to a completed packet capture

PUT /api/v1/sites/:site_id/pcaps/:pcap_id

Example

    {
         "notes": "wired pcap test", //Empty allowed
    }

Spectrum Analysis

Initiate a Spectrum Analysis utilizaing the scanning radio

POST /api/v1/sites/:site_id/analyze_spectrum

NOTE: only one can be executed per site at any give moment

Request

{
    "device_id": "00000000-0000-0000-1000-5c5b35bd76bb",
    "duration": 600,  // default is 300, max is 600
    "band": "5",  // required, 24 / 5 / 6, depending on scan radio capability
    "format": "stream"  // json (default) / stream
}

Response

{
    "session_id": "19e73828-937f-05e6-f709-e29efdb0a82b"
}

Subscribe to the streamed output

WS /api-ws/v1/stream

Request

{
    "subscribe": "/sites/:site_id/analyze_spectrum"
}

Response

{
    "event": "data",
    "channel": "/sites/4ac1dcf4-9d8b-7211-65c4-057819f0862b/analyze_spectrum",
    "data": {
        "session": "session_id",

        "fft_samples": [
            {
                "frequency": 2437.0,
                "rssi / signal ?": -93
            },
            ...
        ],

        "channel_usage": [
            {
                "channel": 36,
                "noise": -78,

                "wifi": 0.13,
                "non_wifi": 0.08
            },
            ...
        ]
    }
}

Get running spectrum analyze

GET /api/v1/sites/:site_id/analyze_spectrum

Response

{
    "started_time": 1435080709
    "device_id": "00000000-0000-0000-1000-5c5b35bd76bb",
    "duration": 600,
    "band": "5",
    "format": "stream"
}

Get past spectum analysis

GET /api/v1/sites/:site_id/stats/analyze_spectrum?start=1461099816&end=1461089816&limit=100

Response

{
    "results": [
        {
            "org_id": "f2695c32-0e83-4936-b1b2-96fc88051213",
            "mac": "5c5b35bd76bb",
            "band": "5",
            "timestamp": 1694098696,
            "fft_samples": [
                {
                    "frequency": 2437.0,
                    "rssi / signal ?": -93
                },
                ...
            ],

            "channel_usage": [
                {
                    "channel": 36,
                    "noise": -78,

                    "wifi": 0.13,
                    "non_wifi": 0.08
                },
                ...
            ]
        },
        ...
    ],
    "start": 1694622179,
    "end": 1694708579,
    "limit": 10,
    "total": 4
}

RRM

The main design goals of RRM are

From Site Setting

From AP Settings

Each AP derives their radio config from Site Settings if there’s no overwrite on a band.

Get Current Channel Planning

GET /api/v1/sites/:site_id/rrm/current

Response

Status: 200 OK

{
    "status": "ready",
    "timestamp": 1428949501,
    "band_24": {
        "00000000-0000-0000-1000-5c5b350e0024": {
            "curr_channel": 6,
            "curr_power": 18,
            "curr_bandwidht": 20,
            "curr_usage": "24"
            "channel": 1,
            "power": 19,
            "bandwidth": 20,
            "usage": "24"
        },
        ...
    },
    "band_5": {
        ...
    },
    "band_6": {
        ...
    },
    "band_24_metric": {
        "noise": -82.7,
        "cochannel_neighbors": 1.0,
        "neighbors": 3.0,
        "density": 1.0
    },
    "band_5_metric": {
        "noise": -82.7,
        "cochannel_neighbors": 1.0,
        "neighbors": 3.0,
        "density": 1.0,
        "interferences": {
            "149": {
                "radar": 0.3
            },
            "153": {
                "radar": 0.2
            },
        }
    },
    "band_6_metric": {
        ...
    },
    "rftemplate": {
        "id": "bb8a9017-1e36-5d6c-6f2b-551abe8a76a2",
        "name": "5G-Restricted",
        "country_code": "US",
        "band_24_usage": "24",
        "band_24": {
            "disabled": false,
            "channels": [ 1, 6, 11 ],
            "bandwidth": 20,
            "power": 16
        },
        "band_5": {
            "disabled": false,
            "channels": null,
            "bandwidth": 40,
            "power": 0
        },
        "band_6": {
            "disabled": false,
            "channels": null,
            "bandwidth": 65,
            "power": 0
        }
    }
}

Definitions

Name Type Description
status string unknown / updating / ready
timestamp long time where the status was updated
band_24 object proposal on band 2.4G, key is ap_id, value is the proposal
band_5 object proposal on band 5G, key is ap_id, value is the proposal
band_6 object proposal on band 6G, key is ap_id, value is the proposal
curr_channel int current channel
curr_power int current tx power
curr_bandwidth int current bandwidth
channel int proposed channel
power int proposed tx power
bandwidth int proposed bandwidth
band_24_metric object metric about 2.4G
band_5_metric object metric about 5G
band_6_metric object metric about 6G
noise float average noise in dBm
cochannel_neighbors float average number of co-channel neighbors
neighbors float average number of neighbors
density float defined by how APs can hear from one and another, 0 - 1 (everyone can hear everyone)
rftemplate object RF Template if used if it uses RFTemplate from Org

Trigger Synthetic Testing

POST /api/v1/sites/:site_id/synthetic_test

Request

{
    "email": "john@abc.com"
}

Response

{
    "id": "68b329da-9893-e340-99c7-d8ad5cb9c940",
    "email": "john@abc.com"
}

Get Synthetic Testing Status

GET /api/v1/sites/:site_id/synthetic_test

Response

{
    "id": "68b329da-9893-e340-99c7-d8ad5cb9c940",

    // TBD extra information populated
    "start_time": 1675718807,
    "end_time": 1675718873,
    "status": "ready"
    "report_url": TBD 
}

Get Synthetic Testing Result

GET /api/v1/sites/:site_id/synthetic_test/search

Request

The following fields are available for searching.

Name Type Description
mac string device identifier
port_id string port_id used to run the test (for SSR only)
type string synthetic test type
vlan_id int Vlan ID
by string entity who triggers the test
reason string (optional) test failure reason
tenant string (optional) tenant network in which lan_connectivity test was run
protocol string (optional) lan_connectivity protocol (ping / traceroute)

Response

{
    "results": [
        {
            "timestamp": 1706824045.059036,
            "type": "speedtest",
            "failed": false,
            "port_id": "ge-0/0/2",
            "vlan_id": 20,
            "latency": 40,
            "rx_mbps": 322,
            "tx_mbps": 199,
            "device_type": "gateway",
            "mac": "001122334455"
            "by": "user"
        },
        {
            "timestamp": 1706824045.059036,
            "type": "speedtest",
            "failed": true,
            "port_id": "ge-0/0/2",
            "vlan_id": 100,
            "latency": 0,
            "rx_mbps": 0,
            "tx_mbps": 0,
            "reason": "interface not ready to perform test",
            "device_type": "gateway",
            "mac": "001122334455",
            "by": "marvis"
        }
    ]
}

Get Current RRM Considerations for an AP on a Specific Band

GET /api/v1/sites/:site_id/rrm/current/devices/:device_id/band/:band

Parameters

Name Type Description
band string 24 / 5 / 6

Response

{
    "results": [
        {
            "channel": 36,
            "noise": -78,
            "non_wifi": 0.08,
            "wifi": 0.13

            // omitted if there's no near-by APs in the same site
            "rssi": -48,

            // omitted if there's no near-by APs
            "other_rssi": -66,
            "other_ssid": "Rivendell5G",

            "util_score": 0.1,           // total utilization (in a score format that's currently relevant / comparable against other channels) 
            "util_score_other": 0.05,    // utilizatyion contributed by other SSIDs served
            "util_score_non_wifi": 0.01, // utilization contributed by non-wifi
        }
    ]
}

Definition

Name Type Description
channel int channel
noise float noise floor
non_wifi float non-wifi RF utilization
wifi float WIFI RF utilization
rssi int the avg RSSI heard from neighbor APs (that belongs to the same site)
other_rssi int the avg RSSI heard from other APs (that does NOT belongs to the same site)
max_other_ssid string SSID from other AP that we heard from with the max RSSI
util_score float utilization score, 0-1, lower means less utilization (cleaner RF)
insite_channel_weight float channel weight score, 0-1, lower means less utilization (cleaner RF)

Get current neighbors APs

GET /api/v1/sites/:site_id/rrm/neighbors/band/:band?limit=100&page=1

Parameters

Name Type Description
band string 24 / 5 / 6
limit int page size, 1-100, default is 100

Response

{
    "band": 6,

    "limit": 100,
    "page": 1,
    "total": 360,

    "results": [
        {
            "mac": "5c5b35000001",
            "neighbors": [
                {
                    "mac": "5c5b35000311",
                    "rssi": -66,
                },
                ...                
            ]
        },
        ...
    ]
}

Optimize

POST /api/v1/sites/:site_id/rrm/optimize

Parameters

{
    "bands": [ "24", "5", "6" ],
    "macs": [ "5c5b35000001" ],  // targeting AP (neighbor APs may get changed, too), default is empty for ALL APs
    "txpower_only": true  // only changng TX Power (will not disconnect clients), default is false
}
Name Type Description
bands list list of bands

Reset all APs in the Site to use RRM

POST /api/v1/sites/:site_id/devices/reset_radio_config

Request

{
    "bands": [ "24", "5", "6" ],
    "force": false
}

Parameters

Name Type Description
bands list list of bands
force boolean whether to reset those with radio disabled. default is false (i.e. if user intentionally disables a radio, honor it)

Get RRM Events

GET /api/v1/sites/:site_id/rrm/events?band=24&limit=100&duration=1d

Parameters

Name Type Description
band string 24 / 5 / 6, required

Response

{
    "start": 1428939600,
    "end":   1428954000,
    "limit": 100,
    "results": [
        {
            "timestamp": 1428939600,

            // for periodical
            "event": "scheduled-site-rrm",

            // for user-triggered
            "event": "triggered-site-rrm",

            // for interference-induced
            "event": "interference-ap-co-channel",

            // for non-wifi-interference-induced
            "event": "interference-ap-non-wifi",

            // for radar-triggered
            "event": "radar-detected",

            // for ap-outage
            "event": "neighbor-ap-down",
            "event": "neighbor-ap-recovered",

            "ap_id": 00000000-0000-0000-1000-5c5b359e4fe0",
            "band": "24",
            "usage": "24",
            "channel": 6,
            "bandwidth": 20,
            "power": 5,
            "pre_usage": "24",
            "pre_channel": 1,
            "pre_power": 11,
            "pre_bandwidth": 20
        }
    ]
    "next": "/api/v1/sites/dca0a44b-324c-11e6-a776-0243ad110007/events/rrm?start=1428939600&end=1428949600&limit=200&token=001a0010000000120010000005005880ec18000004776c616e007fffffeb067ab8e29c1d659b6a7c8cf698bf81490003"
}
Name Type Description
timestamp string timestamp of the event
event string schedule-site-rrm / triggered-site-rrm / interference-ap-co-channel / rrm-radar
band string for 2.4G or 5G or 6G
ap_id string ap id
channel string channel for the band from rrm
bandwidth string channel width for the band 20/40/80/160. 160 is 6G only.
power string tx power of the radio
pre_channel string (previously) channel for the band, 0 means no previously available
pre_bandwidth string (previously) channel width for the band 20/40/80/160, 0 means no previously available
pre_power string (previously) tx power of the radio, 0 means no previously available
next string the link to query next set of results. value is null if no next page exists.

Roaming Events data

GET /api/v1/sites/:site_id/events/fast_roam?type=success&start=1500940800&end=1501023379&limit=2

Parameters

Name Type Description
type string success / fail / none

Start and end will provide granular data within the given day, going back to a year. Note: Date passed will not be honored.

Response

{
    "start": 1500940800,
    "next": "/api/v1/sites/dca0a44b-324c-11e6-a776-0243ad110007/events/fast_roam?type=success&start=1428939600&end=1428949600&limit=200&token=AAAAEgAIAAVVJh4hF8AAAARzc2lkAH%2F%2F%2F%2F0%3D",
    "end": 1501023379,
    "limit": 2,
    "results": [
        {
            "latency": 0.1874195,
            "ssid": "marvis_test",
            "subtype": "CLIENT_AUTHENTICATED_11R",
            "timestamp": 1501000002283782,
            "ap_mac": "5c5b350e040b",
            "fromap": "5c5b350e0569",
            "client_mac": "dc2b2a3fb13d"
        }
    ]
}
Name Type Description
timestamp string timestamp of the event in nsec
type string success / fail / none / poor/ pingpong / slow
next string the link to query next set of results. value is null if no next page exists.

Note:

Const

Get Languages

GET /api/v1/const/languages

Response

[
    {
        "key": "en-US",
        "display": "English (US)",
        "display_native": "English (US)"
    },
    {
        "key": "zh-TW",
        "display": "Chinese Traditional (Taiwan)",
        "display_native": "中文(台灣)"
    }
]

Get Licence Types

GET /api/v1/const/license_types

Response

[
    {
        "key": "sub_eng",
        "type": "SUB-ENG",
        "description": "vBLE Engagement"
    },
    {
        "key": "sub_ex12",
        "type": "SUB-EX12",
        "description": "Wired Assurance 12"
    },
    {
        "key": "sub_ex12a",
        "type": "SUB-EX12A",
        "description": "Wired Assurance 12 Advanced",
        "entitled_licenses": ["sub_ex12", "sub_sadv1"]
    },
    {
        "key": "sub_sadv1",
        "type": "SUB-SADV1",
        "description": "Advanced Add-on for Wired Assurance 12"
    },
    ...
]

Get Applications

Get a list of applications that we recognize

GET /api/v1/const/applications

Response

[
    {
        "key": "dropbox",
        "name": "Dropbox",
        "group": "File Sharing",
        "app_probe": true,  // whether it can be used for app_probing for SRX
        "app_id": true  // whether it can be used as an app in Service for gateways
    },
    ...
]

Get All Gateway Applications

Get the full list of applications that we recognize

GET /api/v1/const/gateway_applications

Response

[
    {
        "key": "4shared",
        "name": "4shared",
        "ssr_app_id": true,  // whether this can be identified by SSR
        "app_id": true  // whether this can be identified by SRX
    }
]

Get Device Event Definition

GET /api/v1/const/device_events

Response

[
    {
        "key": "AP_ASSIGNED",
        "display": "AP Assigned",
        "description": "AP was assigned to a site",
        "example": {
            "type": "AP_ASSIGNED",
            "timestamp": 1552408871,
            "org_id": "2818e386-8dec-2562-9ede-5b8a0fbbdc71",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "ap": "5c5b35000001",
            "audit_id": "e9a88814-fa81-5bdc-34b0-84e8735420e5"
        }
    },
    ...
]

Get Client Event Definition

GET /api/v1/const/client_events

Response

[
    {
        "key": "CLIENT_IP_ASSIGNED",
        "display": "DHCP Success"
    },
    ...
]

Get AP Led Status

GET /api/v1/const/ap_led_status

Response

[
    {
        "code": "02",
        "key": "NO_ETHERNET_LINK",
        "name": "No ethernet link",
        "description": "Has no link (Seen using power injectors, but not connected to a switch)"
    },
    ...
]

Get Marvisclient Versions

GET /api/v1/const/marvisclient_versions

Response

[
    {
        "os": "android",
        "version": "1.1.9",
        "url": "https://mobile.mist.com/installers/marvisclient/android/1.1.9/marvisclient-installer.apk",
        "label": "latest",
        "notes": ""
    },
    {
        "os": "macos",
        "version": "0.100.29",
        "url": "https://mobile.mist.com/installers/marvisclient/macos/0.100.29/marvisclient-installer.dmg",
        "label": "rc1",
        "notes": ""
    },
    {
        "os": "windows",
        "version": "0.100.26",
        "url": "https://mobile.mist.com/installers/marvisclient/windows/0.100.26/marvisclient-installer.zip",
        "label": "default",
        "notes": ""
    }
]

Get Webhook Topic definitions

GET /api/v1/const/webhook_topics

Response

[
    {
        "key": "alarms",
        "for_org": true,
        "has_delivery_results": true
    },
    {
        "key": "client-info",
        "for_org": true
    },
    {
        "key": "ping",
        "for_org": true,
        "internal": true,
        "has_delivery_results": true
    },
    {
        "key": 'device-events',
        "for_org": true,
        "allows_single_event_per_message": true
    },
    {
        "key": "sdkclient-scan-data"
    },
    ...
]

Name Type Description
key string webhook topic name
for_org bool can be used in org webhooks, optional, default false
internal bool internal topic (not selectable in site/org webhooks)
has_delivery_results bool supports webhook delivery results /api/v1/:scope/:scope_id/webhooks/:webhook_id/events/search
allows_single_event_per_message bool supports single event per message results

Site MxEdge

Upload Mist Edge support files

Support / Upload Mist Edge support files

POST /api/v1/sites/:site_id/mxedges/:mxedge_id/support

Get Site MxEdges Stats

Get /api/vi/sites/:site_id/stats/mxedges

Response

[
    {
        "status": "disconnected",
        "magic": "S2ZD-srTcoOp9GGttZpq1ISQEq4iPY3EhWpAKB9pb9JdWjeP12bjIbFYsDy5jP3a",
        "name": "staging_edge",
        "tunterm_port_config": {
            "separate_upstream_downstream": false,
            "upstream_ports": [
                "0"
            ],
            "downstream_ports": [
                "0"
            ]
        },
        "org_id": "5a5ed2f4-632f-41f3-b8ed-d3afa4b27f96",
        "site_id": "c88aa7a2-ac27-7d87-b633-1ac3a7837928",
        "mxcluster_id": null,
        "modified_time": 1574117211,
        "tunterm_registered": false,
        "for_site": true,
        "services": [
            "tunterm"
        ],
        "created_time": 1574114372,
        "model": "ME-100",
        "tunterm_ip_config": {
            "ip": "",
            "netmask": "",
            "gateway": ""
        },
        "id": "b025de9b-7bb6-43bd-8a71-bf3cu840c9ad",
        "mxagent_registered": false,
        "fwupdate": {
            "timestamp": 1574117214,
            "status": "inprogress",
            "progress": 23
        }
    }
]

See Org:Mxedge for fields description

Get One Site MxEdges Stats

Get /api/vi/sites/:site_id/stats/mxedges/:mxedge_id

Search Mist Edge Events

GET /api/v1/sites/:site_id/mxedges/events/search

Supported Filters

Name Type Description
mxedge_id string mist edge id
mxcluster_id string mist edge cluster id
type string mist edge event type Supported Events
service string service running on mist edge(mxagent, tunterm etc)
start string start datetime, can be epoch or relative time like -1d, -1w; -1d if not specified
end string end datetime, can be epoch or relative time like -1d, -2h; now if not specified
duration string duration like 7d, 2w
component string component like PS1, PS2

Response

{
    "results": [
        {
            "mxcluster_id": "2815c917-58e7-472f-a190-bfd44fb58d05",
            "timestamp": 1694678225.927,
            "org_id": "f2695c32-0e83-4936-b1b2-96fc88051213",
            "mxedge_id": "00000000-0000-0000-1000-020000dc585c",
            "type": "ME_SERVICE_STOPPED",
            "service": "tunterm"
        },
        {
            "timestamp": 1694678004.821,
            "org_id": "f2695c32-0e83-4936-b1b2-96fc88051213",
            "mxedge_id": "00000000-0000-0000-1000-020000dc585c",
            "type": "ME_SERVICE_STARTED",
            "service": "tunterm"
        },
         {
            "package": "radsecproxy",
            "timestamp": 1694678010.108,
            "org_id": "f2695c32-0e83-4936-b1b2-96fc88051213",
            "mxedge_id": "00000000-0000-0000-1000-020000dc585c",
            "type": "ME_PACKAGE_INSTALLED",
            "to_version": "1.9.1-1.mist.16"
        },
        {
            "timestamp": 1694679111.253,
            "org_id": "f2695c32-0e83-4936-b1b2-96fc88051213",
            "mxedge_id": "00000000-0000-0000-1000-020000dc585c",
            "type": "ME_POWERINPUT_DISCONNECTED",
            "component": "PS1"
        }
    ],
    "start": 1694622179,
    "end": 1694708579,
    "limit": 10,
    "total": 4
}

Count Mist Edge Events

GET /api/v1/sites/:site_id/mxedges/events/count?distinct=type

Request

Name Type Description
distinct string mxedge_id(default) / type / mxcluster_id / package
start string start datetime, can be epoch or relative time like -1d, -1w; -1d if not specified
end string end datetime, can be epoch or relative time like -1d, -2h; now if not specified
duration string duration like 7d, 2w

Response

{
    "results": [
        {
            "type": "ME_SERVICE_RESTARTED",
            "count": 5003
        },
        {
            "type": "ME_SERVICE_STARTED",
            "count": 124
        },
        {
            "type": "ME_SERVICE_FAILED",
            "count": 120
        }
    ],
    "start": 1694622935,
    "end": 1694709335,
    "limit": 10,
    "distinct": "type",
    "total": 3
}

Site 128T (SSR)

Upgrade 128T (SSR) device

POST /api/v1/sites/:site_id/ssr/:device_id/upgrade

Request

{
    "channel": "stable",
    "version": "5.3.0-93",
    "start_time": 1624405840
}
Name Type Description
channel string upgrade channel to follow, stable (default) / beta / alpha
version string 128T firmware version to upgrade (e.g. 5.3.0-93)
start_time long 128T firmware download start time in epoch seconds, default is now, -1 disables download
reboot_at long reboot start time in epoch seconds, default is start_time, -1 disables reboot

Get a specific Upgrade

GET /api/v1/sites/:site_id/ssr/upgrade/:upgrade_id

Response

{
    "status": "upgrading",
    "versions": {},
    "channel": "stable",
    "device_type": "gateway",
    "id": "5cbcee0a-c620-4bb4-a25e-15000934e9d8",
    "targets": {
        "queued": [],
        "upgrading": ["8e525f1d-4178-4ae1-a988-2b0176855e55"],
        "success": [],
        "failed": []
    }
}

Search BGP Stats

GET /api/v1/sites/:site_id/stats/bgp_peers/search

Response

{
    "results": [
        {
            "org_id": "0c160b7f-1027-4cd1-923b-744534c4b070",
            "site_id": "725a8d34-a126-4f2c-b990-d1219421cb75",
            "mac": "020001c04668",
            "timestamp": 1666251056.07,
            "local_as": 65000,
            "neighbor_as": 65000,
            "vrf_name": "default",  // default (default) / or VRF name
            "neighbor": "15.8.3.5",
            "neighbor_mac": "020001e53153",  // if it's another device in the same org
            "uptime": 31355,
            "up": true,
            "for_overlay": true, // if this is created for overlay
            "state": "established",  // idle, connect, active, open_sent, open_confirm and established
            "tx_pkts": 1735,
            "rx_pkts": 63366,
            "rx_routes": 60,
            "tx_routes": 60,
            "evpn_overlay": true // if this is created for evpn overlay
        },
    ],
    "start": 1619518689.4989705,
    "end": 1619518989.4989712,
    "limit": 10,
    "total": 1
}

Definitions

Name Type Description
org_id string router org ID
site_id string router site ID
mac string router mac address
timestamp long sampling time (in epoch)
local_as string local AS
neighbor_as string neighbor AS
vrf_name string VRF name
neighbor string IP of neighbor
neighbor_mac string Mac of neighbor
state string idle, connect, active, open_sent, open_confirm and established
up boolean true/false
tx_pkts int tx pkts
rx_pkts int rx pkts
rx_routes int number of received routes
tx_routes int number of sent routes
uptime int uptime
for_overlay boolean true/false, if this is created for overlay
evpn_overlay boolean true/false, if this is created for evpn overlay

Count BGP Stats

GET /api/v1/sites/:site_id/stats/bgp_peers/count?state=disconnected&distinct=mac

Response

{
    "results": [
        {
            "mac": "02000111d2dc",
            "count": 2
        }
    ],
    "start": 1619518707.800029,
    "end": 1619519007.8000295,
    "limit": 10,
    "distinct": "mac",
    "total": 1,
}

Virtual Chassis

Get VC Status

The API below returns a combined view of the VC status which includes topology and stats.

GET /api/v1/sites/:site_id/devices/:device_id/vc

VC Status Response

{
    "id": "00000000-0000-0000-1000-dc38e1dbf3cd",
    "site_id": "9bf047be-1911-225c-a541-d6637a373633",
    "org_id": "eb6a1083-1e3a-48cc-8888-78ff7772c588",
    "mac": "dc38e1dbf3cd",
    "vc_mac": "dc38e1dbf3cd",
    "model": "EX4600",
    "type": "switch",
    "serial": "TC3714190003",
    "status": "connected",
    "locating": true,
    "members": [
        {
            "_idx": 0,
            "vc_role": "master",
            "model": "EX4600",
            "serial": "TC3714190003",
            "vc_state": "present",
            "locating": true,
            "fans": [
                {
                    "name": "Fan 0"
                    "status": "absent",
                },
                {
                    "name": "Fan 1"
                    "airflow": "out",
                    "status": "ok"
                }
            ],
            "temperatures": [
                {
                    "name": "CPU",
                    "status": "ok",
                    "celsius": 45.0
                }
            ],
            "psus": [
                {
                    "name": "Power Supply 0",
                    "status": "ok"
                },
                {
                    "name": "Power Supply 1",
                    "status": "failed"
                }
            ],
            "poe": {
                "max_power": 250.0,
                "power_draw": 120.3
            },
            "vc_links": [
                {
                    "port_id": "vcp-255/1/0",
                    "neighbor_module_idx": 1,
                    "neighbor_port_id": "vcp-255/1/0"
                }
            ]
        }
    ],
    "num_routing_engines": 1     // routing-engine count
}

Form a New VC

For models (e.g. EX4300 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.

In 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’t have dedicated VC ports, below are procedures to automate the VC creation:

  1. Power on the switch that is choosen as the VC master first. And the powering on the other member switches.
  2. Claim or adopt all these switches under the same organization’s Inventory
  3. Assign these switches into the same Site
  4. Invoke vc command on the switch choosen to be the VC master. For EX2300-C-12P, VC ports will be created automatically.
  5. Connect the cables to the VC ports for these switches
  6. Wait for the VC to be formed. The Org’s inventory will be updated for the new VC.

Create a VC with two members inter-connected by VC port xe-0/1/0

POST /api/v1/sites/:site_id/devices/:device_id/vc
{
    "members": [
        {
            "mac": "aff827549235",      // fpc0, same as the mac of device_id
            "vc_ports": ["xe-0/1/0"],
            "vc_role": "master",        // vc_role is enforced to be master when creating the VC
        },
        {
            "mac": "8396cd006c8c",
            "vc_ports": ["xe-0/1/0"]
            "vc_role": "backup",
        }
    ]
}

Create a VC with three members

POST /api/v1/sites/:site_id/devices/:device_id/vc
{
    "members": [
        {
            "mac": "aff827549235", // fpc0, same as the mac of device_id
            "vc_ports": ["xe-0/1/0"],
            "vc_role": "master"
        },
        {
            "mac": "8396cd006c8c",
            "vc_ports": ["xe-0/1/0", "xe-0/1/1"],
            "vc_role": "backup"
        },
        {
            "mac": "8396cd00888c",
            "vc_ports": ["xe-0/1/0"],
            "vc_role": "linecard"
        }
    ]
}

Create a pre-provisioned VC with three members

POST /api/v1/sites/:site_id/devices/:device_id/vc
{
    "preprovisioned": true,
    "members": [
        {
            "mac": "aff827549235",      // fpc0, same as the mac of device_id
            "vc_role": "master",
            "member_id": 0,
            "vc_ports": ["xe-0/1/0", "xe-0/1/1"]
        },
        {
            "mac": "8396cd006c8c",
            "vc_role": "linecard",
            "member_id": 1,
            "vc_ports": ["xe-0/1/0"],
        },
        {
            "mac": "8396cd00888c",
            "vc_role": "backup",
            "member_id": 2,
            "vc_ports": ["xe-0/1/0"]
        }
    ]
}

Add new members

For 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.

For EX2300 VC, adding new members requires to follow the procedures below:

  1. Powering on the new member switches and ensuring cables are not connected to any VC ports.
  2. Claim or adopt all new member switches under the VC’s organization Inventory
  3. Assign all new member switches to the same Site as the VC
  4. Invoke vc command to add switches to the VC.
  5. Connect the cables to the VC ports for these switches
  6. After a while, the Org’s Inventory shows this new switches has been added into the VC.

Adding one new switch as line-card, connected to from VC port xe-0/1/1 of fpc0 of VC to xe-0/1/0 of 8396cd00777c

PUT /api/v1/sites/:site_id/devices/:device_id/vc
{
    "op": "add",
    "members": [
        {
            "mac": "aff827549235",      // same as the mac of device_id
            "member": 0,                // enabling vc port xe-0/1/1 on member 0
            "vc_ports": ["xe-0/1/1"],
        },
        {
            "mac": "8396cd00777c",
            "vc_ports": ["xe-0/1/0"],
            "vc_role": "linecard"
        }
    ]
}

Adding two new switches as line cards into the VC (MAC aff827549235)

PUT /api/v1/sites/:site_id/devices/:device_id/vc
{
    "op": "add",
    "members": [
        {
            "mac": "aff827549235",      // same as the mac of device_id
            "member": 0,                // enabling vc port xe-0/1/1 on member 0
            "vc_ports": ["xe-0/1/1"],
        },
        {
            "mac": "aff827549235",      // same as the mac of device_id
            "member": 2,                // enabling vc port xe-0/1/1 on member 2
            "vc_ports": ["xe-0/1/1"],
        },
        {
            "mac": "8396cd00777c",
            "vc_ports": ["xe-0/1/0"],
            "vc_role": "linecard"
        },
        {
            "mac": "8396cd00888c",
            "vc_ports": ["xe-0/1/0"],
            "vc_role": "linecard"
        }
    ]
}

Removing member switch

To remove a member switch from the VC, following the procedures below:

  1. Ensuring the VC is connected to the cloud first
  2. Unplug the cable from the VC port of the switch
  3. Waiting for the VC state (vc_state) of this switch is changed to not-present
  4. Invoke update_vc with remove to remove this switch from the VC
  5. The Org’s Inventory shows the switch is removed.

Please 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.

Removing two new switches into the VC (MAC aff827549235)

PUT /api/v1/sites/:site_id/devices/:device_id/vc
{
    "op": "remove",
    "members": [
        {
            "member": 2,
        },
        {
            "member": 3,
        },
    ]
}

Renumber a member switch

When a member switch doesn’t work properly and needed to be replaced, the renumber API could be used. The following two types of renumber are supported:

  1. Replace a non-fpc0 member switch
  2. Replace fpc0. When fpc0 is relaced, PAPI device config and JUNOS config will be both updated.

For renumber to work, the following procedures are needed: 1. Ensuring the VC is connected to the cloud and the state of the member switch to be replaced must be non present. 2. Adding the new member switch to the VC 3. Waiting for the VC state (vc_state) of this VC to be updated to API server 4. Invoke vc with renumber to replace the new member switch from fpc X to

Renumber member ID 3 to member ID 2

PUT /api/v1/sites/:site_id/devices/:device_id/vc
{
    "op": "renumber",
    "member": 3,
    "new-member": 2
}

Renumber member ID 3 to member ID 0

PUT /api/v1/sites/:site_id/devices/:device_id/vc
{
    "op": "renumber",
    "member": 3,
    "new-member": 0
}

Example response of new device replacing fpc0

{
    'adopted': true,
    'virtual_chassis': {
        ...
    },
    'managed': true,
    'id': '00000000-0000-0000-1000-a874b9710001',
    'site_id': '1916d52a-4a90-11e5-8b45-1258369c38a9',
    'org_id': '2818e386-8dec-2562-9ede-5b8a0fbbdc71',
    'mac': 'a874b9710001',
    'serial': 'SW-REG-01',
    'model': 'EX4300-48P',
    'type': 'switch',
    ...
}

Deleting a Virtual Chassis (VC)

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.

For some unexpected cases that the VC is gone and disconncted, the API below could be used to change the state of VC’s switches to be standalone. After it is executed, all the switches will be shown as standalone switches under Inventory.

DELETE /api/v1/sites/:site_id/devices/:device_id/vc

Update Device’s VC config

The VC creation and adding member switch API will update the device’s virtual chassis config which is applied after VC is formed to create JUNOS pre-provisioned virtual chassis configuration. To modify the device’s VC config after VC is created, the device config API is leveraged:

PUT /api/v1/sites/:site_id/devices/:device_id

Change 8396cd006c8c to be a line-card and 8396cd00888c as a routing-engine

{
    "virtual_chassis": {
        "preprovisioned": false,       // to configure whether the VC is preprovisioned or nonprovisioned. default is false
        "members": [
            {
                "mac": "aff827549235", // fpc0, same as the mac of device_id
                "vc_role": "master"
            },
            {
                "mac": "8396cd006c8c",
                "vc_role": "linecard"
            },
            {
                "mac": "8396cd00888c",
                "vc_role": "backup"
            }
        ]
    }
}

Change to use preprovisioned VC

To switch the VC to use preprovisioned VC, enable preprovisioned in virtual_chassis config. Both vc_role master and backup will be matched to routing-engine role in Junos preprovisioned VC config.

In this config, fpc0 has to be the same as the mac of device_id. Use renumber if you want to replace fpc0 which involves device_id change.

Notice: to configure preprovisioned VC, every member of the VC must be in the inventory.

{
    "virtual_chassis": {
        "preprovisioned": true,
        "members": [
            {
                "mac": "aff827549235", // fpc0, same as the mac of device_id
                "vc_role": "master",
                "member_id": 0
            },
            {
                "mac": "8396cd006c8c",
                "vc_role": "linecard",
                "member_id": 1
            },
            {
                "mac": "8396cd00888c",
                "vc_role": "backup",
                "member_id": 2
            }
        ]
    }
}

Perprovision VC members

By specifying “preprovision” op, you can convert the current VC to pre-provisioned mode, update VC members as well as specify vc_ports when adding new members for device models without dedicated vc ports. Use renumber for fpc0 replacement which involves device_id change.

Note: 1. vc_ports is used for adding new members and not needed if * the device model has dedicated vc ports, or * no new member is added 2. New VC members to be added should exist in the same Site as the VC

Update Device’s VC config can achieve similar purpose by directly modifying current virtual_chassis config. However, it cannot fulfill requests to enabling vc_ports on new members that are yet to belong to current VC.

    PUT /api/v1/sites/:site_id/devices/:device_id/vc
    {
        "op": "preprovision",
        "members": [
            {
                "mac": "aff827549235",      // fpc0, same as the mac of device_id of current VC
                "vc_role": "master",
                "member_id": 0,
                "vc_ports": ["xe-0/1/1"]    // enabling vc port xe-0/1/1 on member 0
            },
            {
                "mac": "8396cd006c8c",
                "vc_role": "linecard",
                "member_id": 1
            },
            {
                "mac": "8396cd00888c",
                "vc_role": "backup",
                "member_id": 2,
                "vc_ports": ["xe-0/1/0"]    // enabling vc port xe-0/1/1 on member 2
            }
        ]
    }

VC port commands for switch/VC

To change ports to VC port or delete a VC port, below is the API for this purpose.

POST /api/v1/sites/:site_id/devices/:device_id/vc/vc_port

Set VC port of xe-0/1/1 of member 0 and member 2

POST /api/v1/sites/:site_id/devices/:device_id/vc/vc_port
{
    "op": "set",
    "members": [
        {
            "member": 0,                // enabling vc port xe-0/1/1 on member 0
            "vc_ports": ["xe-0/1/1"],
        },
        {
            "member": 2,                // enabling vc port xe-0/1/1 on member 2
            "vc_ports": ["xe-0/1/1"],
        },
    ]
}

Delete VC port of xe-0/1/1 of member 0 and member 2

POST /api/v1/sites/:site_id/devices/:device_id/vc/vc_port
{
    "op": "delete",
    "members": [
        {
            "member": 0,                // enabling vc port xe-0/1/1 on member 0
            "vc_ports": ["xe-0/1/1"],
        },
        {
            "member": 2,                // enabling vc port xe-0/1/1 on member 2
            "vc_ports": ["xe-0/1/1"],
        },
    ]
}

Change VCP port mode

Some switch model allows changing VCP port behaviors, e.g. - use them as regular network ports - change vcp protocol Note, this command will reboot the switch

POST /api/v1/sites/:site_id/devices/:device_id/set_vc_port_mode

Request

{
    "mode": "network",  // required. network / vcp-higig / vcp-hgoe (EX4400-24X only supports this)
}

Toggle master role between Routing Engines

In a pre-provisioned VC, mastership is system-determined. This command allows manual toggling between primary and backup Routing Engines.

POST /api/v1/sites/:site_id/devices/:device_id/vc/switch_master

Response

Status: 200 OK
Status: 400 Bad Request. Possible reasons:
     - The device is not an OC device
     - The VC is currently disconnected
     - The backup routing engine is not present
     - Non-provisioned VC is not supported currently

Convert to Virtualmac VC

Converts an FPC0-based VC to a Virtualmac VC, removing the limitation where the device ID must change whenever FPC0 is renumbered or removed.

POST /api/v1/sites/:site_id/devices/:device_id/vc/convert_to_virtualmac

Response

Status: 200 OK
Status: 400 Bad Request. Possible reasons:
     - The device is not an OC device
     - Virtualmac VC is disabled in the Org Knob settings
     - The VC is already a Virtualmac VC
     - The VC is currently disconnected
     - The device is standalone
     - A new FPC0 exists with its own device config, causing ambiguity.

HA Cluster

SRX cabling

see Chassis Cluster User Guide for SRX Series Devices Here’s the recommended cabling.

SRX300

From ZTP / default state, ge-0/0/0 and ge-0/0/7 (SFP) are default WAN ports and will get DHCP IP. However, ge-0/0/0 becomes OOB/fxp0 after cluster is enabled (i.e. using it for reach Mist is not recommended)

  1. form cluster in UI
  2. configure ge-0/0/7,ge-1/0/7 for WAN (reth0)
  3. configure ge-0/0/2,ge-1/0/2 for ha_data
  4. configure ge-0/0/3- for LAN or additional WAN e.g.
{
    "port_config": {
        "ge-0/0/2,ge-1/0/2": {
            "usage": "ha_data"
        },
        "ge-0/0/7,ge-1/0/7": {
            "usage": "wan",
            "redundant": true,
            "reth_idx": 0,
            "ip_config": {"type": "dhcp"}
        },
    }
}
  1. connect ge-0/0/1 back to back for ha_control
  2. connect ge-0/0/2 back to back for ha_data
  3. connect both ge-0/0/7 to uplink switch to WAN and to reach Mist
  4. power up both devices
  5. it takes about 30 minutes for the cluster to form

SRX320

From ZTP / default state, ge-0/0/0, ge-0/0/7 (SFP) and cl-1/0/0 (LTE) are default WAN ports and will get DHCP IP. However, ge-0/0/0 becomes OOB/fxp0 after cluster is enabled (i.e. using it for reach Mist is not recommended)

ZTP via ge-0/0/7

Similar to SRX300

ZTP via cl-1/0/0 (LTE)
  1. form cluster in UI
  2. configure cl-1/0/0, cl-3/0/0 as WAN (reth0)
  3. configure ge-0/0/2,ge-3/0/2 for ha_data
  4. same as above

SRX340 / SRX345 / SRX380

SRX340/SRX345 has dedicated OOB/fxp0 ports

  1. form cluster in UI
  2. configure ge-0/0/0,ge-5/0/0 for WAN (reth0)
  3. configure ge-0/0/2,ge-5/0/2 for ha_data
  4. configure ge-0/0/3- for LAN or additional WAN
  5. connect ge-0/0/0 to uplink switch to WAN and to reach Mist
  6. connect ge-0/0/1 back-to-back for ha_control
  7. connect ge-0/0/2 back-to-back for ha_data (fabric); or for SRX380, xe-0/0/16 if 10G SFP+ is used
  8. connect ge-0/0/3- to LAN or additional WANs

SRX550

ge-0/0/0 becomes OOB/fxp0 after cluster is enabled, make suenable oob_ip_config as dhcp to maintain cloud connectivity

  1. connect ge-0/0/0 to reach Mist (after cluster is fully up, this port becomes OOB/fxp0)
  2. connect ge-0/0/1 back-to-back for ha_control
  3. connect ge-0/0/2 back-to-back for ha_data (fabric)
  4. connect ge-0/0/3 to WAN (after cluster is up, intended to be used for reth0)
  5. connect ge-0/0/4- to LAN or additional WANs

SRX1500

SRX1500 has, additionally, dedicated HA Control port

  1. form cluster in UI
  2. configure ge-0/0/0,ge-7/0/0 for WAN (reth0)
  3. configure ge-0/0/1,ge-7/0/1 for ha_data
  4. configure ge-0/0/2- for LAN or additional WAN
  5. connect dedicated ha_control back-to-back
  6. connect ge-0/0/0 to uplink switch to WAN and to reach Mist
  7. connect ge-0/0/1 back-to-back for ha_data
  8. connect ge-0/0/2- to LAN or additional WANs

SRX1600

SRX1600 has, additionally, two dedicated HA Control port

  1. form cluster in UI
  2. configure ge-0/0/0,ge-7/0/0 for WAN (reth0)
  3. configure ge-0/0/1,ge-7/0/1 for ha_data
  4. configure ge-0/0/2- for LAN or additional WAN
  5. connect dedicated both ha_control back-to-back
  6. connect ge-0/0/0 to uplink switch to WAN and to reach Mist
  7. connect ge-0/0/1 back-to-back for ha_data
  8. connect ge-0/0/2- to LAN or additional WANs

SRX4100

SRX4100 has dedicated ha_control and ha_data (fabric) ports

  1. connect dedicated ha_control back-to-back
  2. connect dedicated ha_data back-to-back
  3. connect xe-0/0/0 to WAN to reach Mist
  4. connect xe-0/0/1- to LAN or additional WANs

VSRX

When standalone, VSRX has fxp0 as first Network Adapter, then ge-0/0/0-N When clustered, VSRX has fxp0, em0, then ge-0/0/0-N

  1. connect net0 (fxp0) to WAN to reach Mist
  2. connect net1 back-to-back for ha_control
  3. connect net2 (ge-0/0/0) back-to-back for ha_data (fab0/fab1)
  4. connect net3 (ge-0/0/1) to WAN, intended to be used for reth0
  5. connect net4 (ge-0/0/2) to LAN

Form a HA Cluster

Both nodes has to be in the same site. We expect the user to configure ha / ha_data port in port_configs already

POST /api/v1/sites/:site_id/devices/:device_id/ha
{
    "nodes": [
        {
            "mac": "aff827549235"  // node0, same as the mac of device_id
        },
        {
            "mac": "8396cd006c8c"  // node1
        }
    ]
}

Delete a HA Cluster

After deleting the HA Cluster, both nodes will become a standalone device in the same site

DELETE /api/v1/sites/:site_id/devices/:device_id/ha

Replace a Node in a HA Cluster

Usually Device Replacement is done by Device Replacement API. For a HA cluster, you can also replace a node by another device in the same site.

PUT /api/v1/sites/:site_id/devices/:device_id/ha
{
    // either mac has to remain the same as existing cluster
    "nodes": [
        {
            "mac": "aff827549235"  // node0
        },
        {
            "mac": "8396cd006c8c"  // node1
        }
    ]
}

Preempt site mxtunnel ap’s to preferred peer

To preempt AP’s which are not connected to preferred peer to the preferred peer

POST /api/v1/sites/:site_id/mxtunnels/:mxtunnel_id/preempt_aps

Response

{
   "preempted_aps": ["5c5b35000001", "5c5b35000002"]
}

HA Cluster

Form a New HA Cluster

Create a HA Cluster

POST /api/v1/sites/:site_id/devices/:device_id/ha
{
    "nodes": [
        {
            "mac": "aff827549235" // node0, same as the mac of device_id
        },
        {
            "mac": "8396cd006c8c" // node1
        }
    ]
}

Delete HA Cluster

DELETE /api/v1/sites/:site_id/devices/:device_id/ha

Count by Distinct Attributes of Applications

GET /api/v1/sites/:site_id/stats/apps/count?distinct=services&device_mac=&app=Facebook&wired=True

Parameters

Name Type Description
distinct string For wireless devices - ‘ap’, ‘wcid’, ‘ssid’, ‘wlan_id’ ‘app’, default is ‘ap’.

For wired devices - ‘device_mac’, ‘wcid’, ‘src_ip’, ‘port_id’, ‘app’, ‘category’, ‘service’ , default is device_mac
device_mac string MAC of the device
app string Application name
wired string If a device is wired or wireless. Default is False.

Response

{
  "results": [
    {
      "service": "internet",
      "count": 4
    },
    {
      "service": "Corp.internet",
      "count": 4
    }
  ],
  "start": 1633046421.0,
  "end": 1636636504.0,
  "limit": 10,
  "distinct": "service",
  "total": 2
}

Search Calls

GET /api/v1/sites/:site_id/stats/calls/search

Request

The following fields are available for searching.

Name Type Description
mac string device identifier
app string Third party app name

E.g. /api/v1/sites/:site_id/stats/calls/search?mac=001122334455&app=zoom&start=1511967600&end=1513177200

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 10,
    "total": 100,
    "results": [
         {
          "app": "zoom",
          "end_time": 1665465341,
          "org_id": "85e1d87d-6541-4ebd-941a-272cac140948",
          "site_id": "a16fdfc0-8540-47ab-be59-9dd2d00e7c84",
          "meeting_id": 82126359919,
          "rating": 5,
          "start_time": 1665460836,
          "mac": "adf1c481b989",
          "audio_quality": 1,
          "video_quality": 2,
          "screen_share_quality": 3
        },
        {
          "app": "zoom",
          "end_time": 1665465339,
          "org_id": "0c160b7f-1027-4cd1-923b-744534c4b070",
          "site_id": "a16fdfc0-8540-47ab-be59-9dd2d00e7c84",
          "meeting_id": 87578079426,
          "rating": 4,
          "start_time": 1665460914,
          "mac": "983a78ea4a44",
          "audio_quality": 3,
          "video_quality": 1,
          "screen_share_quality": 4
        },
        {
          "app": "zoom",
          "end_time": 1665465339,
          "org_id": "0c160b7f-1027-4cd1-923b-744534c4b070",
          "site_id": "a16fdfc0-8540-47ab-be59-9dd2d00e7c84",
          "meeting_id": 97588079429,
          "rating": 3,
          "start_time": 1665460850,
          "mac": "25e9ddf8b1b9",
          "audio_quality": 4,
          "video_quality": 2,
          "screen_share_quality": 1
        },
        ...
    ]
}

Count by Distinct Attributes of Calls

GET /api/v1/sites/:site_id/stats/calls/count

Request

In addition to the filters that you can have in the search

Name Type Description
distinct string mac
rating list feedback rating between 1-5

NOTE: the filters from /stats/calls/search can also be used. (E.g. /stats/calls/count?distinct=mac&app=zoom&mac=112233445566&start=1511967600&end=1513177200&rating=1,2)

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 100,
    "distinct": "mac",
    "total": 20,
    "results": [
        {
            "count": 217,
            "mac": "112233445566"
        }
        ...
    ]
}

Troubleshoot a call

GET /api/v1/sites/:site_id/stats/calls/client/:mac/troubleshoot?meeting_id=87578079426

Request

In addition to the filters that you can have in the search

Name Type Description
meeting_id string meeting_id, required

Response

{
    "mac": "983a78ea4a44",
    "meeting_id": 87578079426,

    "results": [
        {
            "timestamp": 1695425115,

            // latencies contributors
            "audio_in": {
                "expected": 30.941595,
                "client_tx_bytes": 0.15803306,
                "client_n_streams": 0.15803306,
                "client_wifi_version": 0.18267937,
                "client_rssi": -1.0839354,
                "client_radio_band": 0.5576923,
                "client_tx_rates": 0.62357205,
                "client_rx_bytes": 2.2622051,
                "client_tx_retries": 0.77553505,
                "client_rx_rates": 0.26726437,
                "client_tx_bytes": 6.6164713,
                "client_tx_retries": 1.702031,
                "client_vpn_distaince": 1.6474955,  // when client is connected to an AP in a site but connected to VPN server far away
                "client_cpu": 3.7028809,
                "ap_rtt": 0.16559607,
                "ap_num_clients": -0.6565111,
                "radio_bandwidth": -0.06538621,
                "radio_channel": -0.73391086,
                "radio_util": 12.770318,
                "radio_util_interference": -3.079999,
                "radio_tx_power": 0.10027129,
                "site_num_clients": 0.017364305,
                "wan_rtt": 46.77899,
                "wan_jitter": 5.9680853,
                "wan_avg_download_mbps": 1.4803165,
                "wan_avg_upload_mbps": -0.038184267,
                "wan_max_download_mbps": 1.4803165,
                "wan_max_upload_mbps": -0.038184267,
            },
            "audio_out": { ... },
            "video_in": { ... },
            "video_out": { ... },        
            "expected": -2.86300010566701889,
            "ap_num_clients": -0.08802365511655807,
            "client_rx_rates": 0.02441493794322014,
            "client_rx_retries": -0.14325742423534393,
            "client_rssi": 0.7594696879386902,
            "ap_rtt": 0.09924473613500595,
            "radio_bandwidth": -0.021175479516386986,
            "radio_channel": 0.11686426401138306,
            "radio_util": 0.2452986091375351,
            "client_radio_band": 0.5841414928436279,
            "radio_util_interference": 3.4367904663085938,
            "radio_rx_failed": 1.1782013177871704,
            "radio_ap_change": 0.01850946433842182,
            "client_cpu": 0.00834270566701889,
            "client_vpn_distance": -0.0001660545531194657,
            "client_n_streams": 0.00734270566701889,
            "client_wifi_version": 0.00000070566701889,
            "client_tx_rates": 0.22236637771129608,
            "client_rx_bytes": 0.00002365511655807,
            "client_tx_bytes": 0.00102365511655807,
            "client_tx_retries": 0.3308201730251312,
            "radio_tx_power": 0.121039018034935,
            "site_num_clients": 0.055026158690452576,
            "site_wan_rtt": 0.00000040566701889,
            "site_wan_jitter": 0.00000100566701889,
            "site_wan_avg_download_mbps": 0.00000030566701889,
            "site_wan_avg_upload_mbps": 0.00000005566701889,
            "site_wan_download_mbps": 0.00000080566701889,
            "site_wan_upload_mbps": 0.00000020566701889
        }
    ]
}

Summary of calls troubleshooting

GET /api/v1/sites/:site_id/stats/calls/troubleshoot?start=1531776183&end=1531862583&ap=:mac

Request

Name Type Description
start int Start time
end int End time
ap string AP MAC, optional

Response

{
    "start" : 1531776183,
    "end" : 1531862583,
    "count": 245,

    // average latencies contributor
    "audio_out": {
            "client_tx_rates": 10.668423069847954,
            "client_tx_bytes": 1.8379177401463191,
            "client_tx_retries": 43.323209603627525,
            "site_wan_upload_mpbs": -0.8131117953194512,
            "site_wan_avg_upload_mpbs": -0.988989942603641,
            "ap_num_clients": 45.48306793636746,
            "client_rssi": 17.251008563571506,
            "ap_rtt": 6.352042701509264,
            "radio_bandwidth": -0.1533682727151447,
            "radio_channel": 0.662909648484654,
            "radio_util": 27.891777674357098,
            "client_radio_band": 1.5325644097982958e-06,
            "radio_util_interference": 4.38913492154744,
            "site_wan_rtt": 15.094849904378256,
            "site_wan_jitter": 0.7875519659784105,
            "client_cpu": 9.323452578650581,
            "site_num_clients": -0.2855822932389047,
            "client_vpn_distance": 112.4420166015625,
            "expected": 29.74261474609375,
        },
    "audio_in": { ... },
    "video_out": { ... },
    "video_in": { ... },
    "expected": -2.86300010566701889,
    "ap_num_clients": -0.08802365511655807,
    "client_rx_rates": 0.02441493794322014,
    "client_rx_retries": -0.14325742423534393,
    "client_rssi": 0.7594696879386902,
    "ap_rtt": 0.09924473613500595,
    "radio_bandwidth": -0.021175479516386986,
    "radio_channel": 0.11686426401138306,
    "radio_util": 0.2452986091375351,
    "client_radio_band": 0.5841414928436279,
    "radio_util_interference": 3.4367904663085938,
    "radio_rx_failed": 1.1782013177871704,
    "radio_ap_change": 0.01850946433842182,
    "client_cpu": 0.00834270566701889,
    "client_vpn_distance": -0.0001660545531194657,
    "client_n_streams": 0.00734270566701889,
    "client_wifi_version": 0.00000070566701889,
    "client_tx_rates": 0.22236637771129608,
    "client_rx_bytes": 0.00002365511655807,
    "client_tx_bytes": 0.00102365511655807,
    "client_tx_retries": 0.3308201730251312,
    "radio_tx_power": 0.121039018034935,
    "site_num_clients": 0.055026158690452576,
    "site_wan_rtt": 0.00000040566701889,
    "site_wan_jitter": 0.00000100566701889,
    "site_wan_avg_download_mbps": 0.00000030566701889,
    "site_wan_avg_upload_mbps": 0.00000005566701889,
    "site_wan_download_mbps": 0.00000080566701889,
    "site_wan_upload_mbps": 0.00000020566701889
}

Calls aggregation stats

GET /api/v1/sites/:site_id/stats/calls/summary?start=1531776183&end=1531862583&ap_mac=:mac

Request

Name Type Description
start int Start time
end int End time
ap_mac string AP MAC, optional
app string app name (zoom or teams). default is both. Optional

Response

{
    "num_users": 3,
    "num_aps": 1,
    "total_minutes": 575217.0,
    "bad_minutes": 5566.0,
    "bad_minutes_site_wan": 3612.0,
    "bad_minutes_wireless": 1428.0,
    "bad_minutes_client": 526.0
}

Auto AP Placement and orientation

POST Run Auto placement for Map

POST /api/v1/sites/:site_id/maps/:map_id/auto_placement

Request Payload

{
    "macs": [<list of device macs>, ...],
    "force_collection": true,
    "override": false,
    "dryrun": false, 
}

Parameters

Name Type Description
macs list Optional list of MAC addresses to filter map devices by.
force_collection boolean Set to true to recollect auto placement data; set to false to rerun the localizer on existing FTM data.
override boolean Set to true to run auto placement even if there are invalid APs in the selected APs.
dryrun boolean Set to true to perform an invalid AP check and provide an estimated run time without enqueuing the run into the auto placement service.

Usage

This API is called to trigger auto placement for a map. For the auto placement feature to work, RTT-FTM data needs to be collected from the APs on the map. This scan is disruptive, and users must be notified of service disruption during the auto placement process. Repeated POST requests to this endpoint while a map is still running will be rejected.

force_collection is set to false by default. If force_collection is set to false, the API attempts to start localization with existing data. If no data exists, the API attempts to start orchestration. If force_collection is set to true, the API attempts to start orchestration.

Providing a list of devices is optional. If provided, autoplacement suggestions will be made only for the specified devices. If no list is provided, all APs associated with the map are considered by default.

Responses

HTTP Status 200 - Dryrun for map completed

{
    "valid": true,
    "reason": "Map has met the minimum requirements for auto placement",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime" : 30,
    "wifi_interrupting": false
}

HTTP Status 200 - Service started successfully for localization / orchestration

{
    "started": true,
    "valid": true,
    "reason": "Started localization for auto placement",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    }
}
{
    "started": true,
    "valid": true,
    "reason": "Started collection for auto placement",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime": 30,
    "wifi_interrupting": true
}

HTTP Status 200 - Service started after override for localization / orchestration

{
    "started": true,
    "valid": false,
    "reason": "Started localization for auto placement",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        },
        "00000000004": {
            "valid": false,
            "reason": "Device model AP41 is not supported for auto placement"
        },
        "00000000005": {
            "valid": false,
            "reason": "Device firmware 0.14.28300 does not meet the minimum requirement 0.14.28310"
        }
    }
}
{
    "started": true,
    "valid": false,
    "reason": "Started collection for auto placement",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        },
        "00000000004": {
            "valid": false,
            "reason": "Device model AP41 is not supported for auto placement"
        },
        "00000000005": {
            "valid": false,
            "reason": "Device firmware 0.14.28300 does not meet the minimum requirement 0.14.28310"
        }
    },
    "estimated_runtime": 30,
    "wifi_interrupting": false
}

HTTP Status 200 - Service failed to start due containing invalid APs

{
    "started": false,
    "valid": false,
    "reason": "Map has APs that do not meet the minimum requirements for auto placement",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        },
        "00000000004": {
            "valid": false,
            "reason": "Device model AP41 is not supported for auto placement"
        },
        "00000000005": {
            "valid": false,
            "reason": "Device firmware 0.14.28300 does not meet the minimum requirement 0.14.28310"
        }
    }
}

HTTP Status 200 - Map failed to start as it had less than 3 APs associated with it

{
    "started": false,
    "valid": false,
    "reason": "Map has less than 3 APs associated with it to perform auto placement",
    "devices": {}
}

HTTP Status 200 - Auto placement is already in progress for this map

{
    "started": false,
    "valid": true,
    "reason": "Map Already Enqueued",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime" : 30
}

HTTP Status 200 - Unable to reach the autoplacement service

{
    "started": false,
    "valid": true,
    "reason": "Unable to reach auto placement service",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime" : 30
}
Name Type Description
started boolean Indicates whether the autoplacement process has started.
valid boolean Indicates whether the autoplacement request is valid.
reason string Provides the reason for the status.
devices object Contains the validation status of each device.
estimated_runtime int Estimated runtime for the process in seconds.
wifi_interrupting boolean Indicates whether running collection disrupt WIFI service for map.

NOTE: If all APs are both FTM and UWB capable, FTM valid is disabled to prevent interruption of WIFI service.

Name Type Description
valid boolean Indicates whether the ap is valid.
reason string Provides the reason for the status if the AP is invalid.

GET Auto placement status details for Map

GET /api/v1/sites/:site_id/maps/:map_id/auto_placement

Usage

This API is called to view the current status of auto placement for a given map.

Response

{
    "status": "done",
    "start_time": 1678900062,
    "stop_time": 1678900362,
}
    "status": "inprogress",
    "start_time": 1678900062,
    "est_time_left": 0.0,
Name Type Description
status String the status of autoplacement for a given map
start_time float time when autoplacement process was last queued for this map
est_time_left float (Only when inprogress) estimate of the time to completion
stop_time float time when autoplacement completed or was manually stopped

Status Descriptions

Status Description
pending Autoplacement has not been requested for this map
inprogress Autoplacement is currently processing
done The autoplacement process has completed
data_needed Additional position data is required for autoplacement. Users should verify the requested anchor APs have a position on the map
invalid_model Autoplacement is not supported on the model of the APs on the map
invalid_version Autoplacement is not supported with the APs current firmware version
error There was an error in the autoplacement process

DELETE Auto placement for Map

DELETE /api/v1/sites/:site_id/maps/:map_id/auto_placement

Usage

This API is called to force stop auto placement for a given map

Responses

POST a map_id for auto orientation

POST /api/v1/sites/:site_id/maps/:map_id/auto_orient

Request Payload

{
    "macs": [<list of device macs>, ...],
    "force_collection": true,
    "override": false,
    "dryrun": false
}

Parameters

Name Type Description
macs list Optional list of MAC addresses to filter map devices by.
force_collection boolean Set to true to recollect auto orient data; set to false to rerun auto orient on existing run results.
override boolean Set to true to run auto orient even if there are invalid APs in the selected APs.
dryrun boolean Set to true to perform an invalid AP check and provide an estimated run time without enqueuing the run into the auto orient service.

Usage

This API is called to trigger a map for auto orient. For auto orient feature to work, BLE data needs to be collected from the APs on the map. This precess is not disruptive unlike FTM collection. Repeated POST requests to this endpoint while a map is still running will be rejected.

force_collection is set to false by default. If force_collection is set to false, the API attempts to start orientation with existing data. If no data exists, the API attempts to start collecting orientation data. If force_collection is set to true, the API attempts to start collecting orientation data.

Providing a list of device macs is optional. If provided, auto orientation suggestions will be made only for the specified devices. If no list is provided, all APs associated with the map are considered by default.

Responses

HTTP Status 200 - Dryrun for map completed

{
    "valid": true,
    "reason": "Map has met the minimum requirements for auto orient",
    "devices": {
        "00000000001": {
            "valid": true
            "reason": "Device meets the minimum requirements for auto orient"
        },
        "00000000002": {
            "valid": true
            "reason": "Device meets the minimum requirements for auto orient"
        },
        "00000000003": {
            "valid": true
            "reason": "Device meets the minimum requirements for auto orient"
        }
    },
    "estimated_runtime" : 300
}

HTTP Status 200 - Service started successfully for localization / orient collection

{
    "started": true,
    "valid": true,
    "reason": "Started localization for auto orient",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
}
{
    "started": true,
    "valid": true,
    "reason": "Started collection for auto orient",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime" : 300
}

HTTP Status 200 - Service started after override for localization / orient collection

{
    "started": true,
    "valid": false,
    "reason": "Started localization for auto orient",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        },
        "00000000004": {
            "valid": false,
            "reason": "Device model AP32 is not supported for auto orient"
        },
        "00000000005": {
            "valid": false,
            "reason": "Device firmware 0.14.28300 does not meet the minimum requirement 0.14.28310"
        }
    }
}
{
    "started": true,
    "valid": false,
    "reason": "Started collection for auto orient",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        },
        "00000000004": {
            "valid": false,
            "reason": "Device model AP32 is not supported for auto orient"
        },
        "00000000005": {
            "valid": false,
            "reason": "Device firmware 0.14.28300 does not meet the minimum requirement 0.14.28310"
        }
    },
    "estimated_runtime" : 300
}

HTTP Status 200 - Service failed to start due containing invalid APs

{
    "started": false,
    "valid": false,
    "reason": "Map has APs that do not meet the minimum requirements for auto orient",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        },
        "00000000004": {
            "valid": false,
            "reason": "Device model AP41 is not supported for auto orient"
        },
        "00000000005": {
            "valid": false,
            "reason": "Device firmware 0.14.28300 does not meet the minimum requirement 0.14.28310"
        }
    }
}

HTTP Status 200 - Map failed to start as it had less than 3 APs associated with it

{
    "started": false,
    "valid": false,
    "reason": "Map has less than 3 APs associated with it to perform auto orient",
    "devices": {}
}

HTTP Status 200 - Auto orient is already in progress for this map

{
    "started": false,
    "valid": true,
    "reason": "Map Already Enqueued",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime" : 300
}

HTTP Status 200 - Unable to reach the orient service

{
    "started": false,
    "valid": true,
    "reason": "Unable to reach auto orient service",
    "devices": {
        "00000000001": {
            "valid": true
        },
        "00000000002": {
            "valid": true
        },
        "00000000003": {
            "valid": true
        }
    },
    "estimated_runtime" : 300
}

Response Definitions

Name Type Description
started boolean Indicates whether the auto orient process has started.
valid boolean Indicates whether the auto orient request is valid.
reason string Provides the reason for the status.
devices object Contains the validation status of each device.
estimated_runtime int Estimated runtime for the process in seconds.
Name Type Description
valid boolean Indicates whether the ap is valid.
reason string Provides the reason for the status if the AP is invalid.

GET Get status for Auto Orientation

GET /internal/sites/:site_id/maps/:map_id/auto_orient

Usage

This API is called to view the current status of auto orient for a given map.

Response

{
    "status": "done",
    "start_time": 1678900062,
    "stop_time": 1678900362,
}
    "status": "inprogress",
    "start_time": 1678900062,
    "est_time_left": 300.0,
Name Type Description
status String the status of auto orient for a given map
start_time float time when auto orient process was last queued for this map
est_time_left float (Only when inprogress) estimate of the time to completion
stop_time float time when auto orient completed or was manually stopped

Status Descriptions

Status Description
pending Auto orient has not been requested for this map
inprogress Auto orient is currently processing
done The auto orient process has completed
error There was an error in the auto orient process

DELETE a map_id for auto orientation

DELETE /api/v1/sites/:site_id/maps/:map_id/auto_orient

Usage

This API is used to cancel Auto Orientation for a map

Responses

POST a list of mac addresses to accept or reject localization data

POST /api/v1/sites/:site_id/maps/:map_id/use_auto_ap_values

Request Payload

{
    "for": "placement",
    "accept": true,
    "macs": [<list of device macs>],
}
    "for": "orientation",
    "accept": false,
    "macs": [<list of device macs>],
Name Type Description
for String The selector to choose auto placement or auto orientation. default: placement
accept bool If accept is true, accepts placement for devices in list otherwise. If false, reject for devices in list. default: false
device_macs list A list of macs to accept/reject. If a list is not provided the API will accept/reject for the full map.

Usage

This API is used to accept or reject the cached autoplacement and auto-orientation values of a map or subset of APs on a map. Any APs that have autoplacement values are stored in cache for up to 7 days while awaiting acceptance or rejection.

Accepting the autoplacement values overwrites the existing X, Y, and orientation of the accepted APs with their cached autoplacement values.
Rejecting the autoplacement values causes the APs to retain their current X, Y, and orientation.

Once a decision (accept or reject) is made, or the 7-day time-to-live (TTL) expires, the cached values are deleted.

Responses

POST a list of mac addresses to clear auto placement data

POST /api/v1/sites/:site_id/maps/:map_id/clear_autoplacement

Request Payload

{
    "macs": [<list of device macs>, ...]
}

Usage

This API is used to destroy the cached autoplacement locations of a map or subset of APs on a map.

Responses

  1. 200 Success

POST a list of mac addresses to clear auto orientation data

POST /api/v1/sites/:site_id/maps/:map_id/clear_auto_orient

Request Payload

{
    "macs": [<list of device macs>, ...]
}

Usage

This API is used to destroy the autoorientations of a map or subset of APs on a map.

Responses

  1. 200 Success

Search OtherDevices Events

GET /api/v1/sites/:site_id/otherdevices/events/search?mac=4c9614a78e00

Supported Filters

Name Type Description
org_id string org id
site_id string site id
mac string mac
device_mac string mac of attached device
vendor string vendor name
type string event type
model string device model

Response

{
    "results": [
        {
            "org_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862a",
            "site_id": "4ac1dcf4-9d8b-7211-65c4-057819f0862b",
            "vendor": "cradlepoint",
            "mac": "5c5b351e13b5",
            "device_mac": "5c5b351e13b5",
            "text": "Plugged: The Internal 5GB (SIM1) has been inserted into Internal 1.",
            "timestamp": 1547235620.89,
            "type": "CELLULAR_EDGE_MODEM_WAN_PLUGGED",
            "model": "W1850"
        },
        ...
    ]
}

Count OtherDevices Events

GET /api/v1/sites/:site_id/otherdevices/events/count?distinct=mac

Response

{
    "end": 1545874660.211871,
    "distinct": "mac",
    "results": [
        {
            "count": 22,
            "mac": "0030448c6e40"
        }
    ],
    "start": 1545788260.21184,
    "limit": 10,
    "total": 1
}

Search WAN Usages

GET /api/v1/sites/:site_id/wan_usages/search

Request

Name Type Description
mac string MAC address
peer_mac string Peer MAC address
port_id string Port ID for the device
peer_port_id string Peer Port ID for the device
policy string policy for the wan path
tenant string tenant network in which the packet is sent
path_type string path_type of the port
### Response
{
  "results": [
    {
        "mac": "5c5b35000001",
        "port_id": "ge-0/0/0.0",
        "path_weight" : 10,
        "policy": "policy1",
        "tenant": "tenant1",
        "path_type": "vpn",
        "peer_mac": "0200018c95e1",
        "peer_port_id": "ge-0/0/3",
    }
  ]
}

Count by Distinct Attributes of wan port

GET /api/v1/sites/:site_id/wan_usages/count

Request

In addition to the filters that you can have in the search

Name Type Description
mac string MAC address
peer_mac string Peer MAC address
port_id string Port ID for the device
peer_port_id string Peer Port ID for the device
policy string policy for the wan path
tenant string tenant network in which the packet is sent
path_type string path_type of the port

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 100,
    "distinct": "mac",
    "total": 20,
    "results": [
        {
            "count": 217,
            "Policy": "P1"
        }
    ]
}

Search WAN Clients

GET /api/v1/sites/:site_id/wan_clients/search

Request

Name Type Description
mac string partial / full MAC address
hostname string partial / full hostname
ip string client IP
mfg string Manufacture
network string network
ip_src string IP source

Response

{
  "results": [
    {
      "wcid": "8bbe7389-212b-c65d-2208-00fab2017936",
      "hostname": [
        "sonoszp"
      ],
      "ip": [
        "192.168.1.139",
        "192.168.1.122"
      ],
      "mfg": "Sonos",
      "last_hostname": "sonoszp",
      "timestamp": 1718791390,
      "org_id": "b4e16c72-d50e-4c03-a952-a3217e231e2c",
      "site_id": "f688779c-e335-4f88-8d7c-9c5e9964528b",
      "last_ip": "192.168.1.139",
      "network": "lan",
      "ip_src": "dhcp",
      "dhcp_expire_time": 1718798190,
      "dhcp_start_time": 1718788190
    },
    {
      "hostname": [
        "inband-management",
      ],
      "ip": [
        "169.254.127.127"
      ],
      "last_hostname": "inband-management",
      "When": "2022-12-31T23:59:43.497+0000",
      "org_id": "b4e16c72-d50e-4c03-a952-a3217e231e2c",
      "site_id": "f688779c-e335-4f88-8d7c-9c5e9964528b",
      "last_ip": "169.254.127.127"
    }
  ]
}

Count by Distinct Attributes of WAN Clients

GET /api/v1/sites/:site_id/wan_clients/count?distinct=mfg

Request

Name Type Description
distinct string hostname, ip, mfg, network, default is mac

Response

{
    "start": 1511967600,
    "end": 1513177200,
    "limit": 10,
    "distinct": "device",

    "total": 2,
    "results": [
        {
            "mfg": "Apple",
            "count": 61
        },
        {
            "mfg": "Sonos",
            "count": 44
        }
    ]
}

Search WAN Client Events

GET /api/v1/sites/:site_id/wan_clients/events/search

Request

Name Type Description
type string Event type, e.g. CLIENT_IP_ASSIGNED, CLIENT_IP_RENEWED, CLIENT_IP_EXPIRED
mac string partial / full MAC address
hostname string partial / full hostname
ip string client IP
mfg string Manufacture

Response

{
  "start": 1512572151,
  "end": 1513176951,
  "limit": 10,
  "total": 1,
  'results': [
    {
      "When": "2022-12-31T23:59:59.293Z",
      "org_id": "b0b9f142-aaba-11e6-aafc-0242ac110002",
      "site_id": "fc656275-b157-43fd-b922-5f4f341c19bf",
      "wcid": "62bbfb75-10d8-49d1-dec7-d2df91624287",
      "random_mac": False,
      "ev_type": "CLIENT_IP_ASSIGNED",
      "text": "DHCP Ack IP 192.168.88.216",
      "metadata": {
        "client_ip": "192.168.88.216",
        "expiration": 1672823632.127
      }
    }
  ]
}

Count by Distinct Attributes of WAN Client-Events

GET /api/v1/sites/:site_id/wan_client/events/count?distinct=type

Request

Name Type Description
distinct string type, hostname, ip, mfg, mac

Response

{
  "start": 1513276353,
  "end": 1513362753,
  "limit": 3,
  "total": 3,
  "results": [
    {
      "type": "CLIENT_IP_ASSIGNED",
      "count": 4
    },
    {
      "type": "CLIENT_IP_RENEWED",
      "count": 2
    },
    {
      "type": "CLIENT_IP_EXPIRED",
      "count": 2
    }
  ]
}

Example Delivery of nac-accounting

POST /uri/... HTTP/1.1

Host: hooks.abc.com:443
User-Agent: Mist-webhook
Content-Type: application/json
Content-Length: 596
X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{
  "topic": "nac-accounting",
  "events": [
    {
      "timestamp": 1547235620.89,
      "ap": "5c5b355005be",
      "type": "NAC_ACCOUNTING_STOP",
      "mac": "6e795836d5f9",
      "auth_type": "eap-tls",
      "bssid": "5c5b35546bb4",
      "client_type": "wireless",
      "client_ip": "172.16.87.4",
      "nas_vendor": "juniper-mist",
      "rx_pkts": 9523,
      "tx_pkts": 5233,
      "ssid": "Test-CMR SSID",
      "username": "hi"
      "org_id": "625aba64-fe72-4b14-8985-cbf31ec3d78a",
      "site_id": "ec9d1e85-af24-43f9-8d65-d620580e8631"
    }
  ]
}
Name Type Description
timestamp long sampling time (in epoch)
ap string mac address of the AP the client roamed or disconnected from
type string type of event. E.g. “ACCOUNTING_START”, “ACCOUNTING_UPDATE”, “ACCOUNTING_STOP”
mac string the client’s mac
auth_type string radius authentication type
bssid string it’s the MAC physical address of the access point
client_type string client type E.g. “wired”, “wireless”, “vty”
client_ip string IP Address of client
nas_vendor string NAS Device vendor name E.g. “Juniper”, “Cisco”
rx_pkts int number of packets received
tx_pkts int number of packets sent
ssid string ESSID
username string username authenticated with
org_id string Org ID
site_id string Site ID

### Example Delivery of nac-events

POST /uri/… HTTP/1.1

Host: hooks.abc.com:443 User-Agent: Mist-webhook Content-Type: application/json Content-Length: 596 X-Mist-Signature: ce3af7760f1289d02bf6a7ad19f3214c4e5c7c2e

{ “topic”: “nac-events”, “events”: [ { “type”: “NAC_CLIENT_PERMIT”, “nacrule_id”: “32f27e7d-ff26-4a9b-b3d1-ff9bcb264c62”, “nacrule_matched”: true, “dryrun_nacrule_id”: “32f27e7d-ff26-4a9b-b3d1-ff9bcb264012”, “dryrun_nacrule_matched”: true, “auth_type”: “eap-ttls”, “vlan”: “750”, “nas_vendor”: “juniper-mist”, “bssid”: “5c5b355fafcc”, “idp_id”: “912ef72e-2239-4996-b81e-469e87a27cd6”, “idp_role”: [ “itsuperusers”, “vip” ], “resp_attrs”: [ “Tunnel-Type=VLAN”, “Tunnel-Medium-Type=IEEE-802”, “Tunnel-Private-Group-Id=750”, “User-Name=anonymous” ], “ssid”: “##mist_nac”, “username”: “user@deaflyz.net”, “timestamp”: 1691512031.358188, “org_id”: “27547ac2-d114-4e04-beb1-f3f1e6e81ec6”, “site_id”: “441a1214-6928-442a-8e92-e1d34b8ec6a6”, “random_mac”: False, “ap”: “5c5b35513227”, “mac”: “ac3eb179e535” } ] }


Name|Type| Description
----|----|------------
`type`|`string`| event type, e.g. NAC_CLIENT_PERMIT
`nacrule_id` | `string` | NAC Policy Rule ID, if matched
`nacrule_matched` | `bool` | NAC Policy Rule Matched
`dryrun_nacrule_id` | `string` | NAC Policy Dry Run Rule ID, if present and matched
`dryrun_nacrule_matched` | `bool` | True - if dryrun rule present and matched with priority, False - if not matched or not present
`auth_type`|`string`| authentication type, e.g. "eap-tls", "eap-peap", "eap-ttls", "eap-teap", "mab", "device-auth"
`vlan`|`string`| Vlan ID
`nas_vendor`|`string`| vendor of NAS device
`bssid`|`string`| SSID
`idp_id` | `string` | SSO ID, if present and used
`idp_role` | `string` | IDP returned roles/groups for the user
`resp_attrs` | `list` | Radius attributes returned by NAC to NAS Devive
`ssid`|`string`| SSID
`username`|`string`| Username presented by the client
`timestamp`|`long`| start time, in epoch
`org_id`| `string`  | org id
`site_id`| `string`  | site id if assigned, null if not assigned
`ap`|`string`| AP MAC
`random_mac`|`boolean`| random mac
`mac`| `string`  | MAC address


Search NAC Client Events

GET /api/v1/sites/:site_id/nac_clients/events/search

Request

Name Type Description
type string event type, e.g. NAC_CLIENT_PERMIT
nacrule_id string NAC Policy Rule ID, if matched
dryrun_nacrule_id string NAC Policy Dry Run Rule ID, if present and matched
auth_type string authentication type, e.g. “eap-tls”, “peap-tls”, “eap-ttls”, “eap-teap”, “mab”, “psk”, “device-auth”
vlan string Vlan ID
nas_vendor string vendor of NAS device
bssid string SSID
ssid string SSID
idp_username string Username presented to the Identity Provider
username string Username presented by the client
org_id string org id
site_id string site id if assigned, null if not assigned
ap string AP MAC
mac string MAC address
mxedge_id string Mist Edge ID used to connect to cloud
port_type string Type of client i.e wired, wireless
device_mac string Switch MAC Address
ip string IP addressed assigned to client
port_id string Port ID for the device
usermac_label list labels derived from usermac entry
text string partial / full MAC address, username, device_mac or ap
nas_ip string IP address of NAS device
sort string sort options, ‘-‘ prefix represents DESC order, default is wcid in ASC order
ingress_vlan string vendor specific Vlan ID in radius requests

Response

{
    "start": 1512572151,
    "end": 1513176951,
    "limit": 10,

    "total": 1,
    "results": [
        {
            "type": "NAC_CLIENT_PERMIT",
            "nacrule_id": "32f27e7d-ff26-4a9b-b3d1-ff9bcb264c62",
            "nacrule_matched": true,
            "auth_type": "eap-ttls",
            "vlan": "750",
            "nas_vendor": "juniper-mist",
            "bssid": "5c5b355fafcc",
            "idp_id": "912ef72e-2239-4996-b81e-469e87a27cd6",
            "idp_role": [
                "itsuperusers",
                "vip"
            ],
            "resp_attrs": [
                "Tunnel-Type=VLAN",
                "Tunnel-Medium-Type=IEEE-802",
                "Tunnel-Private-Group-Id=750",
                "User-Name=anonymous"
            ],
            "ssid": "##mist_nac",
            "username": "user@deaflyz.net",
            "timestamp": 1691512031.358188,
            "org_id": "27547ac2-d114-4e04-beb1-f3f1e6e81ec6",
            "site_id": "441a1214-6928-442a-8e92-e1d34b8ec6a6",
            "random_mac": false,
            "ap": "5c5b35513227",
            "mac": "ac3eb179e535"
        }
    ]
}

Count by Distinct Attributes of NAC Client-Events

GET /api/v1/sites/:site_id/nac_clients/events/count?distinct=type

Request

Name Type Description
distinct string type / nacrule_id / dryrun_nacrule_id / auth_type / vlan / nas_vendor / username / ap / mac / ssid

Response

{
    "start": 1513276353,
    "end": 1513362753,
    "limit": 3,

    "total": 3,
    "results": [
        {
            "count": 80,
            "type": "NAC_CLIENT_PERMIT"
        },
        {
            "count": 36,
            "type": "NAC_CLIENT_CERT_CHECK_SUCCESS"
        },
        {
            "count": 19,
            "type": "NAC_CLIENT_DENY"
        }
    ]
}

Search NAC Clients

GET /api/v1/sites/:site_id/nac_clients/search

Request

Name Type Description
nacrule_id string NAC Policy Rule ID, if matched
nacrule_matched bool If NAC Policy Rule Matched
auth_type string authentication type, e.g. “eap-tls”, “peap-tls”, “eap-ttls”, “eap-teap”, “mab”, “device-auth”
vlan string Vlan name or ID assigned to the client
nas_vendor string vendor of NAS device
nas_ip string IP address of NAS device
idp_id string SSO ID, if present and used
ssid string SSID
username string Username presented by the client
timestamp long start time, in epoch
org_id string org id
site_id string site id if assigned, null if not assigned
ap string AP MAC connected to by client
mac string MAC address
device_mac string Switch MAC Address
status string Connection status of client i.e “permitted”, “denied, “session_started”, “session_ended”
type string Client type i.e. “wireless”, “wired” etc.
mdm_compliance string MDM compliancy of client i.e “compliant”, “not compliant”
mdm_managed bool Filters NAC clients that are managed by MDM providers
mdm_provider string MDM provider of client’s organisation eg “intune”, “jamf”
edr_status string EDR Status of client i.e “sentinelone_healthy”, “sentinelone_infected”, “crowdstrike_low”, “crowdstrike_medium”, “crowdstrike_high”, “crowdstrike_critical”, “crowdstrike_informational”
edr_managed bool Filters NAC clients that are integrated with EDR providers
edr_provider string EDR provider of client’s organisation eg “sentinelone”, “crowdstrike”
mxedge_id string ID of Mist Edge that the client is connected through
nacrule_name string NAC Policy Rule Name matched
text string partial / full MAC address, last_username, device_mac, nas_ip or last_ap
sort string sort options, ‘-‘ prefix represents DESC order, default is wcid in ASC order
usermac_label string Labels derived from usermac entry
mfg string Manufacturer of the client’s device
family string Family of the client’s device
model string Model of the client’s device
os string Operating system of the client’s device
hostname string Hostname of the client’s device

Response

{
    "start": 1512572151,
    "end": 1513176951,
    "limit": 10,

    "total": 2,
    "results": [
        {
            "ap": ["5c5b35bf16bb", "d4dc090041b4"],
            "auth_type": "eap-tls",
            "cert_cn": ["werqwerty"],
            "cert_issuer": ["/DC=com/DC=onmicrosoft/DC=Juniper461/CN=Juniper461-CA"],
            "idp_id": "a13df686-dc39-4bdd-920f-89a412444c06",
            "idp_role": ["Employee"],
            "ip": ["10.7.51.74"],
            "last_ap": "d4dc090041b4",
            "last_cert_cn": "werqwerty",
            "last_cert_expiry": 1725373986,
            "last_cert_issuer": "/DC=com/DC=onmicrosoft/DC=Juniper461/CN=Juniper461-CA",
            "last_ip": "10.7.51.74",
            "last_nacrule_id": "558d6c97-d3c2-43e7-941d-244603ef5ce6",
            "last_nacrule_name": "mdm_complaince",
            "last_nas_vendor": "juniper-mist",
            "last_ssid": "mdm_test",
            "last_status": "permitted",
            "nacrule_id": ["558d6c97-d3c2-43e7-941d-244603ef5ce6"],
            "nacrule_matched": true,
            "nacrule_name": ["mdm_complaince"],
            "nas_vendor": ["juniper-mist"],
            "nas_ip": "10.206.96.100",
            "mac": "ac3eb179e535",
            "org_id": "9301bff6-8992-49d6-b1ea-907ee81bb5fb",
            "random_mac": true,
            "site_id": "13d69fb2-5456-43a1-90c4-89513487dde2",
            "ssid": ["mdm_test"],
            "timestamp": 1694689718.612,
            "type": "wireless",
            "usermac_label": [
                "non-compliant",
                "building26",
                "floor52"
            ],
            "last_mfg": "Apple, Inc.",
            "last_family": "Phone/Tablet/Wearable",
            "last_model": "iPhone 16 Pro",
            "last_os": "iOS 18.1",
            "last_hostname": "Apple iPhone Work",
            "edr_status": "sentinelone_healthy",
            "edr_provider": "sentinelone",
            "edr_managed": true
        },
        {
            "auth_type": "mab",
            "group": "employee",
            "type": "wired",
            "last_status": "session_started",
            "device_mac": "0c599c646778",
            "gbp_tag": "3005",
            "last_nacrule_id": "85abd6a3-c4a4-497d-a568-2765046e0dba",
            "last_nacrule_name": "Allowed Printers",
            "last_nas_vendor": "juniper-mist",
            "last_port_id": "ge-0/0/1.0",
            "last_username": "CanonPrinter1",
            "last_vlan": "750",
            "nacrule_id": [
                "85abd6a3-c4a4-497d-a568-2765046e0dba"
            ],
            "nacrule_matched": true,
            "nacrule_name": [
                "Allowed Printers"
            ],
            "nas_vendor": [
                "juniper-mist"
            ],
            "org_id": "9301bff6-8992-49d6-b1ea-907ee81bb5fb",
            "port_id": [
                "ge-0/0/1.0"
            ],
            "random_mac": false,
            "site_id": "441a1214-6928-442a-8e92-e1d34b8ec6a6",
            "site_ids": [
                "441a1214-6928-442a-8e92-e1d34b8ec6a6"
            ],
            "username": [
                "CanonPrinter1",
                "6c3c7c7573e7"
            ],
            "vlan": [
                "750",
                "751"
            ],
            "vlan_source": "usermac",
            "timestamp": 1721641794.344
        }
    ]
}

Count by Distinct Attributes of NAC Clients

GET /api/v1/sites/:site_id/nac_clients/count?distinct=type

Request

Name Type Description
distinct string type / auth_type / nacrule_matched / mxedge_id / ssid / status / username / nacrule_id / nas_vendor / vlan / mdm_compliance / mdm_provider / idp_id / nacrule_name / device_mac / ap / usermac_label / mdm_managed / mfg / model / os / family / hostname / nas_ip / edr_provider / edr_status / edr_managed

Response

{
    "start": 1513276353,
    "end": 1513362753,
    "limit": 3,
    "total": 2,
    "results": [
        {
            "count": 10,
            "type": "wired"
        },
        {
            "count": 15,
            "type": "wireless"
        }
    ]
}

Search Service Path Events

GET /api/v1/sites/:site_id/services/events/search

Request

Name Type Description
type string Event type, e.g. GW_SERVICE_PATH_DOWN
text string Description of the event including the reason it is triggered
vpn_name string Peer name
vpn_path string Peer path name
policy string Service policy associated with that specific path
port_id string Network interface
peer_port_id string Port ID of the peer gateway
peer_mac string MAC address of the peer gateway
model string Device model
version string Device firmware version
timestamp long Start time, in epoch
org_id string Org id
site_id string Site id
mac string MAC address
path_weight int Path weight

Response

{
  "results": [
    {
      "timestamp": 1697037334.204,
      "org_id": "a3c6718f-2823-4e48-bf5e-b841768a4c9b",
      "site_id": "4279edbd-1d24-41ea-9505-2eb26c8590fa",
      "port_id": "ge-0/0/0",
      "model": "SSR120",
      "type": "GW_SERVICE_PATH_DOWN",
      "text": "Probe Down",
      "version": "6.1.5-14.lts",
      "mac": "90ec7734b374",
      "policy": "management",
      "path_weight": 10
    },
    {
      "vpn_name": "Syracuse_HUB",
      "timestamp": 1697037328.651775,
      "org_id": "a3c6718f-2823-4e48-bf5e-b841768a4c9b",
      "site_id": "4279edbd-1d24-41ea-9505-2eb26c8590fa",
      "vpn_path": "Syracuse_HUB-Wan0",
      "text": "Peer Path Down",
      "port_id": "ge-1/0/6",
      "model": "SSR120",
      "type": "GW_SERVICE_PATH_REMOVE",
      "version": "6.1.5-14.lts",
      "mac": "90ec7734b374",
      "policy": "INTERNET",
      "path_weight": 20
    },
    {
      "timestamp": 1697037325.37843,
      "org_id": "a3c6718f-2823-4e48-bf5e-b841768a4c9b",
      "site_id": "4279edbd-1d24-41ea-9505-2eb26c8590fa",
      "port_id": "ge-1/0/6",
      "model": "SSR120",
      "type": "GW_SERVICE_PATH_ADD",
      "version": "6.1.5-14.lts",
      "mac": "90ec7734b374",
      "policy": "policy1",
      "path_weight": 30
    }
  ],
  "start": 1697009979,
  "end": 1697096379,
  "limit": 10,
  "total": 3
}

Count Service Path Events

GET /api/v1/sites/:site_id/services/events/count?distinct=type

Request

Name Type Description
distinct string type / mac / vpn_name / vpn_path / policy / port_id / model / site_id

Response

{
  "results": [
    {
      "type": "GW_SERVICE_PATH_ADD",
      "count": 14
    },
    {
      "type": "GW_SERVICE_PATH_REMOVE",
      "count": 1
    }
  ],
  "start": 1697010188,
  "end": 1697096588,
  "limit": 10,
  "distinct": "type",
  "total": 2
}

Auto Zones

Description

The auto zones service is a map parsing service that uses map image data to suggest spaces to designate as location zones.

POST Run Auto Zone service for map

POST /api/v1/sites/:site_id/maps/:map_id/auto_zones

Usage

This API starts the auto zones service for a specified map. This map must have an image to parse for the auto zones service. Repeated POST requests to this endpoint while the auto zones service is proccessing the map or awaiting review will be rejected.

Responses

GET Auto Zone service status for map

GET /api/v1/sites/:site_id/maps/:map_id/auto_zones

Usage

This API provides the current status of the auto zones service for a given map

Responses

{
    "status":"in_progress"
}
{
    "status": "awaiting_review",
    "zones": [
        {
            "name": "zone1",
            "vertices": [
                {
                    "x": 0,
                    "y": 0
                },
                {
                    "x": 0,
                    "y": 10
                },
                {
                    "x": 10,
                    "y": 10
                },
                {
                    "x": 10,
                    "y": 0
                }
            ]
        },
        {
            "name": "zone2",
            "vertices": [
                {
                    "x": 0,
                    "y": 0
                },
                {
                    "x": 0,
                    "y": 20
                },
                {
                    "x": 20,
                    "y": 20
                },
                {
                    "x": 20,
                    "y": 0
                }
            ]
        }
    ]
}
Name Type Description
status String The status for the auto zones service for a given map
zones list A list of suggested zones to review and accept for a given map
name String The name of the suggested zone
vertices list A list of of points comprising the zones map location in pixels

Status Descriptions

Status Description
not_started The auto zones service has not been run on this map or the results were cleared by the user
in_progress The auto zones service is currently in progress
awaiting_review The auto zones service has completed and suggested location zones to be added to the map
error There was an error with the auto zones service

DELETE Auto zones service for Map

DELETE /api/v1/sites/:site_id/maps/:map_id/auto_zones

Usage

This API is called to cancel auto zones for a given map and to delete the suggested zones returned by the service. If the service was not it will still delete any suggested zones and clear the auto zones service status.

Responses