Mist Sites Devices - Wired API
API Calls specific to the Juniper Switches managed by Mist
API Calls specific to the Juniper Switches managed by Mist
openapi: 3.1.0
info:
contact:
email: tmunzer@juniper.net
name: Thomas Munzer
description: '> Version: **2606.1.1**
>
> Date: **July 10, 2026**
<div class="notification"> NOTE:<br>Some important API changes will be introduced. Please make sure to read the <a href="https://www.juniper.net/documentation/us/en/software/mist/api/http/guides/important-api-changes">announcements</a> </div>
---
## Additional Documentation
* [Mist Automation Guide](https://www.juniper.net/documentation/us/en/software/mist/automation-integration/index.html)
* [Mist Location SDK](https://www.juniper.net/documentation/us/en/software/mist/location-services/topics/concept/mist-how-get-mist-sdk.html)
* [Mist Product Updates](https://www.juniper.net/documentation/us/en/software/mist/product-updates/)
## Helpful Resources
* [API Sandbox and Exercises](https://api-class.mist.com/)
* [Postman Collection, Runners and Webhook Samples](https://www.postman.com/juniper-mist/workspace/mist-systems-s-public-workspace)
* [Python Script Examples](https://github.com/tmunzer/mist_library)
* [API Demo Apps](https://apps.mist-lab.fr/)
* [Juniper Blog](https://blogs.juniper.net/)
## Mist Web Browser Extension:
* Google Chrome, Microsoft Edge and other Chromium-based browser: [Chrome Web Store](https://chromewebstore.google.com/detail/mist-extension/ejhpdcljeamillfhdihkkmoakanpbplh)
* Firefox: [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/mist-extension/)
---'
license:
name: MIT
url: https://raw.githubusercontent.com/tmunzer/Mist-OAS3.0/main/LICENSE
title: Mist Admins Sites Devices - Wired API
version: 2606.1.1
x-logo:
altText: Juniper-MistAI
backgroundColor: '#FFFFFF'
url: https://www.mist.com/wp-content/uploads/logo.png
servers:
- description: Mist Global 01
url: https://api.mist.com
- description: Mist Global 02
url: https://api.gc1.mist.com
- description: Mist Global 03
url: https://api.ac2.mist.com
- description: Mist Global 04
url: https://api.gc2.mist.com
- description: Mist Global 05
url: https://api.gc4.mist.com
- description: Mist EMEA 01
url: https://api.eu.mist.com
- description: Mist EMEA 02
url: https://api.gc3.mist.com
- description: Mist EMEA 03
url: https://api.ac6.mist.com
- description: Mist EMEA 04
url: https://api.gc6.mist.com
- description: Mist APAC 01
url: https://api.ac5.mist.com
- description: Mist APAC 02
url: https://api.gc5.mist.com
- description: Mist APAC 03
url: https://api.gc7.mist.com
security:
- apiToken: []
- csrfToken: []
tags:
- description: API Calls specific to the Juniper Switches managed by Mist
name: Sites Devices - Wired
paths:
/api/v1/sites/{site_id}/devices/{device_id}/local_port_config:
parameters:
- $ref: '#/components/parameters/site_id'
- $ref: '#/components/parameters/device_id'
delete:
description: "API Calls delete all the existing port config local overrides, and reapply the configured planed at the device level \n(with site / template heritance)."
operationId: deleteSiteLocalSwitchPortConfig
responses:
'200':
$ref: '#/components/responses/OK'
'400':
$ref: '#/components/responses/HTTP400'
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: deleteSiteLocalSwitchPortConfig
tags:
- Sites Devices - Wired
put:
description: "API Calls to add port config local overrides. This can be used by Switch Port Operators or Helpdesk administrators\nto change a Switch Port configuration without having to change the switch configuration.\n\n\nThe local overrides configured for the switchports with `no_local_overwrite`==`true` won't be applied to the switch configuration. \n\n\n> NOTE:\n>\n> When using the API Call, it is required to put send all overrides in the PUT request Payload, even the existing once. \n>\n> The current overrides can be retrieved with the API Call [Get Site Device](/#operations/getSiteDevice). The local overrides will show up separately from the `port_config` in the `local_port_config` so it can be easily identified (and cleared)"
operationId: updateSiteLocalSwitchPortConfig
requestBody:
content:
application/json:
examples:
Example:
value:
ge-0/0/0-1:
poe_disabled: true
usage: iot
schema:
$ref: '#/components/schemas/local_port_config'
responses:
'200':
$ref: '#/components/responses/OK'
'400':
$ref: '#/components/responses/HTTP400'
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: updateSiteLocalSwitchPortConfig
tags:
- Sites Devices - Wired
components:
schemas:
switch_port_local_usage_mac_auth_protocol:
default: eap-md5
description: 'Only if `enable_mac_auth` ==`true`. This type is ignored if mist_nac is enabled. enum: `eap-md5`, `eap-peap`, `pap`'
enum:
- eap-md5
- eap-peap
- pap
type: string
switch_port_local_usage_duplex:
default: auto
description: 'link connection mode. enum: `auto`, `full`, `half`'
enum:
- auto
- full
- half
type: string
junos_local_port_config:
additionalProperties: false
description: Per-port Switch Port Operator (SPO) override configuration used in `local_port_config` to customize settings inherited from `port_config`
properties:
all_networks:
default: false
description: Only if `mode`==`trunk` whether to trunk all network/vlans
type: boolean
allow_dhcpd:
description: 'Controls whether DHCP server traffic is allowed on ports using this configuration if DHCP snooping is enabled. This is a tri-state setting; `true`: ports become trusted ports allowing DHCP server traffic, `false`: ports become untrusted blocking DHCP server traffic, undefined: use system defaults (access ports default to untrusted, trunk ports default to trusted).'
type: boolean
allow_multiple_supplicants:
default: false
description: Whether multiple supplicants may authenticate on the port
type: boolean
bypass_auth_when_server_down:
default: false
description: Only if `port_auth`==`dot1x` bypass auth for known clients if set to true when RADIUS server is down
type: boolean
bypass_auth_when_server_down_for_unknown_client:
default: false
description: Only if `port_auth`=`dot1x` bypass auth for all (including unknown clients) if set to true when RADIUS server is down
type: boolean
description:
description: Human-readable description for this local port configuration
type: string
disable_autoneg:
default: false
description: Only if `mode`!=`dynamic` if speed and duplex are specified, whether to disable autonegotiation
type: boolean
disabled:
default: false
description: Whether the port is disabled
type: boolean
duplex:
$ref: '#/components/schemas/switch_port_local_usage_duplex'
description: Link duplex mode for this local port configuration
dynamic_vlan_networks:
$ref: '#/components/schemas/switch_port_local_usage_dynamic_vlan_networks'
description: Only if `port_auth`==`dot1x`, networks or VLANs that RADIUS can return for dynamic VLAN assignment
enable_mac_auth:
default: false
description: Only if `port_auth`==`dot1x` whether to enable MAC Auth
type: boolean
enable_qos:
default: false
description: Whether QoS is enabled on ports using this local configuration
type: boolean
guest_network:
description: Only if `port_auth`==`dot1x` which network to put the device into if the device cannot do dot1x. default is null (i.e. not allowed)
type:
- string
- 'null'
inter_switch_link:
default: false
description: Used together with "isolation" under networks for links between Juniper devices; must be applied to both connected ports
type: boolean
mac_auth_only:
description: Only if `enable_mac_auth`==`true`, whether to use MAC authentication without 802.1X
type: boolean
mac_auth_preferred:
description: Only if `enable_mac_auth`==`true` + `mac_auth_only`==`false`, dot1x will be given priority then mac_auth. Enable this to prefer mac_auth over dot1x.
type: boolean
mac_auth_protocol:
$ref: '#/components/schemas/switch_port_local_usage_mac_auth_protocol'
description: Only if `enable_mac_auth`==`true`, MAC authentication protocol to use
mac_limit:
default: 0
description: Max number of MAC addresses, default is 0 for unlimited, otherwise range is 1 or higher, with upper bound constrained by platform
minimum: 0
type: integer
mode:
$ref: '#/components/schemas/switch_port_local_usage_mode'
description: Switching mode for this local port configuration
mtu:
description: Media maximum transmission unit (MTU) is the largest data unit that can be forwarded without fragmentation. The default value is 1514.
type: integer
networks:
$ref: '#/components/schemas/switch_port_usage_networks'
description: Only if `mode`==`trunk`, network or VLAN names to trunk
note:
description: Additional note for the port config override
examples:
- force 100M for camera
type: string
persist_mac:
default: false
description: Only if `mode`==`access` and `port_auth`!=`dot1x` whether the port should retain dynamically learned MAC addresses
type: boolean
poe_disabled:
default: false
description: Whether PoE capabilities are disabled for a port
type: boolean
port_auth:
$ref: '#/components/schemas/switch_port_local_usage_dot1x'
description: 802.1X authentication mode for this local port configuration
port_network:
description: Native network/vlan for untagged traffic
type: string
reauth_interval:
$ref: '#/components/schemas/switch_port_usage_reauth_interval'
description: Only if `port_auth`==`dot1x`, RADIUS reauthentication interval for clients on the port
server_fail_network:
description: Only if `port_auth`==`dot1x` sets server fail fallback vlan
type:
- string
- 'null'
server_reject_network:
description: Only if `port_auth`==`dot1x` when RADIUS server reject / fails
type:
- string
- 'null'
speed:
$ref: '#/components/schemas/junos_port_config_speed'
description: Link speed for this local port configuration
storm_control:
$ref: '#/components/schemas/switch_port_local_usage_storm_control'
description: Storm-control settings for this local port configuration
stp_edge:
default: false
description: When enabled, the port is not expected to receive BPDU frames
type: boolean
stp_no_root_port:
default: false
description: Whether STP should prevent this port from becoming a root port
type: boolean
stp_p2p:
default: false
description: Whether STP treats this port as a point-to-point link
type: boolean
usage:
description: Port usage profile name for this local port configuration
type: string
use_vstp:
default: false
description: If this is connected to a vstp network
type: boolean
voip_network:
description: Network/vlan for voip traffic, must also set port_network. to authenticate device, set port_auth
type: string
required:
- usage
type: object
response_http429:
additionalProperties: false
description: Standard HTTP 429 rate limit error response
properties:
detail:
description: Human-readable explanation of the rate limit error
examples:
- Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
type: string
type: object
response_http401:
additionalProperties: false
description: Standard HTTP 401 authentication error response
properties:
detail:
description: Human-readable explanation of the authentication error
examples:
- Authentication credentials were not provided.
type: string
type: object
switch_port_local_usage_dot1x:
description: 'if dot1x is desired, set to dot1x. enum: `dot1x`'
enum:
- dot1x
type:
- string
- 'null'
response_http403:
additionalProperties: false
description: Standard HTTP 403 permission error response
properties:
detail:
description: Human-readable explanation of the permission error
examples:
- You do not have permission to perform this action.
type: string
type: object
switch_port_local_usage_dynamic_vlan_networks:
description: Only if `port_auth`==`dot1x`, if dynamic vlan is used, specify the possible networks/vlans RADIUS can return
examples:
- - corp
- user
items:
type: string
type: array
switch_port_usage_networks:
description: Only if `mode`==`trunk`, the list of network/vlans
items:
type: string
type: array
response_http400:
additionalProperties: false
description: Standard HTTP 400 bad request error response
properties:
detail:
description: Human-readable explanation of the bad request error
examples:
- 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
type: string
type: object
switch_port_local_usage_storm_control:
additionalProperties: false
description: Storm-control settings for this local port configuration
properties:
disable_port:
default: false
description: Whether to disable the port when storm control is triggered
type: boolean
no_broadcast:
default: false
description: Whether to disable storm control on broadcast traffic
type: boolean
no_multicast:
default: false
description: Whether to disable storm control on multicast traffic
type: boolean
no_registered_multicast:
default: false
description: Whether to disable storm control on registered multicast traffic
type: boolean
no_unknown_unicast:
default: false
description: Whether to disable storm control on unknown unicast traffic
type: boolean
percentage:
default: 80
description: Bandwidth-percentage, configures the storm control level as a percentage of the available bandwidth
maximum: 100
minimum: 0
type: integer
type: object
switch_port_local_usage_mode:
description: 'enum: `access`, `inet`, `trunk`'
enum:
- access
- inet
- trunk
type: string
junos_port_config_speed:
default: auto
description: 'enum: `100m`, `10m`, `1g`, `2.5g`, `5g`, `10g`, `25g`, `40g`, `100g`,`auto`'
enum:
- 10m
- 100m
- 1g
- 2.5g
- 5g
- 10g
- 25g
- 40g
- 100g
- auto
type: string
local_port_config:
additionalProperties:
$ref: '#/components/schemas/junos_local_port_config'
description: Per-port Switch Port Operator (SPO) override, overriding the port configuration from `port_config`. Property key is the port name or range (e.g. "ge-0/0/0-10")
type: object
switch_port_usage_reauth_interval:
anyOf:
- default: 3600
maximum: 65535
minimum: 10
type: integer
- type: string
description: 'Only if `mode`!=`dynamic` and `port_auth`=`dot1x` reauthentication interval range (min: 10, max: 65535, default: 3600). Set to 0 to disable reauthentication (no-reauthentication).'
response_http404:
additionalProperties: false
description: Standard HTTP 404 not found error response
properties:
id:
description: Missing resource identifier, when the API includes one
type: string
type: object
responses:
OK:
description: OK
HTTP400:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP400Example'
schema:
$ref: '#/components/schemas/response_http400'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP400Example'
schema:
$ref: '#/components/schemas/response_http400'
description: Bad Syntax
HTTP403:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP403Example'
schema:
$ref: '#/components/schemas/response_http403'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP403Example'
schema:
$ref: '#/components/schemas/response_http403'
description: Permission Denied
HTTP404:
content:
application/json:
schema:
$ref: '#/components/schemas/response_http404'
application/vnd.api+json:
schema:
$ref: '#/components/schemas/response_http404'
description: Not found. The API endpoint doesn’t exist or resource doesn’ t exist
HTTP429:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP429Example'
schema:
$ref: '#/components/schemas/response_http429'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP429Example'
schema:
$ref: '#/components/schemas/response_http429'
description: Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
HTTP401:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP401Example'
schema:
$ref: '#/components/schemas/response_http401'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP401Example'
schema:
$ref: '#/components/schemas/response_http401'
description: Unauthorized
examples:
HTTP403Example:
value:
detail: You do not have permission to perform this action.
HTTP400Example:
value:
detail: 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
HTTP429Example:
value:
detail: Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
HTTP401Example:
value:
detail: Authentication credentials were not provided.
parameters:
device_id:
in: path
name: device_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
site_id:
in: path
name: site_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
securitySchemes:
apiToken:
description: "Preferred authentication method for automation and integrations. Send the API token in the HTTP `Authorization` header.\n\n**Format**:\n `Authorization: Token {apitoken}`\n\n**Notes**:\n* An API token generated for a specific admin has the same privileges as that admin\n* An API token is automatically removed if it is not used for more than 90 days\n* SSO admins cannot generate admin API tokens. Use organization API tokens when scoped Org/Site privileges are needed."
in: header
name: Authorization
type: apiKey
csrfToken:
description: 'Session-based authentication for browser or login/password flows. After a successful [Login](/#operations/login) request, Mist returns a `csrftoken` cookie. Send that value in the `X-CSRFToken` header on later API requests that use the login session.
**Format**:
```
X-CSRFToken: vwvBuq9qkqaKh7lu8tNc0gkvBfEaLAmx
```
For automation, API Token authentication is preferred.'
in: header
name: X-CSRFToken
type: apiKey