openapi: 3.1.0
info:
contact:
email: tmunzer@juniper.net
name: Thomas Munzer
description: '> Version: **2604.1.1**
>
> Date: **May 13, 2026**
NOTE:
Some important API changes will be introduced. Please make sure to read the
announcements
---
## 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 EVPN Topologies API
version: 2604.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: []
- basicAuth: []
- basicAuth: []
csrfToken: []
tags:
- description: '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'
name: Sites EVPN Topologies
paths:
/api/v1/sites/{site_id}/evpn_topologies:
parameters:
- $ref: '#/components/parameters/site_id'
get:
description: Get the existing EVPN topology
operationId: listSiteEvpnTopologies
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/page'
responses:
'200':
$ref: '#/components/responses/EvpnTopologiesArray'
'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: listSiteEvpnTopologies
tags:
- Sites EVPN Topologies
post:
description: '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'
operationId: createSiteEvpnTopology
requestBody:
content:
application/json:
examples:
Example:
value:
name: CC
overwrite: true
pod_names:
'1': default
'2': default
switches:
- mac: 5c5b35000003
role: collapsed-core
- mac: 5c5b35000004
role: collapsed-core
schema:
$ref: '#/components/schemas/evpn_topology'
responses:
'200':
$ref: '#/components/responses/EvpnTopology'
'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: createSiteEvpnTopology
tags:
- Sites EVPN Topologies
/api/v1/sites/{site_id}/evpn_topologies/{evpn_topology_id}:
parameters:
- $ref: '#/components/parameters/site_id'
- $ref: '#/components/parameters/evpn_topology_id'
delete:
description: Delete the site EVPN Topology
operationId: deleteSiteEvpnTopology
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: deleteSiteEvpnTopology
tags:
- Sites EVPN Topologies
get:
description: Get One EVPN Topology Detail
operationId: getSiteEvpnTopology
responses:
'200':
$ref: '#/components/responses/EvpnTopology'
'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: getSiteEvpnTopology
tags:
- Sites EVPN Topologies
put:
description: Update the EVPN Topology
operationId: updateSiteEvpnTopology
requestBody:
content:
application/json:
examples:
Example:
value:
overwrite: false
switches:
- mac: 5c5b35000003
role: collapsed-core
- mac: 5c5b35000004
role: none
schema:
$ref: '#/components/schemas/evpn_topology'
responses:
'200':
$ref: '#/components/responses/EvpnTopology'
'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: updateSiteEvpnTopology
tags:
- Sites EVPN Topologies
components:
schemas:
evpn_options_overlay:
additionalProperties: false
properties:
as:
default: 65000
description: Overlay BGP Local AS Number
examples:
- 65000
maximum: 65535
minimum: 1
type: integer
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).'
strings:
items:
type: string
type: array
uniqueItems: true
junos_port_config_duplex:
default: auto
description: 'enum: `auto`, `full`, `half`'
enum:
- auto
- full
- half
type: string
evpn_topology_switch_config_other_ip_configs:
additionalProperties:
$ref: '#/components/schemas/junos_other_ip_config'
description: Additional IP Addresses configured on the switch. Property key is the port network name
type: object
switch_port_usage_mtu:
anyOf:
- maximum: 9216
minimum: 256
type: integer
- type: string
- type: 'null'
description: Only if `mode`!=`dynamic` media maximum transmission unit (MTU) is the largest data unit that can be forwarded without fragmentation. The default value is 1514.
evpn_topology_switch_uplinks:
examples:
- - 5c5b35000005
- 5c5b35000006
items:
type: string
type: array
evpn_options_vs_instances:
additionalProperties:
$ref: '#/components/schemas/evpn_options_vs_instance'
description: Optional, for EX9200 only to segregate virtual-switches
examples:
- guest:
networks:
- guest
iot:
networks:
- iot-wifi
- iot-lan
type: object
evpn_topologies_response:
items:
$ref: '#/components/schemas/evpn_topology_response'
type: array
switch_port_usage_networks:
description: Only if `mode`==`trunk`, the list of network/vlans
items:
type: string
type: array
evpn_topology_switch_esilaglinks:
examples:
- - 5c5b35000005
- 5c5b35000006
items:
type: string
type: array
evpn_topology_switches:
items:
$ref: '#/components/schemas/evpn_topology_switch'
type: array
uniqueItems: true
switch_port_usage_mac_auth_protocol:
default: eap-md5
description: 'Only if `mode`!=`dynamic` and `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
evpn_topology_switch_downlink_ips:
items:
readOnly: true
type: string
readOnly: true
type: array
evpn_topology_switch_pods:
description: "By default, core switches are assumed to be connecting all pods. \nif you want to limit the pods, you can specify pods."
items:
type: integer
type: array
response_http401:
additionalProperties: false
properties:
detail:
examples:
- Authentication credentials were not provided.
type: string
type: object
evpn_topology_switch_suggested_uplinks:
examples:
- - 5c5b35000005
- 5c5b35000006
items:
readOnly: true
type: string
readOnly: true
type: array
evpn_topology_switch_downlinks:
examples:
- - 5c5b35000005
- 5c5b35000006
items:
type: string
type: array
switch_port_usage_dynamic_rule_equals_any:
description: Use `equals_any` to match any item in a list
items:
type: string
type: array
evpn_topology_switch_suggested_esilaglinks:
examples:
- - 5c5b35000005
- 5c5b35000006
items:
readOnly: true
type: string
readOnly: true
type: array
junos_port_config:
additionalProperties: false
description: Switch port config
properties:
ae_disable_lacp:
description: To disable LACP support for the AE interface
type: boolean
ae_idx:
description: Users could force to use the designated AE name
type: integer
ae_lacp_force_up:
default: false
description: 'If `aggregated`==`true`, sets the state of the interface as UP when the peer has limited LACP capability. Use case: When a device connected to this AE port is ZTPing for the first time, it will not have LACP configured on the other end. **Note:** Turning this on will enable force-up on one of the interfaces in the bundle only'
type: boolean
ae_lacp_slow:
description: To use slow timeout
type: boolean
aggregated:
default: false
type: boolean
critical:
default: false
description: To generate port up/down alarm
type: boolean
description:
type: string
disable_autoneg:
default: false
description: If `speed` and `duplex` are specified, whether to disable autonegotiation
type: boolean
duplex:
$ref: '#/components/schemas/junos_port_config_duplex'
dynamic_usage:
description: Enable dynamic usage for this port. Set to `dynamic` to enable.
type:
- string
- 'null'
esilag:
type: boolean
mtu:
default: 1514
description: Media maximum transmission unit (MTU) is the largest data unit that can be forwarded without fragmentation
type: integer
networks:
description: List of network names. Required if `usage`==`inet`
items:
type: string
type: array
no_local_overwrite:
default: true
description: Prevent helpdesk to override the port config
type: boolean
poe_disabled:
default: false
type: boolean
port_network:
description: Required if `usage`==`vlan_tunnel`. Q-in-Q tunneling using All-in-one bundling. This also enables standard L2PT for interfaces that are not encapsulation tunnel interfaces and uses MAC rewrite operation. [View more information](https://www.juniper.net/documentation/us/en/software/junos/multicast-l2/topics/topic-map/q-in-q.html#id-understanding-qinq-tunneling-and-vlan-translation)
type: string
speed:
$ref: '#/components/schemas/junos_port_config_speed'
usage:
description: Port usage name. For Q-in-Q, use `vlan_tunnel`. If EVPN is used, use `evpn_uplink`or `evpn_downlink`
type: string
required:
- usage
type: object
vlan_id_with_variable:
oneOf:
- type: string
- maximum: 4094
minimum: 1
type: integer
evpn_options:
additionalProperties: false
description: EVPN Options
properties:
auto_loopback_subnet:
default: 172.16.192.0/24
description: Optional, for dhcp_relay, unique loopback IPs are required for ERB or IPClos where we can set option-82 server_id-overrides
type: string
auto_loopback_subnet6:
default: fd33:ab00:2::/64
description: Optional, for dhcp_relay, unique loopback IPs are required for ERB or IPClos where we can set option-82 server_id-overrides
type: string
auto_router_id_subnet:
default: 172.16.254.0/23
description: Optional, this generates router_id automatically, if specified, `router_id_prefix` is ignored
type: string
auto_router_id_subnet6:
description: Optional, this generates router_id automatically, if specified, `router_id_prefix` is ignored
examples:
- fd31:5700:1::/64
type: string
core_as_border:
default: false
description: Optional, for ERB or CLOS, you can either use esilag to upstream routers or to also be the virtual-gateway. When `routed_at` != `core`, whether to do virtual-gateway at core as well
type: boolean
enable_inband_mgmt:
default: false
description: Whether to route management traffic inband; routes will be propagated to downstream switches
type: boolean
enable_inband_ztp:
default: false
description: 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
type: boolean
overlay:
$ref: '#/components/schemas/evpn_options_overlay'
per_vlan_vga_v4_mac:
default: false
description: Only for by Core-Distribution architecture when `evpn_options.routed_at`==`core`. By default, JUNOS uses 00-00-5e-00-01-01 as the virtual-gateway-address's v4_mac. If enabled, 00-00-5e-00-0X-YY will be used (where XX=vlan_id/256, YY=vlan_id%256)
type: boolean
per_vlan_vga_v6_mac:
default: false
description: Only for by Core-Distribution architecture when `evpn_options.routed_at`==`core`. By default, JUNOS uses 00-00-5e-00-02-01 as the virtual-gateway-address's v6_mac. If enabled, 00-00-5e-00-1X-YY will be used (where XX=vlan_id/256, YY=vlan_id%256)
type: boolean
routed_at:
$ref: '#/components/schemas/evpn_options_routed_at'
underlay:
$ref: '#/components/schemas/evpn_options_underlay'
vs_instances:
$ref: '#/components/schemas/evpn_options_vs_instances'
type: object
switch_port_usage_dynamic_rules:
description: Only if `mode`==`dynamic`
items:
$ref: '#/components/schemas/switch_port_usage_dynamic_rule'
type: array
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
switch_port_usage_mac_limit:
anyOf:
- default: 0
maximum: 16383
minimum: 0
type: integer
- type: string
description: Only if `mode`!=`dynamic`, max number of mac addresses, default is 0 for unlimited, otherwise range is 1 to 16383 (upper bound constrained by platform)
switch_port_usage_speed:
default: auto
description: 'Only if `mode`!=`dynamic`, Port speed, default is auto to automatically negotiate speed 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
evpn_topology:
properties:
created_time:
$ref: '#/components/schemas/created_time'
evpn_options:
$ref: '#/components/schemas/evpn_options'
id:
$ref: '#/components/schemas/id'
modified_time:
$ref: '#/components/schemas/modified_time'
name:
examples:
- CC
type: string
org_id:
$ref: '#/components/schemas/org_id'
overwrite:
type: boolean
pod_names:
additionalProperties:
type: string
description: Property key is the pod number
type: object
site_id:
$ref: '#/components/schemas/site_id'
switch_configs:
$ref: '#/components/schemas/evpn_topology_switch_configs'
switches:
$ref: '#/components/schemas/evpn_topology_switches'
required:
- switches
type: object
switch_port_usage_dynamic_rule:
additionalProperties: false
properties:
description:
description: Optional description of the rule
type: string
equals:
type: string
equals_any:
$ref: '#/components/schemas/switch_port_usage_dynamic_rule_equals_any'
expression:
description: '"[0:3]":"abcdef" -> "abc"
"split(.)[1]": "a.b.c" -> "b"
"split(-)[1][0:3]: "a1234-b5678-c90" -> "b56"'
type: string
src:
$ref: '#/components/schemas/switch_port_usage_dynamic_rule_src'
usage:
description: '`port_usage` name'
type: string
required:
- src
type: object
created_time:
description: When the object has been created, in epoch
format: double
readOnly: true
type: number
switch_port_usage:
additionalProperties: false
description: Junos port usages
properties:
all_networks:
default: false
description: Only if `mode`==`trunk`. Whether to trunk all network/vlans
type: boolean
allow_dhcpd:
description: 'Only applies when `mode`!=`dynamic`. 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: Only if `mode`!=`dynamic`
type: boolean
bypass_auth_when_server_down:
default: false
description: Only if `mode`!=`dynamic` and `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 `mode`!=`dynamic` and `port_auth`=`dot1x`. Bypass auth for all (including unknown clients) if set to true when RADIUS server is down
type: boolean
bypass_auth_when_server_down_for_voip:
default: false
description: Only if `mode`!=`dynamic` and `port_auth`==`dot1x`. Bypass auth for VOIP if set to true when RADIUS server is down
type: boolean
community_vlan_id:
description: Only if `mode`!=`dynamic`. To be used together with `isolation` under networks. Signaling that this port connects to the networks isolated but wired clients belong to the same community can talk to each other
type: integer
description:
description: Only if `mode`!=`dynamic`
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: Only if `mode`!=`dynamic`. Whether the port is disabled
type: boolean
duplex:
$ref: '#/components/schemas/switch_port_usage_duplex'
dynamic_vlan_networks:
$ref: '#/components/schemas/switch_port_usage_dynamic_vlan_networks'
enable_mac_auth:
default: false
description: Only if `mode`!=`dynamic` and `port_auth`==`dot1x`. Whether to enable MAC Auth
type: boolean
enable_qos:
default: false
description: Only if `mode`!=`dynamic`
type: boolean
guest_network:
description: Only if `mode`!=`dynamic` and `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_isolation_network_link:
default: false
description: Only if `mode`!=`dynamic`. `inter_isolation_network_link` is used together with `isolation` under networks, signaling that this port connects to isolated networks
type: boolean
inter_switch_link:
default: false
description: 'Only if `mode`!=`dynamic`. `inter_switch_link` is used together with `isolation` under networks. NOTE: `inter_switch_link` works only between Juniper devices. This has to be applied to both ports connected together'
type: boolean
mac_auth_only:
description: Only if `mode`!=`dynamic` and `enable_mac_auth`==`true`
type: boolean
mac_auth_preferred:
description: Only if `mode`!=`dynamic` + `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_usage_mac_auth_protocol'
mac_limit:
$ref: '#/components/schemas/switch_port_usage_mac_limit'
mode:
$ref: '#/components/schemas/switch_port_usage_mode'
mtu:
$ref: '#/components/schemas/switch_port_usage_mtu'
networks:
$ref: '#/components/schemas/switch_port_usage_networks'
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: Only if `mode`!=`dynamic`. Whether PoE capabilities are disabled for a port
type: boolean
poe_keep_state_when_reboot:
default: false
description: Only if `mode`!=`dynamic`. Whether Perpetual PoE is enabled; keeps PoE state across reboots
type: boolean
poe_priority:
$ref: '#/components/schemas/poe_priority'
port_auth:
$ref: '#/components/schemas/switch_port_usage_dot1x'
port_network:
description: Only if `mode`!=`dynamic`. Native network/vlan for untagged traffic
type: string
reauth_interval:
$ref: '#/components/schemas/switch_port_usage_reauth_interval'
reset_default_when:
$ref: '#/components/schemas/switch_port_usage_dynamic_reset_default_when'
rules:
$ref: '#/components/schemas/switch_port_usage_dynamic_rules'
server_fail_network:
description: Only if `mode`!=`dynamic` and `port_auth`==`dot1x`. Sets server fail fallback vlan
type:
- string
- 'null'
server_reject_network:
description: Only if `mode`!=`dynamic` and `port_auth`==`dot1x`. When radius server reject / fails
type:
- string
- 'null'
speed:
$ref: '#/components/schemas/switch_port_usage_speed'
storm_control:
$ref: '#/components/schemas/switch_port_usage_storm_control'
stp_disable:
default: false
description: Only if `mode`!=`dynamic` and `stp_required`==`false`. Drop bridge protocol data units (BPDUs ) that enter any interface or a specified interface
type: boolean
stp_edge:
default: false
description: Only if `mode`!=`dynamic`. When enabled, the port is not expected to receive BPDU frames
type: boolean
stp_no_root_port:
default: false
description: Only if `mode`!=`dynamic`
type: boolean
stp_p2p:
default: false
description: Only if `mode`!=`dynamic`
type: boolean
stp_required:
default: false
description: Only if `mode`!=`dynamic`. Whether to remain in block state if no BPDU is received
type: boolean
ui_evpntopo_id:
description: Optional for Campus Fabric Core-Distribution ESI-LAG profile. Helper used by the UI to select this port profile as the ESI-Lag between Distribution and Access switches
format: uuid
type: string
use_vstp:
default: false
description: If this is connected to a vstp network
type: boolean
voip_network:
description: Only if `mode`!=`dynamic`. Network/vlan for voip traffic, must also set port_network. to authenticate device, set port_auth
type:
- string
- 'null'
type: object
evpn_topology_response:
additionalProperties: false
properties:
created_time:
$ref: '#/components/schemas/created_time'
evpn_options:
$ref: '#/components/schemas/evpn_options'
for_site:
type: boolean
id:
$ref: '#/components/schemas/id'
modified_time:
$ref: '#/components/schemas/modified_time'
name:
examples:
- CC
type: string
org_id:
$ref: '#/components/schemas/org_id'
overwrite:
type: boolean
pod_names:
additionalProperties:
type: string
description: Property key is the pod number
type: object
site_id:
$ref: '#/components/schemas/site_id'
type: object
evpn_topology_switch:
additionalProperties: false
properties:
config:
$ref: '#/components/schemas/evpn_topology_switch_config'
deviceprofile_id:
examples:
- 6a1deab1-96df-4fa2-8455-d5253f943d06
format: uuid
readOnly: true
type: string
downlink_ips:
$ref: '#/components/schemas/evpn_topology_switch_downlink_ips'
downlinks:
$ref: '#/components/schemas/evpn_topology_switch_downlinks'
esilaglinks:
$ref: '#/components/schemas/evpn_topology_switch_esilaglinks'
evpn_id:
minimum: 1
readOnly: true
type: integer
mac:
examples:
- 5c5b35000003
minLength: 1
type: string
model:
examples:
- QFX10002-36Q
readOnly: true
type: string
pod:
default: 1
description: "Optionally, for distribution / access / esilag-access, they can be placed into different pods. e.g. \n * for CLOS, to group dist / access switches into pods\n * for ERB/CRB, to group dist / esilag-access into pods"
maximum: 255
minimum: 1
type: integer
pods:
$ref: '#/components/schemas/evpn_topology_switch_pods'
role:
$ref: '#/components/schemas/evpn_topology_switch_role'
router_id:
examples:
- 172.16.254.4
readOnly: true
type: string
site_id:
$ref: '#/components/schemas/site_id'
suggested_downlinks:
$ref: '#/components/schemas/evpn_topology_switch_suggested_downlinks'
suggested_esilaglinks:
$ref: '#/components/schemas/evpn_topology_switch_suggested_esilaglinks'
suggested_uplinks:
$ref: '#/components/schemas/evpn_topology_switch_suggested_uplinks'
uplinks:
$ref: '#/components/schemas/evpn_topology_switch_uplinks'
required:
- mac
- role
type: object
switch_port_usage_dynamic_rule_src:
description: 'enum: `link_peermac`, `lldp_chassis_id`, `lldp_hardware_revision`, `lldp_manufacturer_name`, `lldp_oui`, `lldp_serial_number`, `lldp_system_description`, `lldp_system_name`, `radius_dynamicfilter`, `radius_usermac`, `radius_username`'
enum:
- link_peermac
- lldp_chassis_id
- lldp_hardware_revision
- lldp_manufacturer_name
- lldp_oui
- lldp_serial_number
- lldp_system_description
- lldp_system_name
- radius_dynamicfilter
- radius_usermac
- radius_username
type: string
switch_port_usage_dynamic_vlan_networks:
description: Only if `mode`!=`dynamic` and `port_auth`==`dot1x`, if dynamic vlan is used, specify the possible networks/vlans RADIUS can return
examples:
- - corp
- user
items:
type: string
type: array
wired_port_config:
additionalProperties:
$ref: '#/components/schemas/junos_port_config'
description: Property key is the port name or range (e.g. "ge-0/0/0-10")
type: object
evpn_topology_switch_config_vrf_config:
additionalProperties: false
properties:
enabled:
description: Whether to enable VRF (when supported on the device)
type: boolean
type: object
switch_port_usages:
additionalProperties:
$ref: '#/components/schemas/switch_port_usage'
description: Property key is the port usage name. Defines the profiles of port configuration configured on the switch
type: object
response_http429:
additionalProperties: false
properties:
detail:
examples:
- Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
type: string
type: object
junos_other_ip_config:
additionalProperties: false
description: Optional, if it's required to have switch's L3 presence on a network/vlan
properties:
evpn_anycast:
default: false
description: For EVPN, if anycast is desired
type: boolean
ip:
description: Required if `type`==`static`
examples:
- 10.3.3.1
type: string
ip6:
description: Required if `type6`==`static`
examples:
- fdad:b0bc:f29e::3d16
type: string
netmask:
description: Optional, `subnet` from `network` definition will be used if defined
examples:
- 255.255.255.0
type: string
netmask6:
description: Optional, `subnet` from `network` definition will be used if defined
examples:
- /64
type: string
type:
$ref: '#/components/schemas/ip_type'
type6:
$ref: '#/components/schemas/ip_type6'
type: object
org_id:
examples:
- a97c1b22-a4e9-411e-9bfd-d8695a0f9e61
format: uuid
readOnly: true
type: string
ip_type6:
default: disabled
description: 'enum: `autoconf`, `dhcp`, `disabled`, `static`'
enum:
- autoconf
- dhcp
- disabled
- static
examples:
- static
type: string
evpn_topology_switch_configs:
additionalProperties:
$ref: '#/components/schemas/evpn_topology_switch_config'
description: Property key is the switch mac
type: object
evpn_topology_switch_config:
additionalProperties: false
properties:
dhcpd_config:
$ref: '#/components/schemas/evpn_topology_switch_config_dhcpd_config'
networks:
$ref: '#/components/schemas/switch_networks'
other_ip_configs:
$ref: '#/components/schemas/evpn_topology_switch_config_other_ip_configs'
port_config:
$ref: '#/components/schemas/wired_port_config'
port_usages:
$ref: '#/components/schemas/switch_port_usages'
router_id:
description: Used for OSPF / BGP / EVPN
examples:
- 10.2.1.10
type: string
vrf_config:
$ref: '#/components/schemas/evpn_topology_switch_config_vrf_config'
type: object
id:
description: Unique ID of the object instance in the Mist Organization
examples:
- 53f10664-3ce8-4c27-b382-0ef66432349f
format: uuid
readOnly: true
type: string
switch_port_usage_dynamic_reset_default_when:
default: link_down
description: 'Only if `mode`==`dynamic` Control when the DPC port should be changed to the default port usage. enum: `link_down`, `none` (let the DPC port keep at the current port usage)'
enum:
- link_down
- none
examples:
- link_down
type: string
response_http403:
additionalProperties: false
properties:
detail:
examples:
- You do not have permission to perform this action.
type: string
type: object
evpn_options_routed_at:
default: edge
description: 'optional, where virtual-gateway should reside. enum: `core`, `distribution`, `edge`'
enum:
- core
- distribution
- edge
type: string
switch_port_usage_mode:
description: '`mode`==`dynamic` must only be used if the port usage name is `dynamic`. enum: `access`, `dynamic`, `inet`, `trunk`'
enum:
- access
- dynamic
- inet
- trunk
type: string
ip_type:
default: dhcp
description: 'enum: `dhcp`, `static`'
enum:
- dhcp
- static
examples:
- static
type: string
evpn_options_underlay:
additionalProperties: false
properties:
as_base:
default: 65001
description: Underlay BGP Base AS Number
examples:
- 65001
maximum: 65535
minimum: 1
type: integer
routed_id_prefix:
examples:
- /24
type: string
subnet:
description: Underlay subnet, by default, `10.255.240.0/20`, or `fd31:5700::/64` for ipv6
examples:
- 10.255.240.0/20
type: string
use_ipv6:
default: false
description: If v6 is desired for underlay
type: boolean
type: object
switch_port_usage_duplex:
default: auto
description: 'Only if `mode`!=`dynamic`. Link connection mode. enum: `auto`, `full`, `half`'
enum:
- auto
- full
- half
type: string
site_id:
examples:
- 441a1214-6928-442a-8e92-e1d34b8ec6a6
format: uuid
readOnly: true
type: string
evpn_topology_switch_suggested_downlinks:
examples:
- - 5c5b35000005
- 5c5b35000006
items:
readOnly: true
type: string
readOnly: true
type: array
response_http404:
additionalProperties: false
properties:
id:
type: string
type: object
switch_networks:
additionalProperties:
$ref: '#/components/schemas/switch_network'
description: Property key is network name
type: object
evpn_topology_switch_role:
description: 'use `role`==`none` to remove a switch from the topology. enum: `access`, `collapsed-core`, `core`, `distribution`, `esilag-access`, `none`'
enum:
- access
- collapsed-core
- core
- distribution
- esilag-access
- none
minLength: 1
type: string
switch_network:
additionalProperties: false
description: 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`.
properties:
gateway:
description: Only required for EVPN-VXLAN networks, IPv4 Virtual Gateway
type: string
gateway6:
description: Only required for EVPN-VXLAN networks, IPv6 Virtual Gateway
type: string
isolation:
default: false
description: '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. See also `inter_isolation_network_link` and `community_vlan_id` in port_usage'
type: boolean
isolation_vlan_id:
examples:
- '3070'
type: string
subnet:
description: Optional for pure switching, required when L3 / routing features are used
type: string
subnet6:
description: Optional for pure switching, required when L3 / routing features are used
type: string
vlan_id:
$ref: '#/components/schemas/vlan_id_with_variable'
required:
- vlan_id
type: object
response_http400:
additionalProperties: false
properties:
detail:
examples:
- 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
type: string
type: object
switch_port_usage_storm_control:
additionalProperties: false
description: Switch storm control. Only if `mode`!=`dynamic`
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
poe_priority:
description: 'PoE priority. enum: `low`, `high`'
enum:
- low
- high
type: string
switch_port_usage_dot1x:
description: 'Only if `mode`!=`dynamic`. If dot1x is desired, set to dot1x. enum: `dot1x`'
enum:
- dot1x
type:
- string
- 'null'
evpn_options_vs_instance:
additionalProperties: false
properties:
networks:
$ref: '#/components/schemas/strings'
type: object
evpn_topology_switch_config_dhcpd_config:
additionalProperties: false
properties:
enabled:
description: If DHCPD is enabled on the switch
type: boolean
type: object
modified_time:
description: When the object has been modified for the last time, in epoch
format: double
readOnly: true
type: number
examples:
HTTP403Example:
value:
detail: You do not have permission to perform this action.
EvpnTopologyExample:
value:
id: 9197ec96-4c8d-529f-c595-035895e688b2
name: CC
overwrite: true
pod_names:
'1': default
'2': default
switches:
- deviceprofile_id: 6a1deab1-96df-4fa2-8455-d5253f943d06
downlink_ips:
- 10.255.240.6
- 10.255.240.8
downlinks:
- 5c5b35000007
- 5c5b35000008
esilaglinks:
- 5c5b3500000f
evpn_id: 1
mac: 5c5b35000003
model: QFX10002-36Q
role: collapsed-core
site_id: 1916d52a-4a90-11e5-8b45-1258369c38a9
uplinks:
- 5c5b35000005
- 5c5b35000006
HTTP429Example:
value:
detail: Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
EvpnTopologiesArrayExample:
value:
- created_time: 1736421230
evpn_options:
auto_loopback_subnet: 172.16.192.0/24
auto_loopback_subnet6: fd33:ab00:2::/64
auto_router_id_subnet: 172.16.254.0/23
core_as_border: true
overlay:
as: 65000
per_vlan_vga_v4_mac: false
routed_at: core
underlay:
as_base: 65001
subnet: 10.255.240.0/20
use_ipv6: false
for_site: false
id: 764fb173-94f9-447c-8454-def62e5a999f
modified_time: 1736421230
name: tert
org_id: 3a2627d7-bfbc-45af-b85d-8841581c6d63
pod_names:
'1': Pod 1
site_id: 00000000-0000-0000-0000-000000000000
HTTP400Example:
value:
detail: 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
HTTP401Example:
value:
detail: Authentication credentials were not provided.
responses:
EvpnTopology:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/EvpnTopologyExample'
schema:
$ref: '#/components/schemas/evpn_topology'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/EvpnTopologyExample'
schema:
$ref: '#/components/schemas/evpn_topology'
description: Example response
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
OK:
description: OK
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
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
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
EvpnTopologiesArray:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/EvpnTopologiesArrayExample'
schema:
$ref: '#/components/schemas/evpn_topologies_response'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/EvpnTopologiesArrayExample'
schema:
$ref: '#/components/schemas/evpn_topologies_response'
description: OK
parameters:
page:
in: query
name: page
schema:
default: 1
minimum: 1
type: integer
site_id:
in: path
name: site_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
evpn_topology_id:
in: path
name: evpn_topology_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
limit:
in: query
name: limit
schema:
default: 100
minimum: 0
type: integer
securitySchemes:
apiToken:
description: "Like many other API providers, it’s also possible to generate API Tokens to be used (in HTTP Header) for authentication. An API token ties to a Admin with equal or less privileges.\n\n**Format**:\n API Token value format is `Token {apitoken}`\n\n**Notes**:\n* an API token generated for a specific admin has the same privilege as the user\n* an API token will be automatically removed if not used for > 90 days\n* SSO admins cannot generate these API tokens. Refer Org level API tokens which can have privileges of a specific Org/Site for more information."
in: header
name: Authorization
type: apiKey
basicAuth:
description: While our current UI uses Session / Cookie-based authentication, it’s also possible to do Basic Auth.
scheme: basic
type: http
csrfToken:
description: "This protects the website against [Cross Site Request Forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery), all the POST / PUT / DELETE APIs needs to have CSRF token in the AJAX Request header when using Login/Password authentication (with or without MFA)\n\n\nThe CSRF Token is sent back by Mist in the Cookies from the Login Response API Call:\n`cookies[csrftoken]` \n\nThe CSRF Token must be added in the HTTP Request Headers:\n```\nX-CSRFToken: vwvBuq9qkqaKh7lu8tNc0gkvBfEaLAmx\n```"
in: header
name: X-CSRFToken
type: apiKey