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 Synthetic Tests 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: 'Synthetic Tests (Marvis Minis) are a feature of Juniper Networks'' Mist platform, designed to proactively identify and resolve network issues before they impact users by simulating user connections and validating network configurations.
Here are the key points about Marvis Minis:
* Proactive Testing: Marvis Minis perform user connection tests to validate connectivity and application reachability issues on your network. These tests run automatically every hour and can also be initiated manually by an admin user.
* Scope and Stress Management: By default, Marvis Minis run on a few APs based on the scope it automatically learns, and it can expand the scope to other APs and switches if necessary, without causing additional stress on network services.
* Integration with Mist AI: Data from Marvis Minis is continuously fed back into the Mist AI engine, providing additional insights for AIOps responses. This data is also integrated into Marvis Actions for proactive resolution and validation.
* Subscription and Accessibility: Marvis Minis are available at no extra charge with a Marvis VNA subscription and do not require additional hardware or software.'
name: Sites Synthetic Tests
paths:
/api/v1/sites/{site_id}/devices/{device_id}/check_radius_server:
parameters:
- $ref: '#/components/parameters/site_id'
- $ref: '#/components/parameters/device_id'
post:
description: "Ping test from the AP to confirm 'reachability' of the RADIUS server. \n\nUtilize Juniper EX switch(to which an AP is connected to) radius test capabilities to get details on the RADIUS Server 'availability'.\n\n\n\n#### Subscribe to Device Command outputs\n\n`WS /api-ws/v1/stream`\n\n\n```json\n{\n \"subscribe\": \"/sites/{site_id}/devices/{device_id}/cmd\"\n}\n```\n\n#### Example output from ws stream\n\n```json\n{\n \"event\": \"data\",\n \"channel\": \"/sites/d6fb4f96-3ba4-4cf5-8af2-a8d7b85087ac/devices/00000000-0000-0000-1000-2093390b3580/cmd\",\n \"data\": \"{\\\"event\\\": \\\"data\\\", \\\"channel\\\": \\\"/sites/d6fb4f96-3ba4-4cf5-8af2-a8d7b85087ac/devices/2093390b3580/cmd\\\", \\\"data\\\": {\\\"session\\\": \\\"6043daff-884e-48bc-aa9a-810d268aceb1\\\", \\\"raw\\\": \\\" Reason : fail\\\"}}\"\n}\n{\n \"event\": \"data\",\n \"channel\": \"/sites/d6fb4f96-3ba4-4cf5-8af2-a8d7b85087ac/devices/00000000-0000-0000-1000-2093390b3580/cmd\",\n \"data\": \"{\\\"event\\\": \\\"data\\\", \\\"channel\\\": \\\"/sites/d6fb4f96-3ba4-4cf5-8af2-a8d7b85087ac/devices/2093390b3580/cmd\\\", \\\"data\\\": {\\\"session\\\": \\\"6043daff-884e-48bc-aa9a-810d268aceb1\\\", \\\"raw\\\": \\\" Test complete. Exiting\\\"}}\"\n}\n```"
operationId: startSiteSwitchRadiusSyntheticTest
requestBody:
content:
application/json:
examples:
Example:
value:
password: string
profile: dot1x
user: string
schema:
$ref: '#/components/schemas/synthetictest_radius_server'
responses:
'200':
$ref: '#/components/responses/WebsocketSession'
'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: triggerSiteSwitchRadiusSyntheticTest
tags:
- Sites Synthetic Tests
/api/v1/sites/{site_id}/devices/{device_id}/synthetic_test:
parameters:
- $ref: '#/components/parameters/site_id'
- $ref: '#/components/parameters/device_id'
get:
description: Get Device Synthetic Test
operationId: getSiteDeviceSyntheticTest
responses:
'200':
$ref: '#/components/responses/SynthetictestStatus'
'400':
description: Device not online / Device not supported / Already in progress
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: getSiteDeviceSyntheticTest
tags:
- Sites Synthetic Tests
post:
description: Trigger Device Synthetic Test
operationId: triggerSiteDeviceSyntheticTest
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/synthetictest_device'
responses:
'200':
description: Scheduled
'400':
description: Device not online / Device not supported / Already in progress
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: triggerSiteDeviceSyntheticTest
tags:
- Sites Synthetic Tests
/api/v1/sites/{site_id}/synthetic_test:
parameters:
- $ref: '#/components/parameters/site_id'
post:
description: Trigger Synthetic Testing
operationId: triggerSiteSyntheticTest
requestBody:
content:
application/json:
examples:
Example:
value:
email: test@mist.com
schema:
$ref: '#/components/schemas/synthetictest'
responses:
'200':
$ref: '#/components/responses/SyntheticTest'
'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: triggerSiteSyntheticTest
tags:
- Sites Synthetic Tests
/api/v1/sites/{site_id}/synthetic_test/search:
parameters:
- $ref: '#/components/parameters/site_id'
get:
description: Search Site Synthetic Testing
operationId: searchSiteSyntheticTest
parameters:
- description: Filter results by MAC address
in: query
name: mac
schema:
examples:
- 5c5b350e0410
type: string
- description: Filter results by port identifier
in: query
name: port_id
schema:
examples:
- ge-1/0/1
type: string
- description: Filter results by VLAN ID
in: query
name: vlan_id
schema:
examples:
- '100'
type: string
- description: Entity who triggers the test
in: query
name: by
schema:
examples:
- user
type: string
- description: Filter results by reason
in: query
name: reason
schema:
examples:
- test failed
type: string
- description: 'Synthetic test type used to filter results. enum: `arp`, `curl`, `dhcp`, `dhcp6`, `dns`, `lan_connectivity`, `radius`, `speedtest`'
in: query
name: type
schema:
$ref: '#/components/schemas/synthetictest_type'
- description: 'Connectivity protocol used to filter synthetic test results. enum: `ping`, `traceroute`'
in: query
name: protocol
schema:
$ref: '#/components/schemas/synthetictest_protocol'
- description: Filter results by tenant network
in: query
name: tenant
schema:
type: string
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/end'
- $ref: '#/components/parameters/duration'
- $ref: '#/components/parameters/search_after'
responses:
'200':
$ref: '#/components/responses/SynthetictestSearch'
'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: searchSiteSyntheticTest
tags:
- Sites Synthetic Tests
components:
schemas:
synthetictest_radius_server:
description: Request body for testing RADIUS server availability from a switch
properties:
password:
description: Specify the password associated with the username
format: password
type: string
profile:
default: dot1x
description: Specify the access profile associated with the subscriber
type: string
user:
description: Specify the subscriber username to test
type: string
required:
- user
- password
type: object
synthetictest_device_protocol:
default: ping+traceroute
description: 'If `type`==`lan_connectivity`. Protocol or protocol combination used by the LAN connectivity test. enum: `ping`, `traceroute`, `ping+traceroute`'
enum:
- ping
- ping+traceroute
- traceroute
type: string
synthetictest_device_vlan_id:
description: Required for AP. VLAN ID used by the synthetic test when the target device is an AP
oneOf:
- type: string
- maximum: 4094
minimum: 1
type: integer
synthetictest_info:
additionalProperties: false
description: Synthetic test status or result record
properties:
by:
description: Actor that triggered the synthetic test
examples:
- user
type: string
device_type:
$ref: '#/components/schemas/device_type'
description: Device category that ran the synthetic test
failed:
description: Whether the synthetic test failed
examples:
- false
type: boolean
latency:
description: Measured latency for the synthetic test, in milliseconds
examples:
- 40
type: integer
mac:
description: Device MAC address that ran the synthetic test
type: string
port_id:
description: Interface identifier used to run the synthetic test
examples:
- ge-0/0/2
type: string
reason:
description: Failure reason reported for the synthetic test, when available
examples:
- interface not ready to perform test
type: string
rx_mbps:
description: Receive throughput measured by the synthetic speed test, in Mbps
examples:
- 322
type: integer
start_time:
description: Epoch timestamp, in seconds, when the synthetic test started
examples:
- 1675718807
type: integer
status:
description: Current execution status of the synthetic test
type: string
timestamp:
$ref: '#/components/schemas/timestamp'
description: Time when the synthetic test result was recorded
tx_mbps:
description: Transmit throughput measured by the synthetic speed test, in Mbps
examples:
- 199
type: integer
type:
$ref: '#/components/schemas/synthetictest_type'
description: Synthetic test type for this result
vlan_id:
description: Identifier of the VLAN used by the synthetic test
examples:
- 20
type: integer
type: object
websocket_session:
additionalProperties: false
description: Response containing the WebSocket session handle for asynchronous command output
properties:
session:
description: Identifier used to correlate output on the WebSocket stream
examples:
- 19e73828-937f-05e6-f709-e29efdb0a82b
type: string
required:
- session
type: object
synthetictest_protocol:
description: 'Protocol used by a synthetic test probe. enum: `ping`, `traceroute`'
enum:
- ping
- traceroute
type: string
timestamp:
description: Epoch timestamp, in seconds
format: double
readOnly: true
type: number
id:
description: Unique ID of the object instance in the Mist Organization
examples:
- 53f10664-3ce8-4c27-b382-0ef66432349f
format: uuid
readOnly: true
type: string
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
response_synthetictest_search:
additionalProperties: false
description: Paginated response for site synthetic test search results
properties:
end:
description: Epoch timestamp, in seconds, for the end of the synthetic test search window
type: integer
limit:
description: Maximum number of synthetic test results returned in this page
type: integer
next:
description: URL for retrieving the next page of synthetic test results
type: string
results:
$ref: '#/components/schemas/response_synthetictest_search_results'
description: Synthetic test result records matching the search filters
start:
description: Epoch timestamp, in seconds, for the start of the synthetic test search window
type: integer
total:
description: Number of synthetic test results matching the search filters across all pages
type: integer
required:
- end
- limit
- results
- start
- total
type: object
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
synthetictest_type:
description: 'enum: `arp`, `curl`, `dhcp`, `dhcp6`, `dns`, `lan_connectivity`, `radius`, `speedtest`'
enum:
- arp
- curl
- dhcp
- dhcp6
- dns
- lan_connectivity
- radius
- speedtest
type: string
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
response_synthetictest:
additionalProperties: false
description: Result returned after a site synthetic test is queued
properties:
id:
$ref: '#/components/schemas/id'
description: Unique value for the queued synthetic test request
message:
description: Human-readable queuing result returned by the API
examples:
- Successfully queued synthetic test for the site.
type: string
status:
description: Queue status for the synthetic test request
examples:
- success
type: string
type: object
synthetictest:
description: Request body for triggering a site synthetic test
properties:
email:
description: Contact email address supplied when triggering the site synthetic test
examples:
- test@mist.com
format: email
type: string
type: object
device_type:
description: 'enum: `ap`, `gateway`, `switch`'
enum:
- ap
- gateway
- switch
type: string
synthetictest_device:
description: Request body for triggering a synthetic test on a device
properties:
host:
description: If `type`==`lan_connectivity`. Hostname or IP address to probe for LAN connectivity testing
examples:
- www.example.com
type: string
hostname:
description: If `type`==`dns`. Hostname to resolve during the DNS synthetic test
examples:
- google.com"
type: string
ip:
description: If `type`==`arp`. IP address to resolve through ARP during the synthetic test
examples:
- 192.168.3.5
type: string
password:
description: If `type`==`radius`. Password used for RADIUS authentication testing
examples:
- test123
format: password
type: string
ping_count:
default: 10
description: If `type`==`lan_connectivity`. Number of ping probes to send during the LAN connectivity test
maximum: 60
minimum: 10
type: integer
ping_details:
default: false
description: If `type`==`lan_connectivity`. Whether to include per-ping results in the LAN connectivity test output
type: boolean
ping_size:
default: 56
description: If `type`==`lan_connectivity`. Payload size, in bytes, for each ping probe
maximum: 65535
minimum: 56
type: integer
port_id:
description: If `type`==`speedtest`, required for ssr
examples:
- wan0
type: string
protocol:
$ref: '#/components/schemas/synthetictest_device_protocol'
description: If `type`==`lan_connectivity`. Protocol or protocol combination used for the connectivity test
tenant:
description: If `type`==`curl` or `type`==`lan_connectivity`
examples:
- lan_network1
type: string
timeout:
default: 60
description: If `type`==`curl`. Timeout, in seconds, for the HTTP request
examples:
- 60
maximum: 120
minimum: 30
type: integer
traceroute_udp_port:
default: 33434
description: SRX only, traceroute udp port
maximum: 65535
minimum: 0
type: integer
type:
$ref: '#/components/schemas/synthetictest_type'
description: Synthetic test type to run against the target
url:
description: If `type`==`curl`. URL requested during the HTTP synthetic test
examples:
- https://www.example.com
type: string
username:
description: If `type`==`radius`. Username used for RADIUS authentication testing
examples:
- user
type: string
vlan_id:
$ref: '#/components/schemas/synthetictest_device_vlan_id'
description: Required for AP. VLAN ID used by the synthetic test when the target device is an AP
required:
- type
type: object
response_synthetictest_search_results:
description: Synthetic test result records returned by search
items:
$ref: '#/components/schemas/synthetictest_info'
type: array
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
parameters:
start:
description: Lower bound of the time range, as an epoch timestamp in seconds or a relative value such as `-1d` or `-1w`
in: query
name: start
schema:
type: string
duration:
description: Time range duration for the query, using relative units such as `10m`, `7d`, or `2w`
in: query
name: duration
schema:
default: 1d
examples:
- 10m
type: string
limit:
description: Maximum number of results to return per page
in: query
name: limit
schema:
default: 100
minimum: 0
type: integer
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
end:
description: Upper bound of the time range, as an epoch timestamp in seconds or a relative value such as `-1d`, `-2h`, or `now`
in: query
name: end
schema:
type: string
search_after:
description: Pagination cursor for retrieving subsequent pages of results. This value is automatically populated by Mist in the `next` URL from the previous response and should not be manually constructed.
in: query
name: search_after
schema:
type: string
responses:
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
SyntheticTest:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/SyntheticTestExample'
schema:
$ref: '#/components/schemas/response_synthetictest'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/SyntheticTestExample'
schema:
$ref: '#/components/schemas/response_synthetictest'
description: Synthetic Test Started
SynthetictestStatus:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/SynthetictestStatusExample'
schema:
$ref: '#/components/schemas/synthetictest_info'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/SynthetictestStatusExample'
schema:
$ref: '#/components/schemas/synthetictest_info'
description: Synthetic Test Status
SynthetictestSearch:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/SynthetictestSearchExample'
schema:
$ref: '#/components/schemas/response_synthetictest_search'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/SynthetictestSearchExample'
schema:
$ref: '#/components/schemas/response_synthetictest_search'
description: Synthetic Test Search Result
WebsocketSession:
content:
application/json:
schema:
$ref: '#/components/schemas/websocket_session'
application/vnd.api+json:
schema:
$ref: '#/components/schemas/websocket_session'
description: OK
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
SynthetictestSearchExample:
value:
end: 0
limit: 0
next: string
results:
- by: user
device_type: gateway
failed: false
latency: 40
mac: aff827549235
port_id: ge-0/0/2
rx_mbps: 322
timestamp: 1706824045.059036
tx_mbps: 199
type: speedtest
vlan_id: 20
- by: marvis
device_type: gateway
failed: true
latency: 0
mac: 8396cd006c8c
port_id: ge-0/0/2
reason: interface not ready to perform test
rx_mbps: 0
timestamp: 1706824045.059036
tx_mbps: 0
type: speedtest
vlan_id: 100
start: 0
total: 0
SyntheticTestExample:
value:
id: a42775f6-edc8-69b5-f979-542fa1b43ff9
message: Successfully queued synthetic test for the site.
status: string
SynthetictestStatusExample:
value:
device_type: gateway
mac: 5c5b35584a6f
port_id: ge-0/0/1.100
start_time: 1675718807
status: inprogress
type: speedtest
HTTP401Example:
value:
detail: Authentication credentials were not provided.
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