Mist Installer API

In a typical enterprise, a separate group of people, Installers, are responsible for install new devices. May it be a new installation (e.g. new stores), a replacement installation (e.g. replacing Cisco APs with Mist APs), or addition (e.g. adding new APs for better coverage). Instead of granting them Admin/Write privilege, it's more desirable to grant them minimum privileges to do the initial provisioning so they cannot read sensible information (e.g. PSK of a WLAN), or change configs of running APs. At a high level, Installer APs try to achieve the following: 1. identifying a device by MAC (that\u2019\ s what they see) 2. they can only touch configurations of the devices they\u2019\ re installing 3. allow the following configurations: * name * site assignment * device profile assignment * map and location (x/y) assignment * claim (if not already in the inventory) * replace existing device with the device being installed **Grace Period** Grace period provides a dynamic way to limit what devices / sites installer can work on. Generally installers work on recent deployments - bringing up new sites, add newly claimed devices to new / existing sites. They make mistakes, too, and may need to further tweak some of the parameters. Default grace period is 7 days and can be set from 1 day to 365 days.

OpenAPI Specification

mist-installer-api-openapi.yml Raw ↑
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 Installer 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: "In a typical enterprise, a separate group of people, Installers, are responsible for install new devices. May it be a new installation (e.g. new stores), a replacement installation (e.g. replacing Cisco APs with Mist APs), or addition (e.g. adding new APs for better coverage). Instead of granting them Admin/Write privilege, it's more desirable to grant them minimum privileges to do the initial provisioning so they cannot read sensible information (e.g. PSK of a WLAN), or change configs of running APs.\nAt a high level, Installer APs try to achieve the following:\n1. identifying a device by MAC (that\\u2019\\ \ns what they see)\n2. they can only touch configurations of the devices they\\u2019\\\nre installing\n3. allow the following configurations: \n  * name * site assignment \n  * device profile assignment \n  * map and location (x/y) assignment \n  * claim (if not already in the inventory) \n  * replace existing device with the device being installed\n\n**Grace Period**\n\nGrace period provides a dynamic way to limit what devices / sites installer can work on. Generally installers work on recent deployments - bringing up new sites, add newly claimed devices to new / existing sites. They make mistakes, too, and may need to further tweak some of the parameters. Default grace period is 7 days and can be set from 1 day to 365 days."
  name: Installer
