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 Orgs 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: Orgs EVPN Topologies paths: /api/v1/orgs/{org_id}/evpn_topologies: parameters: - $ref: '#/components/parameters/org_id' get: description: Get List of the existing Org EVPN topologies operationId: listOrgEvpnTopologies parameters: - description: Filter for org/site level EVPN Toplogies in: query name: for_site schema: $ref: '#/components/schemas/mxedge_for_site' - $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: listOrgEvpnTopologies tags: - Orgs 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 4. The API uses a few pre-defined parameters and best-practices to generate the configs. It can be customized by using `evpn_options` in Site Setting / Network Template. (e.g. a different subnet for the underlay) #### 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. #### ESI-Lag If the access switches does not have EVPN support, you can take advantage of EVPN by setting up ESI-Lag on distribution switches #### 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 versus another' operationId: createOrgEvpnTopology requestBody: content: application/json: examples: Example: value: name: CC 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: createOrgEvpnTopology tags: - Orgs EVPN Topologies /api/v1/orgs/{org_id}/evpn_topologies/{evpn_topology_id}: parameters: - $ref: '#/components/parameters/org_id' - $ref: '#/components/parameters/evpn_topology_id' delete: description: Delete the Org EVPN Topology operationId: deleteOrgEvpnTopology 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: deleteOrgEvpnTopology tags: - Orgs EVPN Topologies get: description: Get One EVPN Topology Detail operationId: getOrgEvpnTopology 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: getOrgEvpnTopology tags: - Orgs EVPN Topologies put: description: Update the EVPN Topology operationId: updateOrgEvpnTopology 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: updateOrgEvpnTopology tags: - Orgs 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 mxedge_for_site: default: any description: 'enum: `any`, `false`, `true`' enum: - any - 'false' - 'true' type: string 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 parameters: org_id: in: path name: org_id required: true schema: examples: - 000000ab-00ab-00ab-00ab-0000000000ab format: uuid type: string page: in: query name: page schema: default: 1 minimum: 1 type: integer 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 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 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