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 MSPs Licenses 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: 'Licenses are a type of service or access that customers can purchase for various features or services offered by a company.
Subscriptions can have different statuses, such as active, expired, exceeded, or trial, depending on their validity and usage. The status of a subscription determines whether it is currently active and valid, has expired, has exceeded the allowed usage limit, or is in a trial period.
Licenses can be activated using an activation code, and the activation process confirms the inputted code and activates the subscription.
Licenses can be managed at the MSP level for organization attached to an MSP account, or directly at the [Organization level]($h/Orgs%20Licenses/_overview)'
name: MSPs Licenses
paths:
/api/v1/msps/{msp_id}/claim:
parameters:
- $ref: '#/components/parameters/msp_id'
post:
description: Claim an Order by Activation Code
operationId: claimMspLicense
requestBody:
content:
application/json:
examples:
Example:
value:
code: ZHT3K-H36DT-MG85D-M61AC
schema:
$ref: '#/components/schemas/code_string'
responses:
'200':
$ref: '#/components/responses/ClaimLicense'
'400':
description: Response when the key is invalid (or already used)
'401':
$ref: '#/components/responses/HTTP401'
'403':
$ref: '#/components/responses/HTTP403'
'404':
$ref: '#/components/responses/HTTP404'
'429':
$ref: '#/components/responses/HTTP429'
summary: claimMspLicense
tags:
- MSPs Licenses
/api/v1/msps/{msp_id}/licenses:
parameters:
- $ref: '#/components/parameters/msp_id'
get:
description: Get List of Msp Licenses
operationId: listMspLicenses
responses:
'200':
$ref: '#/components/responses/License'
'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: listMspLicenses
tags:
- MSPs Licenses
put:
description: Move or Delete MSP Licenses
operationId: moveOrDeleteMspLicenseToAnotherOrg
requestBody:
content:
application/json:
examples:
delete-license:
value:
op: delete
subscription_id: SUB-0000144
move-license:
value:
dst_org_id: 3eff35f7-c218-894e-bca2-24e5325601cc
op: amend
quantity: 10
subscription_id: SUB-0000144
undo-the_license_move:
value:
amendment_id: 2b9116ab-cd1e-e897-6e08-31fccd88e792
op: unamend
schema:
$ref: '#/components/schemas/msp_license_action'
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: moveOrDeleteMspLicenseToAnotherOrg
tags:
- MSPs Licenses
/api/v1/msps/{msp_id}/stats/licenses:
parameters:
- $ref: '#/components/parameters/msp_id'
get:
description: Get List of MSP Licenses
operationId: listMspOrgLicenses
responses:
'200':
$ref: '#/components/responses/License'
'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: listMspOrgLicenses
tags:
- MSPs Licenses
components:
schemas:
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_claim_license_inventory_pending:
description: for async claim
items:
$ref: '#/components/schemas/response_claim_license_inventory_pending_item'
type: array
uniqueItems: true
licenses:
items:
$ref: '#/components/schemas/license_sub'
type: array
license_amendment:
additionalProperties: false
properties:
created_time:
$ref: '#/components/schemas/created_time'
end_time:
readOnly: true
type: integer
id:
$ref: '#/components/schemas/id'
modified_time:
$ref: '#/components/schemas/modified_time'
quantity:
readOnly: true
type: integer
start_time:
readOnly: true
type: integer
subscription_id:
readOnly: true
type: string
type:
$ref: '#/components/schemas/license_type'
readOnly: true
type: object
response_http403:
additionalProperties: false
properties:
detail:
examples:
- You do not have permission to perform this action.
type: string
type: object
response_claim_license_inventory_duplicated:
items:
$ref: '#/components/schemas/response_claim_license_inventory_item'
type: array
uniqueItems: true
license:
additionalProperties: false
description: License
properties:
amendments:
$ref: '#/components/schemas/license_amendments'
entitled:
additionalProperties:
type: integer
description: Property key is license type (e.g. SUB-MAN) and Property value is the number of licenses entitled.
readOnly: true
type: object
fully_loaded:
$ref: '#/components/schemas/license_fully_loaded'
licenses:
$ref: '#/components/schemas/licenses'
summary:
$ref: '#/components/schemas/license_summary'
usages:
$ref: '#/components/schemas/license_usages'
type: object
msp_license_action:
properties:
amendment_id:
description: Required if `op`==`unamend`
type: string
dst_org_id:
description: Required if `op`==`amend`, destination org id
format: uuid
type: string
notes:
description: Required if `op`==`annotate`
type: string
op:
$ref: '#/components/schemas/msp_license_action_operation'
quantity:
description: Required if `op`==`amend`
type: number
subscription_id:
description: Required if `op`==`annotate`
minLength: 1
type: string
required:
- op
type: object
response_claim_license_license_added:
items:
$ref: '#/components/schemas/response_claim_license_license_item'
type: array
uniqueItems: true
response_claim_license:
additionalProperties: false
properties:
inventory_added:
$ref: '#/components/schemas/response_claim_license_inventory_added'
inventory_duplicated:
$ref: '#/components/schemas/response_claim_license_inventory_duplicated'
inventory_pending:
$ref: '#/components/schemas/response_claim_license_inventory_pending'
license_added:
$ref: '#/components/schemas/response_claim_license_license_added'
license_duplicated:
$ref: '#/components/schemas/response_claim_license_license_duplicated'
license_error:
$ref: '#/components/schemas/response_claim_license_license_error'
required:
- license_added
- license_duplicated
- license_error
- inventory_added
- inventory_duplicated
type: object
response_claim_license_inventory_pending_item:
additionalProperties: false
properties:
mac:
type: string
type: object
license_type:
description: Type of license. The list of supported license type can be retrieve with the [List License Type](/#operations/listLicenseTypes) API request.
readOnly: true
type: string
response_http404:
additionalProperties: false
properties:
id:
type: string
type: object
license_fully_loaded:
additionalProperties:
readOnly: true
type: integer
description: Maximum number of licenses that may be required if the service is enabled on all the Organization Devices. Property key is the service name (e.g. "SUB-MAN").
readOnly: true
type: object
response_claim_license_license_error:
items:
$ref: '#/components/schemas/response_claim_license_license_error_item'
type: array
uniqueItems: true
response_http400:
additionalProperties: false
properties:
detail:
examples:
- 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
type: string
type: object
code_string:
properties:
code:
type: string
required:
- code
type: object
response_claim_license_inventory_item:
properties:
mac:
type: string
magic:
type: string
model:
type: string
serial:
type: string
type:
type: string
required:
- serial
- model
- type
- magic
- mac
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
msp_license_action_operation:
description: 'enum: `amend`, `annotate`, `delete`, `unamend`'
enum:
- amend
- annotate
- delete
- unamend
minLength: 1
type: string
license_summary:
additionalProperties:
type: integer
description: Number of licenses currently consumed. Property key is license type (e.g. SUB-MAN).
readOnly: true
type: object
response_claim_license_license_duplicated:
items:
$ref: '#/components/schemas/response_claim_license_license_item'
type: array
uniqueItems: true
response_claim_license_license_item:
properties:
end:
type: integer
quantity:
type: integer
start:
type: integer
type:
type: string
required:
- type
- start
- end
- quantity
license_amendments:
items:
$ref: '#/components/schemas/license_amendment'
readOnly: true
type: array
uniqueItems: true
license_sub:
additionalProperties: false
properties:
created_time:
$ref: '#/components/schemas/created_time'
end_time:
description: End date of the license term
readOnly: true
type: integer
id:
$ref: '#/components/schemas/id'
modified_time:
$ref: '#/components/schemas/modified_time'
order_id:
readOnly: true
type: string
org_id:
$ref: '#/components/schemas/org_id'
quantity:
description: Number of devices entitled for this license
readOnly: true
type: integer
remaining_quantity:
description: Number of licenses left in this subscription
type: integer
start_time:
description: Start date of the license term
readOnly: true
type: integer
subscription_id:
readOnly: true
type: string
type:
$ref: '#/components/schemas/license_type'
readOnly: true
type: object
response_claim_license_license_error_item:
properties:
order:
type: string
reason:
type: string
required:
- order
- reason
license_usages:
additionalProperties:
readOnly: true
type: integer
description: Number of available licenes. Property key is the service name (e.g. "SUB-MAN"). name (e.g. "SUB-MAN")
readOnly: true
type: object
response_claim_license_inventory_added:
items:
$ref: '#/components/schemas/response_claim_license_inventory_item'
type: array
uniqueItems: true
response_http401:
additionalProperties: false
properties:
detail:
examples:
- Authentication credentials were not provided.
type: string
type: object
org_id:
examples:
- a97c1b22-a4e9-411e-9bfd-d8695a0f9e61
format: uuid
readOnly: true
type: string
modified_time:
description: When the object has been modified for the last time, in epoch
format: double
readOnly: true
type: number
created_time:
description: When the object has been created, in epoch
format: double
readOnly: true
type: number
examples:
ClaimLicenseLicensesSuccessfullyClaimedAndApplied:
value:
inventory_added:
- mac: 5c5b35000018
magic: 6JG8EPTFV2A9Z2N
model: AP41
serial: FXLH2015150025
type: ap
inventory_duplicated:
- mac: 5c5b35000012
magic: DVH4VSNMSZPDXBR
model: AP41
serial: FXLH2015150027
type: ap
inventory_pending:
- mac: 5c5b35000012
license_added:
- end: 1520380800
quantity: 180
start: 1504828800
type: SUB-MAN
- end: 1520380800
quantity: 120
start: 1504828800
type: SUB-LOC
license_duplicated:
- end: 1520380800
quantity: 180
start: 1504828800
type: SUB-MAN
license_error:
- order: '00000464'
reason: ''
LicenseExample:
value:
amendments:
- created_time: 1644684842
end_time: 1744156799
id: ff0a14f6-1234-5678-90ab-c8e64d4bc6c6
modified_time: 1644684842
quantity: -1
start_time: 1632873600
subscription_id: VNA-000000af
type: SUB-VNA
- created_time: 1644684842
end_time: 1744156799
id: c1c28812-1234-5678-90ab-dc95680da61e
modified_time: 1644684842
quantity: -1
start_time: 1632873600
subscription_id: MAN-000008be
type: SUB-MAN
- created_time: 1644684842
end_time: 1744243199
id: 96c0a41f-1234-5678-90ab-afe74817e9fd
modified_time: 1644684842
quantity: -1
start_time: 1586476800
subscription_id: EX24-000000bc
type: SUB-EX24
entitled:
SUB-ENG: 26
SUB-EX24: 9
SUB-MAN: 26
SUB-VNA: 26
licenses:
- created_time: 1555353534
end_time: 1586822399
id: 693a41a6-1234-5678-90ab-f53dbd3a31c0
modified_time: 1555353534
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 2
remaining_quantity: 0
start_time: 1555286400
subscription_id: VNA-000000aa
type: SUB-VNA
- created_time: 1576132516
end_time: 1586822399
id: 656607cf-1234-5678-90ab-fc9035614ea5
modified_time: 1576132516
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 8
remaining_quantity: 0
start_time: 1576022400
subscription_id: VNA-000000ab
type: SUB-VNA
- created_time: 1579204568
end_time: 1730764800
id: db50d0bc-1234-5678-90ab-e439958cb06b
modified_time: 1579204568
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 2
remaining_quantity: 2
start_time: 1572998400
subscription_id: MAN-000000ac
type: SUB-MAN
- created_time: 1579204568
end_time: 1730764800
id: 2ff9e84a-1234-5678-90ab-fb9ec0726e01
modified_time: 1579204568
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 2
remaining_quantity: 2
start_time: 1572998400
subscription_id: ENG-000000ad
type: SUB-ENG
- created_time: 1579204568
end_time: 1730764800
id: 16df7ea6-1234-5678-90ab-78018cd4024d
modified_time: 1579204568
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 2
remaining_quantity: 2
start_time: 1572998400
subscription_id: VNA-000000ae
type: SUB-VNA
- created_time: 1586237081
end_time: 1744243199
id: 1b6f68d5-1234-5678-90ab-70d3e6d18c73
modified_time: 1586237081
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 14
remaining_quantity: 14
start_time: 1586563200
subscription_id: VNA-000000af
type: SUB-VNA
- created_time: 1586237097
end_time: 1744243199
id: 1375c9bf-1234-5678-90ab-9c636708c89e
modified_time: 1586237097
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 14
remaining_quantity: 14
start_time: 1586563200
subscription_id: MAN-000000ba
type: SUB-MAN
- created_time: 1586237137
end_time: 1744243199
id: 5974e979-1234-5678-90ab-438f833ec1c9
modified_time: 1586237137
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 14
remaining_quantity: 14
start_time: 1586563200
subscription_id: ENG-000000bb
type: SUB-ENG
- created_time: 1629947267
end_time: 1744243199
id: 340a9cb3-1234-5678-90ab-b009344dbf3c
modified_time: 1629947267
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 10
remaining_quantity: 9
start_time: 1586476800
subscription_id: EX24-000000bc
type: SUB-EX24
- created_time: 1632941870
end_time: 1744156799
id: 9b599b0f-1234-5678-90ab-406081b58e7f
modified_time: 1632941870
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 10
remaining_quantity: 10
start_time: 1632873600
subscription_id: ENG-000000bd
type: SUB-ENG
- created_time: 1632941882
end_time: 1744156799
id: d6d8ead3-1234-5678-90ab-98badeac7287
modified_time: 1632941882
order_id: '00000000'
org_id: 9777c1a0-1234-5678-90ab-02e208b2d34f
quantity: 11
remaining_quantity: 9
start_time: 1632873600
subscription_id: MAN-000008be
type: SUB-MAN
summary:
SUB-ENG: 18
SUB-EX24: 3
SUB-MAN: 22
SUB-VNA: 20
HTTP400Example:
value:
detail: 'JSON parse error - Expecting value: line 5 column 8 (char 56)'
HTTP403Example:
value:
detail: You do not have permission to perform this action.
HTTP429Example:
value:
detail: Too Many Request. The API Token used for the request reached the 5000 API Calls per hour threshold
HTTP401Example:
value:
detail: Authentication credentials were not provided.
responses:
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
License:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/LicenseExample'
schema:
$ref: '#/components/schemas/license'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/LicenseExample'
schema:
$ref: '#/components/schemas/license'
description: OK
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
ClaimLicense:
content:
application/json:
examples:
Licenses Successfully Claimed And Applied:
$ref: '#/components/examples/ClaimLicenseLicensesSuccessfullyClaimedAndApplied'
schema:
$ref: '#/components/schemas/response_claim_license'
application/vnd.api+json:
examples:
Licenses Successfully Claimed And Applied:
$ref: '#/components/examples/ClaimLicenseLicensesSuccessfullyClaimedAndApplied'
schema:
$ref: '#/components/schemas/response_claim_license'
description: OK
HTTP400:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP400Example'
schema:
$ref: '#/components/schemas/response_http400'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP400Example'
schema:
$ref: '#/components/schemas/response_http400'
description: Bad Syntax
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
parameters:
msp_id:
in: path
name: msp_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
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