paths:
  /api/v1/installer/orgs/{org_id}/alarmtemplates:
    parameters:
    - $ref: '#/components/parameters/org_id'
    get:
      description: Return alarm templates available to installer workflows in the organization.
      operationId: listInstallerAlarmTemplates
      responses:
        '200':
          $ref: '#/components/responses/InstallerAlarmtemplates'
        '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: listInstallerAlarmTemplates
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/deviceprofiles:
    parameters:
    - $ref: '#/components/parameters/org_id'
    get:
      description: Return device profiles that installers can use when provisioning recently claimed devices, optionally filtered by device type.
      operationId: listInstallerDeviceProfiles
      parameters:
      - description: 'Filter results by type. enum: `ap`, `gateway`, `switch`'
        in: query
        name: type
        schema:
          $ref: '#/components/schemas/device_type_default_ap'
      responses:
        '200':
          $ref: '#/components/responses/InstallerDeviceProfiles'
        '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: listInstallerDeviceProfiles
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/devices:
    parameters:
    - $ref: '#/components/parameters/org_id'
    get:
      description: Return recently claimed devices visible to installer workflows, with optional filters for model, site name, or site identifier.
      operationId: listInstallerListOfRecentlyClaimedDevices
      parameters:
      - description: Filter results by device model
        in: query
        name: model
        schema:
          examples:
          - AP43
          type: string
      - description: Filter results by site name
        in: query
        name: site_name
        schema:
          examples:
          - SJ1
          type: string
      - description: Filter results by site identifier
        in: query
        name: site_id
        schema:
          examples:
          - 72771e6a-6f5e-4de4-a5b9-1266c4197811
          format: uuid
          type: string
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/InstallerDevicesArray'
        '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: listInstallerListOfRecentlyClaimedDevices
      tags:
      - Installer
    post:
      description: Claim devices into the organization inventory by activation code through the installer workflow.
      operationId: claimInstallerDevices
      requestBody:
        content:
          application/json:
            examples:
              Example:
                value:
                - 6JG8E-PTFV2-A9Z2N
                - DVH4V-SNMSZ-PDXBR
            schema:
              $ref: '#/components/schemas/claim_codes'
        description: Request Body
      responses:
        '200':
          $ref: '#/components/responses/OrgInventoryAdd'
        '400':
          $ref: '#/components/responses/OrgInventoryAdd'
        '401':
          $ref: '#/components/responses/HTTP401'
        '403':
          $ref: '#/components/responses/HTTP403'
        '404':
          $ref: '#/components/responses/HTTP404'
        '429':
          $ref: '#/components/responses/HTTP429'
      summary: claimInstallerDevices
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/devices/{device_mac}:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/device_mac'
    delete:
      description: Unassign a recently claimed device from its current site so it can be provisioned again through the installer workflow.
      operationId: unassignInstallerRecentlyClaimedDevice
      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: unassignInstallerRecentlyClaimedDevice
      tags:
      - Installer
    put:
      description: "Provision or replace an installer-managed device. \n\nIf replacing_mac is in the request payload, other attributes are ignored, we attempt to replace existing device (with MAC address `replacing_mac`) with the inventory device being configured. The replacement device must be in the inventory but not assigned, and the replacing_mac device must be assigned to a site, and satisfy grace period requirements. The Device replaced will become unassigned."
      operationId: provisionInstallerDevices
      requestBody:
        content:
          application/json:
            examples:
              Example:
                value:
                  deviceprofile_name: SJ1
                  height: 2.7
                  name: SJ1-AP1
                  orientation: 90
                  site_id: 72771e6a-6f5e-4de4-a5b9-1266c4197811
                  site_name: SJ1
                  x: 150
                  y: 300
            schema:
              $ref: '#/components/schemas/installer_provision_device'
        description: Request Body
      responses:
        '200':
          $ref: '#/components/responses/OK'
        '400':
          $ref: '#/components/responses/OrgInventoryUnassignFailed'
        '401':
          $ref: '#/components/responses/HTTP401'
        '403':
          $ref: '#/components/responses/HTTP403'
        '404':
          $ref: '#/components/responses/OrgInventoryUnassignNotFound'
        '429':
          $ref: '#/components/responses/HTTP429'
      summary: provisionInstallerDevices
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/devices/{device_mac}/locate:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/device_mac'
    post:
      description: Start locating an installer-managed device by blinking its LED. The locate state persists until [Stop Locating Installer Device](/#operations/stopInstallerLocateDevice) is called.
      operationId: startInstallerLocateDevice
      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: startInstallerLocateDevice
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/devices/{device_mac}/unlocate:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/device_mac'
    post:
      description: Stop the locate LED state for an installer-managed device.
      operationId: stopInstallerLocateDevice
      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: stopInstallerLocateDevice
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/devices/{device_mac}/{image_name}:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/image_name'
    - $ref: '#/components/parameters/device_mac'
    delete:
      description: Remove a previously uploaded image associated with an installer-managed device, such as an installation photo or device placement image.
      operationId: deleteInstallerDeviceImage
      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: deleteInstallerDeviceImage
      tags:
      - Installer
    post:
      description: Upload an image associated with an installer-managed device using `multipart/form-data`.
      operationId: addInstallerDeviceImage
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/map_site_import_file'
        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: addInstallerDeviceImage
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/devices/{fpc0_mac}/vc:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - description: FPC0 MAC address
      in: path
      name: fpc0_mac
      required: true
      schema:
        examples:
        - aff827549235
        type: string
    get:
      description: 'Return Virtual Chassis status for an installer-managed switch, including topology and member statistics.


        The response is a combined view of the Virtual Chassis state.'
      operationId: getInstallerDeviceVirtualChassis
      responses:
        '200':
          $ref: '#/components/responses/VirtualChassis'
        '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: getInstallerDeviceVirtualChassis
      tags:
      - Installer
    post:
      description: 'For models (e.g. EX3400 and up) having dedicated VC ports, it is easier to form a VC by just connecting cables with the dedicated VC ports. Cloud will detect the new VC and update the inventory.


        In case that the user would like to choose the dedicated switch as a VC master or for EX2300-C-12P and EX2300-C-12T which doesn''t have dedicated VC ports, below are procedures to automate the VC creation:


        1. Power on the switch that is chosen as the VC master first. And then powering on the other member switches.

        2. Claim or adopt all these switches under the same organization’s Inventory

        3. Assign these switches into the same Site

        4. Invoke vc command on the switch chosen to be the VC master. For EX2300-C-12P, VC ports will be created automatically.

        5. Connect the cables to the VC ports for these switches

        6. Wait for the VC to be formed. The Org’s inventory will be updated for the new VC.'
      operationId: createInstallerVirtualChassis
      requestBody:
        content:
          application/json:
            examples:
              create-a-VC-with-three-members:
                value:
                  members:
                  - mac: aff827549235
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: master
                  - mac: 8396cd006c8c
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: backup
                  - mac: 8396cd00888c
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: linecard
              create-a-pre-provisioned-VC-with-three-members:
                value:
                  members:
                  - mac: aff827549235
                    member_id: 0
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: master
                  - mac: 8396cd006c8c
                    member_id: 1
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: linecard
                  - mac: 8396cd00888c
                    member_id: 2
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: backup
                  preprovisioned: true
            schema:
              $ref: '#/components/schemas/virtual_chassis_config'
        description: Request Body
      responses:
        '200':
          $ref: '#/components/responses/VirtualChassis'
        '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: createInstallerVirtualChassis
      tags:
      - Installer
    put:
      description: "The VC creation and adding member switch API will update the device’ s virtual chassis config which is applied after VC is formed to create JUNOS pre-provisioned virtual chassis configuration.\n\n## Change to use preprovisioned VC\nTo switch the VC to use preprovisioned VC, enable preprovisioned in virtual_chassis config. Both vc_role master and backup will be matched to routing-engine role in Junos preprovisioned VC config.\n\nIn this config, fpc0 has to be the same as the mac of device_id. Use renumber if you want to replace fpc0 which involves device_id change.\n\nNotice: to configure preprovisioned VC, every member of the VC must be in the inventory.\n\n## Add new members\nFor models (e.g. EX4300 and up) having dedicated VC ports, it is easier to add new member switches into a VC by just connecting cables with the dedicated VC ports. Cloud will detect the new members and update the inventory.\n\nFor EX2300 VC, adding new members requires to follow the procedures below:\n1. Powering on the new member switches and ensuring cables are not connected to any VC ports.\n2. Claim or adopt all new member switches under the VC’s organization Inventory\n3. Assign all new member switches to the same Site as the VC\n4. Invoke vc command to add switches to the VC.\n5. Connect the cables to the VC ports for these switches\n6. After a while, the Org’s Inventory shows this new switches has been added into the VC.\n\n## Removing member switch\nTo remove a member switch from the VC, following the procedures below:\n\n1. Ensuring the VC is connected to the cloud first\n2. Unplug the cable from the VC port of the switch\n3. Waiting for the VC state (vc_state) of this switch is changed to not-present\n4. Invoke update_vc with remove to remove this switch from the VC\n5. The Org’s Inventory shows the switch is removed.\n\nPlease notice that member ID 0 (fpc0) cannot be removed. When a VC has two switches left, unplugging the cable may result in the situation that fpc0 becomes a line card (LC). When this situation is happening, please re-plug in the cable, wait for both switches becoming present (show virtual-chassis) and then removing the cable again.\n\n## Renumber a member switch\nWhen a member switch doesn't' work properly and needed to be replaced, the renumber API could be used. The following two types of renumber are supported:\n\n1. Replace a non-fpc0 member switch\n2. Replace fpc0. When fpc0 is replaced, PAPI device config and JUNOS config will be both updated.\n\nFor renumber to work, the following procedures are needed: \n1. Ensuring the VC is connected to the cloud and the state of the member switch to be replaced must be non present. \n2. Adding the new member switch to the VC \n3. Waiting for the VC state (vc_state) of this VC to be updated to API server \n4. Invoke vc with renumber to replace the new member switch from fpc X to\n\n## Perprovision VC members\nBy specifying \"preprovision\" op, you can convert the current VC to pre-provisioned mode, update VC members as well as specify vc_ports when adding new members for device models without dedicated vc ports. Use renumber for fpc0 replacement which involves device_id change.\n\nNote: \n1. vc_ports is used for adding new members and not needed if * the device model has dedicated vc ports, or * no new member is added \n2. New VC members to be added should exist in the same Site as the VC\n\nUpdate Device’s VC config can achieve similar purpose by directly modifying current virtual_chassis config. However, it cannot fulfill requests to enabling vc_ports on new members that are yet to belong to current VC."
      operationId: updateInstallerVirtualChassisMember
      requestBody:
        content:
          application/json:
            examples:
              adding-two-new-switches-as-line-cards-into-the-VC:
                value:
                  members:
                  - mac: aff827549235
                    member_id: 2
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: linecard
                  - mac: 8396cd00777c
                    member_id: 3
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: linecard
                  op: add
              convert-to-pre-provisioned-VC:
                value:
                  member: 0
                  members:
                  - mac: string
                    member_id: 0
                    vc_ports:
                    - xe-0/1/0
                    - xe-0/1/1
                    vc_role: master
                  new-member: 0
                  op: add
              removing-two-switches-from-VC:
                value:
                  members:
                  - member: 2
                  - member: 3
                  op: remove
              renumber-member-ID-3-to-member-ID-2:
                value:
                  member: 3
                  new-member: 2
                  op: renumber
            schema:
              $ref: '#/components/schemas/virtual_chassis_update'
        description: Request Body
      responses:
        '200':
          $ref: '#/components/responses/VirtualChassis'
        '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: updateInstallerVirtualChassisMember
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/rftemplates:
    parameters:
    - $ref: '#/components/parameters/org_id'
    get:
      description: Return RF template names available to installer workflows for site creation or updates.
      operationId: listInstallerRfTemplatesNames
      responses:
        '200':
          $ref: '#/components/responses/InstallerRftemplatesArray'
        '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: listInstallerRfTemplatesNames
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/sitegroups:
    parameters:
    - $ref: '#/components/parameters/org_id'
    get:
      description: Return site groups that installers can assign when creating or updating sites.
      operationId: listInstallerSiteGroups
      responses:
        '200':
          $ref: '#/components/responses/InstallerSitegroupsArray'
        '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: listInstallerSiteGroups
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/sites:
    parameters:
    - $ref: '#/components/parameters/org_id'
    get:
      description: Return sites visible to installer workflows for device assignment and map operations.
      operationId: listInstallerSites
      responses:
        '200':
          $ref: '#/components/responses/InstallerSitesArray'
        '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: listInstallerSites
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/sites/{site_name}:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/site_name'
    put:
      description: Use `site_name` to create a site when it does not exist, or to update installer-editable fields on an existing site. Installers use these sites for device assignment, and grace-period rules also apply when updating an existing site.
      operationId: createOrUpdateInstallerSites
      requestBody:
        content:
          application/json:
            examples:
              Example:
                value:
                  address: 1601 S. Deanza Blvd., Cupertino, CA, 95014
                  country_code: US
                  latlng:
                    lat: 37.295833
                    lng: -122.032946
                  name: string
                  rftemplate_name: rftemplate1
                  sitegroup_names:
                  - sg1
                  - sg2
                  timezone: America/Los_Angeles
            schema:
              $ref: '#/components/schemas/installer_site'
        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: createOrUpdateInstallerSites
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/sites/{site_name}/maps:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/site_name'
    get:
      description: Return maps for an installer-managed site, used for floorplan selection and AP placement during provisioning.
      operationId: listInstallerMaps
      responses:
        '200':
          $ref: '#/components/responses/MapsArray'
        '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: listInstallerMaps
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/sites/{site_name}/maps/import:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/site_name'
    post:
      description: Import a site floorplan and optional placement data from multipart files. The request can include an image file, optional JSON, and optional CSV data to create the map and assign or place APs when names or MAC addresses match.
      operationId: importInstallerMap
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/map_site_import_file'
      responses:
        '200':
          $ref: '#/components/responses/MapImport'
        '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: importInstallerMap
      tags:
      - Installer
  /api/v1/installer/orgs/{org_id}/sites/{site_name}/maps/{map_id}:
    parameters:
    - $ref: '#/components/parameters/org_id'
    - $ref: '#/components/parameters/site_name'
    - $ref: '#/components/parameters/map_id'
    delete:
      description: Remove a map or floorplan from an installer-managed site. This removes the map used for AP placement, but does not delete the site.
      operationId: deleteInstallerMap
      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: deleteInstallerMap
      tags:
      - Installer
    post:
      description: Define a map or floorplan for an installer-managed site, including metadata used for AP placement and site visualization.
      operationId: createInstallerMap
      requestBody:
        content:
          application/json:
            examples:
              Example:
                value:
                  height: 0
                  latlng_br:
                    lat: string
                    lng: string
                  latlng_tl:
                    lat: string
                    lng: string
                  locked: true
                  name: string
                  orientation: 0
                  origin_x: 0
                  origin_y: 0
                  ppm: 0
                  sitesurvey_path:
                  - coordinate: string
                    name: string
                    nodes:
                    - edges:
                        N2: string
                      name: string
                      position:
                        x: 0
                        y: 0
                  type: image
                  view: roadmap
                  wall_path:
                    coordinate: string
                    nodes:
                    - edges:
                        N2: string
                      name: string
                      position:
                        x: 0
                        y: 0
                  wayfinding:
                    micello:
                      account_key: string
                      default_level_id: 0
                    snap_to_path: true
                  wayfinding_path:
                    coordinate: string
                    nodes:
                    - edges:
                        N2: string
                      name: string
                      position:
                        x: 0
                        y: 0
                  width: 0
            schema:
              $ref: '#/components/schemas/map'
        description: Request Body
      responses:
        '200':
          $ref: '#/components/responses/Map'
        '400':
          $ref: '#/components/responses/HTTP400'
        '401':
          $ref: '#/components/responses/HTTP401'
        '403':
          $ref: '#/components/responses/HTTP403'
        '404':
          $ref: '#/components/responses/HT

# --- truncated at 32 KB (112 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mist/refs/heads/main/openapi/mist-installer-api-openapi.yml