Mist MSPs Orgs API
An organization usually represents a customer - which has inventories, licenses. An Organization can contain multiple sites. A site usually represents a deployment at the same location (a campus, an office).
An organization usually represents a customer - which has inventories, licenses. An Organization can contain multiple sites. A site usually represents a deployment at the same location (a campus, an office).
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 MSPs Orgs 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: 'An organization usually represents a customer - which has inventories, licenses.
An Organization can contain multiple sites. A site usually represents a deployment at the same location (a campus, an office).'
name: MSPs Orgs
paths:
/api/v1/msps/{msp_id}/orgs:
parameters:
- $ref: '#/components/parameters/msp_id'
get:
description: List organizations managed by this MSP account, including MSP ownership and organization-group membership metadata.
operationId: listMspOrgs
responses:
'200':
$ref: '#/components/responses/OrgsArray'
'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: listMspOrgs
tags:
- MSPs Orgs
post:
description: Create an organization under this MSP, optionally assigning it to organization groups and setting organization-level defaults.
operationId: createMspOrg
requestBody:
content:
application/json:
examples:
Example:
value:
alarmtemplate_id: b069b358-4c97-5319-1f8c-7c5ca64d6ab1
allow_mist: true
name: string
orggroup_ids:
- b069b358-4c97-5319-1f8c-7c5ca64d6ab1
session_expiry: 10
schema:
$ref: '#/components/schemas/org'
description: Request Body
responses:
'200':
$ref: '#/components/responses/Org'
'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: createMspOrg
tags:
- MSPs Orgs
put:
description: Assign existing organizations to this MSP account or unassign organizations from it by providing the desired operation and org IDs.
operationId: manageMspOrgs
requestBody:
content:
application/json:
examples:
Example:
value:
op: assign
org_ids:
- 2b069b358-4c97-5319-1f8c-7c5ca64d6ab1
schema:
$ref: '#/components/schemas/msp_org_change'
description: Request Body
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: manageMspOrgs
tags:
- MSPs Orgs
/api/v1/msps/{msp_id}/orgs/search:
parameters:
- $ref: '#/components/parameters/msp_id'
get:
description: Search organizations under this MSP using organization identifiers, names, subscription state, trial state, usage types, and time-based filters.
operationId: searchMspOrgs
parameters:
- $ref: '#/components/parameters/name'
- description: Filter results by organization identifier
in: query
name: org_id
schema:
examples:
- b069b358-4c97-5319-1f8c-7c5ca64d6ab1
format: uuid
type: string
- description: If this org has sufficient subscription
in: query
name: sub_insufficient
schema:
examples:
- false
type: boolean
- description: If this org is under trial period
in: query
name: trial_enabled
schema:
examples:
- false
type: boolean
- description: List of types that enabled by usage
in: query
name: usage_types
schema:
$ref: '#/components/schemas/strings'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/start'
- $ref: '#/components/parameters/end'
- $ref: '#/components/parameters/search_after'
responses:
'200':
$ref: '#/components/responses/OrgsSearch'
'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: searchMspOrgs
tags:
- MSPs Orgs
/api/v1/msps/{msp_id}/orgs/{org_id}:
parameters:
- $ref: '#/components/parameters/msp_id'
- $ref: '#/components/parameters/org_id'
delete:
description: Delete an organization managed by this MSP. Use the MSP organization assignment endpoint when only assigning or unassigning organizations from the MSP account.
operationId: deleteMspOrg
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: deleteMspOrg
tags:
- MSPs Orgs
get:
description: Return details for one organization managed by this MSP, including MSP ownership, organization groups, support access, and session settings.
operationId: getMspOrg
responses:
'200':
$ref: '#/components/responses/Org'
'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: getMspOrg
tags:
- MSPs Orgs
put:
description: Update organization settings for an organization managed by this MSP.
operationId: updateMspOrg
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/org'
responses:
'200':
$ref: '#/components/responses/Org'
'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: updateMspOrg
tags:
- MSPs Orgs
/api/v1/msps/{msp_id}/stats/orgs:
parameters:
- $ref: '#/components/parameters/msp_id'
get:
description: List organization statistics for organizations managed by this MSP, including device, inventory, site, and SLE summary fields.
operationId: listMspOrgStats
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/page'
responses:
'200':
$ref: '#/components/responses/OrgsArrayStats'
'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: listMspOrgStats
tags:
- MSPs Orgs
components:
responses:
OrgsSearch:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/OrgsSearchExample'
schema:
$ref: '#/components/schemas/response_org_search'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/OrgsSearchExample'
schema:
$ref: '#/components/schemas/response_org_search'
description: OK
OK:
description: OK
OrgsArray:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/OrgsArrayExample'
schema:
$ref: '#/components/schemas/org_list'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/OrgsArrayExample'
schema:
$ref: '#/components/schemas/org_list'
description: OK
HTTP400:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP400Example'
schema:
$ref: '#/components/schemas/response_http400'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP400Example'
schema:
$ref: '#/components/schemas/response_http400'
description: Bad Syntax
HTTP403:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/HTTP403Example'
schema:
$ref: '#/components/schemas/response_http403'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/HTTP403Example'
schema:
$ref: '#/components/schemas/response_http403'
description: Permission Denied
OrgsArrayStats:
content:
application/json:
schema:
$ref: '#/components/schemas/stats_orgs'
application/vnd.api+json:
schema:
$ref: '#/components/schemas/stats_orgs'
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
Org:
content:
application/json:
examples:
Example:
$ref: '#/components/examples/OrgExample'
schema:
$ref: '#/components/schemas/org'
application/vnd.api+json:
examples:
Example:
$ref: '#/components/examples/OrgExample'
schema:
$ref: '#/components/schemas/org'
description: Org Infos
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
parameters:
org_id:
in: path
name: org_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
msp_id:
in: path
name: msp_id
required: true
schema:
examples:
- 000000ab-00ab-00ab-00ab-0000000000ab
format: uuid
type: string
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
sort:
description: On which field the list should be sorted, -prefix represents DESC order
in: query
name: sort
schema:
default: timestamp
examples:
- -site_id
type: string
name:
description: Filter results by name
in: query
name: name
schema:
type: string
limit:
description: Maximum number of results to return per page
in: query
name: limit
schema:
default: 100
minimum: 0
type: integer
page:
description: Select the page number to return when using page-based pagination; starts at `1`
in: query
name: page
schema:
default: 1
minimum: 1
type: integer
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
schemas:
stats_org_orggroup_ids:
description: Organization group identifiers associated with an organization stats record
items:
format: uuid
type: string
type: array
timestamp:
description: Epoch timestamp, in seconds
format: double
readOnly: true
type: number
response_org_search_results:
description: Organization records returned by MSP organization search
items:
$ref: '#/components/schemas/response_org_search_item'
type: array
uniqueItems: true
id:
description: Unique ID of the object instance in the Mist Organization
examples:
- 53f10664-3ce8-4c27-b382-0ef66432349f
format: uuid
readOnly: true
type: string
strings:
description: Unique string values returned or accepted by this schema
items:
type: string
type: array
uniqueItems: true
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
org_id:
description: Unique identifier of a Mist organization
examples:
- a97c1b22-a4e9-411e-9bfd-d8695a0f9e61
format: uuid
readOnly: true
type: string
response_org_search_item_usage_types:
description: Subscription usage type codes enabled for an organization
items:
type: string
readOnly: true
type: array
created_time:
description: When the object has been created, in epoch
format: double
readOnly: true
type: number
response_org_search_item:
additionalProperties: false
description: Organization record returned by MSP organization search
properties:
msp_id:
$ref: '#/components/schemas/msp_id'
description: MSP that owns or manages this organization
name:
description: Display name of the organization
readOnly: true
type: string
num_aps:
description: Number of APs in the organization
readOnly: true
type: integer
num_gateways:
description: Number of gateways in the organization
readOnly: true
type: integer
num_sites:
description: Number of sites in the organization
readOnly: true
type: integer
num_switches:
description: Number of switches in the organization
readOnly: true
type: integer
num_unassigned_aps:
description: Number of APs in organization inventory that are not assigned to a site
readOnly: true
type: integer
org_id:
$ref: '#/components/schemas/org_id'
description: Organization identifier for this search result
sub_ana_entitled:
description: Number of SUB-ANA subscriptions entitled for the organization
readOnly: true
type: integer
sub_ana_required:
description: Number of SUB-ANA subscriptions required by the organization
readOnly: true
type: integer
sub_ast_entitled:
description: Number of SUB-AST subscriptions entitled for the organization
readOnly: true
type: integer
sub_ast_required:
description: Number of SUB-AST subscriptions required by the organization
readOnly: true
type: integer
sub_eng_entitled:
description: Number of SUB-ENG subscriptions entitled for the organization
readOnly: true
type: integer
sub_eng_required:
description: Number of SUB-ENG subscriptions required by the organization
readOnly: true
type: integer
sub_ex12_required:
description: Number of SUB-EX12 subscriptions required by the organization
readOnly: true
type: integer
sub_insufficient:
description: If this org has sufficient subscription
readOnly: true
type: boolean
sub_man_entitled:
description: Number of SUB-MAN subscriptions entitled for the organization
readOnly: true
type: integer
sub_man_required:
description: Number of SUB-MAN subscriptions required by the organization
readOnly: true
type: integer
sub_me_entitled:
description: Number of SUB-ME subscriptions entitled for the organization
readOnly: true
type: integer
sub_vna_entitled:
description: Number of SUB-VNA subscriptions entitled for the organization
readOnly: true
type: integer
sub_vna_required:
description: Number of SUB-VNA subscriptions required by the organization
readOnly: true
type: integer
timestamp:
$ref: '#/components/schemas/timestamp'
description: Epoch timestamp, in seconds, when the organization search data was sampled
trial_enabled:
description: If this org is under trial period
readOnly: true
type: boolean
usage_types:
$ref: '#/components/schemas/response_org_search_item_usage_types'
description: Subscription usage types enabled for the organization
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
msp_org_change:
description: Request to assign or unassign orgs for an MSP account
properties:
op:
$ref: '#/components/schemas/msp_org_change_operation'
description: Assignment operation to apply to the listed org IDs
org_ids:
$ref: '#/components/schemas/msp_org_change_org_ids'
description: List of org IDs to assign to or unassign from the MSP account
required:
- op
- org_ids
type: object
stats_org_sle:
additionalProperties: false
description: Organization SLE summary for a service path
properties:
path:
description: SLE path represented by this organization summary
type: string
user_minutes:
$ref: '#/components/schemas/stats_org_sle_user_minutes'
description: User-minute totals for this SLE path
required:
- path
type: object
org:
description: Mist organization containing sites, devices, users, and organization-level settings
properties:
alarmtemplate_id:
description: Org-level alarm template ID used as the default for sites
format: uuid
type:
- string
- 'null'
allow_mist:
default: true
description: Whether Mist support access is allowed for this organization
type: boolean
created_time:
$ref: '#/components/schemas/created_time'
description: Epoch timestamp when the organization was created
id:
$ref: '#/components/schemas/id'
description: Unique identifier of the organization
modified_time:
$ref: '#/components/schemas/modified_time'
description: Epoch timestamp when the organization was last modified
msp_id:
$ref: '#/components/schemas/msp_id'
description: Managed service provider account that owns this organization, when applicable
msp_logo_url:
description: logo uploaded by the MSP with advanced tier, only present if provided
examples:
- https://example.com/logo/b9d42c2e-88ee-41f8-b798-f009ce7fe909.jpeg
format: uri
readOnly: true
type: string
msp_name:
description: Name of the msp the org belongs to
examples:
- MSP
readOnly: true
type: string
name:
description: Display name of the organization
examples:
- Org
type: string
orggroup_ids:
$ref: '#/components/schemas/orggroup_ids'
description: Organization group IDs that include this organization
session_expiry:
default: 1440
description: Admin session lifetime for the organization, in minutes
format: int32
maximum: 20160
minimum: 10
type: integer
required:
- name
type: object
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
orggroup_ids:
description: List of organization group identifiers
items:
format: uuid
type: string
type: array
org_list:
description: Organization records returned by a list response
items:
$ref: '#/components/schemas/org'
type: array
stats_orgs:
description: Organization statistics summaries returned by stats APIs
items:
$ref: '#/components/schemas/stats_org'
type: array
msp_org_change_operation:
description: 'Assignment operation to apply to the listed org IDs. enum: `assign`, `unassign`'
enum:
- assign
- unassign
type: string
stats_org:
additionalProperties: false
description: Organization statistics summary returned by the org stats endpoint
properties:
alarmtemplate_id:
description: Organization-level alarm template identifier used as the default for sites
format: uuid
type: string
allow_mist:
description: Whether Mist support access is allowed for this organization
type: boolean
created_time:
$ref: '#/components/schemas/created_time'
description: Time when the organization was created, in epoch seconds
id:
$ref: '#/components/schemas/id'
description: Unique identifier of the organization
modified_time:
$ref: '#/components/schemas/modified_time'
description: Time when the organization was last modified, in epoch seconds
msp_id:
$ref: '#/components/schemas/msp_id'
description: Managed service provider identifier associated with the organization
name:
description: Display name of the organization
type: string
num_devices:
description: Total number of devices in the organization
type: integer
num_devices_connected:
description: Number of organization devices currently connected to Mist
type: integer
num_devices_disconnected:
description: Number of organization devices currently disconnected from Mist
type: integer
num_inventory:
description: Number of devices in the organization's inventory
type: integer
num_sites:
description: Number of sites in the organization
type: integer
orggroup_ids:
$ref: '#/components/schemas/stats_org_orggroup_ids'
description: Organization group identifiers that include this organization
session_expiry:
description: Admin session lifetime for the organization, in minutes
format: int64
type: integer
sle:
$ref: '#/components/schemas/stats_org_sles'
description: Service level expectation summaries for the organization
required:
- orggroup_ids
- name
- id
- msp_id
- created_time
- modified_time
- allow_mist
- session_expiry
- alarmtemplate_id
- num_sites
- num_devices
- num_inventory
- num_devices_connected
- num_devices_disconnected
- sle
type: object
response_org_search:
additionalProperties: false
description: Paginated response for MSP organization search results
properties:
end:
description: Epoch timestamp, in seconds, for the end of the organization search window
readOnly: true
type: number
limit:
description: Maximum number of organization records returned in this page
readOnly: true
type: integer
next:
description: URL for retrieving the next page of organization search results
type: string
results:
$ref: '#/components/schemas/response_org_search_results'
description: Organization records matching the MSP search filters
start:
description: Epoch timestamp, in seconds, for the start of the organization search window
readOnly: true
type: number
total:
description: Number of organization records matching the search filters across all pages
readOnly: true
type: integer
required:
- end
- limit
- results
- start
- total
type: object
msp_id:
description: Managed service provider identifier
examples:
- b9d42c2e-88ee-41f8-b798-f009ce7fe909
format: uuid
readOnly: true
type: string
msp_org_change_org_ids:
description: List of org IDs to assign to or unassign from an MSP account
items:
type: string
type: array
stats_org_sle_user_minutes:
additionalProperties: false
description: User-minute totals for an organization SLE summary
properties:
ok:
description: User minutes that met the SLE target
type: number
total:
description: Observed total user minutes for the SLE path
type: number
required:
- total
- ok
type: object
modified_time:
description: When the object has been modified for the last time, in epoch
format: double
readOnly: true
type: number
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
stats_org_sles:
description: Service level expectation summaries for an organization
items:
$ref: '#/components/schemas/stats_org_sle'
type: array
uniqueItems: true
examples:
OrgsSearchExample:
value:
end: 1614383378.4365287
limit: 10
next: /api/v1/msps/43e96c5a-6ef6-11e6-9909-9596d1d1534f/orgs/search?end=1760601621&limit=1&search_after=%5B1760599794477%5D&start=1759996821
results:
- msp_id: d287e62f-0000-0000-0000-f2b9ba0a531f
name: Test Org
num_aps: 9
num_sites: 5
num_switches: 1
num_unassigned_aps: 1
org_id: bb1a8bf6-0000-0000-0000-8053a663cf65
sub_ana_required: 9
sub_ast_entitled: 5
sub_ast_required: 3
sub_eng_required: 3
sub_ex12_required: 1
sub_insufficient: true
sub_man_required: 9
sub_vna_entitled: 1
timestamp: 1614322563.513937
trial_enabled: false
usage_types:
# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mist/refs/heads/main/openapi/mist-msps-orgs-api-openapi.yml