{
  "openapi": "3.0.1",
  "info": {
    "title": "RevoCloud Plugin API",
    "description": "The RevoCloud operations available to external plugins using a plugin JWT (obtained via the /external-plugin/oauth/token exchange). All routes are tenant-scoped to the token's tenant. Responses are raw data payloads unless the X-Envelope header is sent (the token exchange itself is standard OAuth and unaffected).",
    "version": "v1"
  },
  "paths": {
    "/api/v1/{tenantId}/devices": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Used to create a device.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddDeviceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddDeviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "Used to get all of the devices in the tenant",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSystemDevicesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "put": {
        "tags": [
          "Devices"
        ],
        "summary": "Used to update device properties",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDeviceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/devices/{deviceId}": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "Get a device by Id.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDeviceByIdResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "delete": {
        "tags": [
          "Devices"
        ],
        "summary": "Device manager - Delete Device",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteDeviceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/devices/{deviceId}/operations/{operationId}": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Device manager - Run Device Operation",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunDeviceOperationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunDeviceOperationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/devices/{deviceId}/reachable-locations": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Add or remove reachable locations for the device",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReachableLocationsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateReachableLocationsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/devices/{deviceId}/locations": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Add a new location to a device.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddDeviceLocationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddDeviceLocationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/devices/{deviceId}/locations/{locationId}": {
      "put": {
        "tags": [
          "Devices"
        ],
        "summary": "Update an existing device location.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDeviceLocationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateDeviceLocationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "delete": {
        "tags": [
          "Devices"
        ],
        "summary": "Delete a device location.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoveDeviceLocationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/external-plugin/oauth/token": {
      "post": {
        "tags": [
          "External Plugin"
        ],
        "summary": "OAuth2 token exchange for plugin backends (auth_code + PKCE + private_key_jwt)",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/TokenExchangeForm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RfcOAuthPluginTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/{tenantId}/labware/create-labware": {
      "post": {
        "tags": [
          "Labware"
        ],
        "summary": "Used to create a piece of labware in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLabwareRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateLabwareResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/labware": {
      "get": {
        "tags": [
          "Labware"
        ],
        "summary": "Used to get all labware in the system",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetLabwareResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/labware/update-labware": {
      "put": {
        "tags": [
          "Labware"
        ],
        "summary": "Used to update a piece of labware in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLabwareRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateLabwareResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/labware/delete-labware/{labwareId}": {
      "delete": {
        "tags": [
          "Labware"
        ],
        "summary": "Used to delete a piece of labware in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "labwareId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteLabwareResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/labware-templates": {
      "get": {
        "tags": [
          "Labware Templates"
        ],
        "summary": "Template labware that user can use to build on top of.",
        "description": "A set of template labware that the revo team has put together.\n\n**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetLabwareTemplatesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/list-schedules": {
      "get": {
        "tags": [
          "List Schedules"
        ],
        "summary": "Lists the system schedules as a FolderStructureNode[] arranged into the tenant's schedule-folder hierarchy.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSchedulesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/notifications/{notificationId}/dismiss": {
      "post": {
        "tags": [
          "Notifications"
        ],
        "summary": "Dismiss a non-blocking notification by id",
        "description": "Removes the notification from the RevoCore-side recent buffer. Idempotent: dismissing an unknown id returns success. Does not affect blocking-recovery errors -- those continue to surface via the recovery-action flow.\n\n**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "notificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/run-schedules": {
      "post": {
        "tags": [
          "Run Schedules"
        ],
        "summary": "Triggers the run events for specificed schedules",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunSchedulesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/export": {
      "get": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to export a schedule to a .xml file for dissemination, optionally including the schedules it references (deep=true)",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deep",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/properties": {
      "put": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to save the current schedule properties",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSchedulePropertiesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/parameters": {
      "put": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to save the current schedule parameters",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveScheduleParametersRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}": {
      "get": {
        "tags": [
          "Schedule"
        ],
        "summary": "Fetches the initial schedule operation nodes.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetScheduleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/operations/{operationId}/parameters": {
      "get": {
        "tags": [
          "Schedule"
        ],
        "summary": "Fetches the current parameters available at that schedule operation node.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOperationParametersResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/operations/insert": {
      "post": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to save the current schedule operation nodes",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InsertScheduleOperationsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveScheduleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/operations/move": {
      "put": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to move the current schedule operation nodes",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveScheduleOperationsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveScheduleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/operations/update": {
      "put": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to update the current schedule operation nodes",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateScheduleOperationsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveScheduleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule/{scheduleId}/operations/delete": {
      "delete": {
        "tags": [
          "Schedule"
        ],
        "summary": "Used to delete the current schedule operation nodes",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteScheduleOperationsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveScheduleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule-explorer/create-item": {
      "post": {
        "tags": [
          "Schedule Explorer"
        ],
        "summary": "Creates a schedule file or folder; returns the new id and properties.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateItemResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule-explorer/move-item": {
      "put": {
        "tags": [
          "Schedule Explorer"
        ],
        "summary": "Moves a schedule file or folder to a new parent.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule-explorer/rename-item": {
      "put": {
        "tags": [
          "Schedule Explorer"
        ],
        "summary": "Renames a schedule file or folder.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenameItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedule-explorer/delete-item": {
      "delete": {
        "tags": [
          "Schedule Explorer"
        ],
        "summary": "Deletes a schedule file or folder.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedules/import": {
      "post": {
        "tags": [
          "Schedules"
        ],
        "summary": "Used to import a schedule from a file to a tenant",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  },
                  "overwrite": {
                    "type": "boolean",
                    "default": false
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                },
                "overwrite": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportScheduleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/schedules/recent": {
      "get": {
        "tags": [
          "Schedules"
        ],
        "summary": "Lists the recently edited schedules as a ScheduleListItemDescriptor[]",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListRecentSchedulesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/scripts/executions": {
      "get": {
        "tags": [
          "Scripts"
        ],
        "summary": "Lists Python script executions for this tenant/Core.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "scriptId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/PythonScriptExecutionStatus"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListPythonScriptExecutionsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/scripts/executions/{executionId}": {
      "get": {
        "tags": [
          "Scripts"
        ],
        "summary": "Gets one Python script execution, including the point-in-time script snapshot.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "executionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPythonScriptExecutionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/scripts/executions/{executionId}/logs": {
      "get": {
        "tags": [
          "Scripts"
        ],
        "summary": "Paginated read of stdout/stderr for one Python script execution.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "executionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1000
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetScriptLogsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/scripts/{scriptId}/execute": {
      "post": {
        "tags": [
          "Scripts"
        ],
        "summary": "Run a stored Python script via the scheduler",
        "description": "Wraps the script in a transient scheduler operation and dispatches it. Returns the scheduler ThreadId for log polling. The schedule is not persisted to the user's saved-schedule list.\n\n**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "scriptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteScriptResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/scripts/runs/{threadId}/logs": {
      "get": {
        "tags": [
          "Scripts"
        ],
        "summary": "Paginated read of stdout/stderr for a running or completed script run.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "threadId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1000
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetScriptLogsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/simulator/framework": {
      "get": {
        "tags": [
          "Simulator"
        ],
        "summary": "Returns all of the framework in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetFrameworkResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "post": {
        "tags": [
          "Simulator"
        ],
        "summary": "Creates a new framework in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFrameworkBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "put": {
        "tags": [
          "Simulator"
        ],
        "summary": "Updates an existing framework in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFrameworkBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/simulator/framework/{frameworkId}": {
      "delete": {
        "tags": [
          "Simulator"
        ],
        "summary": "Deletes an existing framework in the system.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "frameworkId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/storage-devices/{storageDeviceId}/add-column": {
      "put": {
        "tags": [
          "Storage Devices"
        ],
        "summary": "Adds a column to a storage device layout.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "storageDeviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddStorageDeviceColumnRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddStorageDeviceColumnResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/storage-devices/{storageDeviceId}/remove-column": {
      "delete": {
        "tags": [
          "Storage Devices"
        ],
        "summary": "Removes a column from a storage device layout.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "storageDeviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveStorageDeviceColumnRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoveStorageDeviceColumnResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/storage-devices/{storageDeviceId}/update-column": {
      "put": {
        "tags": [
          "Storage Devices"
        ],
        "summary": "Updates a column in a storage device layout.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "storageDeviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStorageDeviceColumnRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateStorageDeviceColumnResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantid}/storage-devices": {
      "get": {
        "tags": [
          "Storage Devices"
        ],
        "summary": "Returns a list of StorageDeviceInfo data about the storage device",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetStorageDevicesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantid}/storage-devices/{storageDeviceId}/positions/store": {
      "put": {
        "tags": [
          "Storage Devices"
        ],
        "summary": "Updates the store positions of a storage device",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storageDeviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPositionsStoreRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/storage-manager/overview": {
      "get": {
        "tags": [
          "Storage Manager"
        ],
        "summary": "Returns the storage manager overview with high level details about the storage devices",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorageManagerOverviewResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/stores": {
      "get": {
        "tags": [
          "Stores"
        ],
        "summary": "List all stores in the tenant",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetAllStoresResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "post": {
        "tags": [
          "Stores"
        ],
        "summary": "Used to create a store",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStoreRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateStoreResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/stores/{storeId}": {
      "put": {
        "tags": [
          "Stores"
        ],
        "summary": "Used to update a store",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStoreRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateStoreResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "delete": {
        "tags": [
          "Stores"
        ],
        "summary": "Used to delete a store",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/device-pools": {
      "get": {
        "tags": [
          "System"
        ],
        "summary": "Returns a list of all device-pools.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDevicePoolsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "post": {
        "tags": [
          "System"
        ],
        "summary": "Creates a new device pool.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDevicePoolRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevicePool"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/device-pools/{poolId}": {
      "put": {
        "tags": [
          "System"
        ],
        "summary": "Updates a device pool",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDevicePoolRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevicePool"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      },
      "delete": {
        "tags": [
          "System"
        ],
        "summary": "Deletes a device pool.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/transfer": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "Run an ad-hoc transfer (TransferScheduleOperation) between two locations.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunTransferOperationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunTransferOperationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/initialise-devices": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "Attempts to initialise the specified devices. Returns a 200 if the request is successfully made. A websocket will notify the frontend when the devices are actually initialised.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitialiseDevicesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/initialise-devices/template": {
      "get": {
        "tags": [
          "System"
        ],
        "summary": "Returns the initialisable system template.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInitialisableSystemTemplateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/initialise-status": {
      "get": {
        "tags": [
          "System"
        ],
        "summary": "Returns the initialisation status of all the devices.",
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSystemInitialsationStatusResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/active-schedules": {
      "get": {
        "tags": [
          "System"
        ],
        "summary": "Get the active schedules in the system",
        "description": "Returns the active schedules\n\n**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetActiveSchedulesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    },
    "/api/v1/{tenantId}/system/schedule/actions": {
      "post": {
        "tags": [
          "System"
        ],
        "description": "**Plugin API access**: this operation accepts a plugin JWT (PluginBearer) for its own tenant.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteScheduleActionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteScheduleActionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorBody"
                }
              }
            }
          }
        },
        "security": [
          {
            "PluginBearer": [ ]
          }
        ],
        "x-plugin-access": true
      }
    }
  },
  "components": {
    "schemas": {
      "AddDeviceLocationRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "nullable": true
          },
          "attachToPartId": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "orientation": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          },
          "isHidden": {
            "type": "boolean"
          },
          "isTeachDisabled": {
            "type": "boolean"
          },
          "claimParentDevice": {
            "type": "boolean"
          },
          "deviceInstanceId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddDeviceLocationResponse": {
        "type": "object",
        "properties": {
          "location": {
            "$ref": "#/components/schemas/DeviceLocationDescriptor"
          }
        },
        "additionalProperties": false
      },
      "AddDeviceRequest": {
        "type": "object",
        "properties": {
          "libraryElementDeviceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "jsonModelId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddDeviceResponse": {
        "type": "object",
        "properties": {
          "device": {
            "$ref": "#/components/schemas/DeviceDescriptor"
          }
        },
        "additionalProperties": false
      },
      "AddStorageDeviceColumnRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "storageDeviceId": {
            "type": "string",
            "nullable": true
          },
          "startPosition": {
            "type": "integer",
            "format": "int32"
          },
          "endPosition": {
            "type": "integer",
            "format": "int32"
          },
          "column": {
            "type": "integer",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "AddStorageDeviceColumnResponse": {
        "type": "object",
        "properties": {
          "storageDeviceDescriptor": {
            "$ref": "#/components/schemas/StorageDeviceDescriptor"
          }
        },
        "additionalProperties": false
      },
      "ApiErrorBody": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BaseWaypoint": {
        "type": "object",
        "properties": {
          "position": {
            "$ref": "#/components/schemas/Vector3Object"
          },
          "orientation": {
            "$ref": "#/components/schemas/Vector3Object"
          },
          "joints": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "parameters": {
            "$ref": "#/components/schemas/WaypointParameters"
          }
        },
        "additionalProperties": false
      },
      "BaseWaypointLocationPath": {
        "type": "object",
        "properties": {
          "locationId": {
            "type": "string",
            "nullable": true
          },
          "locationName": {
            "type": "string",
            "nullable": true
          },
          "waypoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BaseWaypoint"
            },
            "nullable": true
          },
          "parameters": {
            "$ref": "#/components/schemas/LocationPathParameters"
          }
        },
        "additionalProperties": false
      },
      "CreateDevicePoolRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DevicePoolLocation"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateFrameworkBody": {
        "type": "object",
        "properties": {
          "framework": {
            "$ref": "#/components/schemas/FrameworkDescriptor"
          }
        },
        "additionalProperties": false
      },
      "CreateItemRequest": {
        "type": "object",
        "properties": {
          "parentFolderId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/ItemType"
          }
        },
        "additionalProperties": false
      },
      "CreateItemResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FolderProperty"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateLabwareRequest": {
        "type": "object",
        "properties": {
          "labware": {
            "$ref": "#/components/schemas/LabwareProperties"
          }
        },
        "additionalProperties": false
      },
      "CreateLabwareResponse": {
        "type": "object",
        "properties": {
          "labware": {
            "$ref": "#/components/schemas/LabwareProperties"
          }
        },
        "additionalProperties": false
      },
      "CreateStoreRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "defaultLabwareType": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateStoreResponse": {
        "type": "object",
        "properties": {
          "storeDescriptor": {
            "$ref": "#/components/schemas/StoreDescriptor"
          }
        },
        "additionalProperties": false
      },
      "DeleteDeviceResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "DeleteItemRequest": {
        "type": "object",
        "properties": {
          "itemId": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/ItemType"
          }
        },
        "additionalProperties": false
      },
      "DeleteLabwareResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "DeleteOperationDescriptor": {
        "type": "object",
        "properties": {
          "operationId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeleteScheduleOperationsRequest": {
        "type": "object",
        "properties": {
          "deletes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeleteOperationDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceDescriptor": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "assemblyName": {
            "type": "string",
            "nullable": true
          },
          "assemblyFullPath": {
            "type": "string",
            "nullable": true
          },
          "typeName": {
            "type": "string",
            "nullable": true
          },
          "version": {
            "type": "string",
            "nullable": true
          },
          "deviceName": {
            "type": "string",
            "nullable": true
          },
          "deviceDescription": {
            "type": "string",
            "nullable": true
          },
          "deviceInstanceId": {
            "type": "string",
            "nullable": true
          },
          "deviceDescriptorId": {
            "type": "string",
            "nullable": true
          },
          "revoWebDeviceInfo": {
            "$ref": "#/components/schemas/RevoWebDeviceInfo"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParameterDescriptor"
            },
            "nullable": true
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceOperationDescriptor"
            },
            "nullable": true
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceLocationDescriptor"
            },
            "nullable": true
          },
          "simulatorPosition": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "deviceType": {
            "$ref": "#/components/schemas/DeviceTypes"
          },
          "robotConfig": {
            "$ref": "#/components/schemas/RobotConfig"
          }
        },
        "additionalProperties": false
      },
      "DeviceInitialisationState": {
        "type": "object",
        "properties": {
          "deviceId": {
            "type": "string",
            "nullable": true
          },
          "state": {
            "$ref": "#/components/schemas/InitialisationStatus"
          }
        },
        "additionalProperties": false
      },
      "DeviceLocationDescriptor": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "nullable": true
          },
          "attachToPartId": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "orientation": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          },
          "isHidden": {
            "type": "boolean"
          },
          "isTeachDisabled": {
            "type": "boolean"
          },
          "claimParentDevice": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "DeviceOperationDescriptor": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "parameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParameterDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DevicePool": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DevicePoolLocation"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DevicePoolLocation": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceTypes": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "ExecuteScheduleActionRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "scheduleThreadIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "nullable": true
          },
          "action": {
            "$ref": "#/components/schemas/ScheduleAction"
          }
        },
        "additionalProperties": false
      },
      "ExecuteScheduleActionResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "ExecuteScriptResponse": {
        "type": "object",
        "properties": {
          "executionId": {
            "type": "string",
            "nullable": true
          },
          "threadId": {
            "type": "integer",
            "format": "int64"
          },
          "execution": {
            "$ref": "#/components/schemas/PythonScriptExecutionDescriptor"
          }
        },
        "additionalProperties": false
      },
      "FolderProperty": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FolderStructureNode": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FolderProperty"
            },
            "nullable": true
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FolderStructureNode"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FrameworkDescriptor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "definitionKey": {
            "type": "string",
            "nullable": true
          },
          "standardParams": {
            "$ref": "#/components/schemas/StandardParams"
          },
          "transformMatrix": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "shelfConfig": {
            "$ref": "#/components/schemas/ShelfConfig"
          },
          "preloadGenericModels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetActiveSchedulesResponse": {
        "type": "object",
        "properties": {
          "activeSchedules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleStatusInfo"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetAllStoresResponse": {
        "type": "object",
        "properties": {
          "stores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StoreDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetDeviceByIdResponse": {
        "type": "object",
        "properties": {
          "device": {
            "$ref": "#/components/schemas/DeviceDescriptor"
          }
        },
        "additionalProperties": false
      },
      "GetDevicePoolsResponse": {
        "type": "object",
        "properties": {
          "devicePools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DevicePool"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetFrameworkResponse": {
        "type": "object",
        "properties": {
          "frameworks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FrameworkDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetInitialisableSystemTemplateResponse": {
        "type": "object",
        "properties": {
          "systems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InitialisableSystemOverview"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetLabwareResponse": {
        "type": "object",
        "properties": {
          "labware": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LabwareProperties"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetLabwareTemplatesResponse": {
        "type": "object",
        "properties": {
          "labware": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LabwareProperties"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetOperationParametersResponse": {
        "type": "object",
        "properties": {
          "parameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParameterOption"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetPythonScriptExecutionResponse": {
        "type": "object",
        "properties": {
          "execution": {
            "$ref": "#/components/schemas/PythonScriptExecutionDescriptor"
          }
        },
        "additionalProperties": false
      },
      "GetScheduleResponse": {
        "type": "object",
        "properties": {
          "schedule": {
            "$ref": "#/components/schemas/ScheduleDescriptor"
          }
        },
        "additionalProperties": false
      },
      "GetScriptLogsResponse": {
        "type": "object",
        "properties": {
          "chunks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScriptLogChunkDescriptor"
            },
            "nullable": true
          },
          "nextSequenceExclusive": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "GetStorageDevicesResponse": {
        "type": "object",
        "properties": {
          "storageDevices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StorageDeviceDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetSystemDevicesResponse": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetSystemInitialsationStatusResponse": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceInitialisationState"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GripOrientation": {
        "enum": [
          0,
          180
        ],
        "type": "integer",
        "format": "int32"
      },
      "GripProfile": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "ImportScheduleResponse": {
        "type": "object",
        "properties": {
          "importedScheduleCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "InitialisableDevice": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "nestedDevices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InitialisableDevice"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InitialisableSystemOverview": {
        "type": "object",
        "properties": {
          "systemName": {
            "type": "string",
            "nullable": true
          },
          "devices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InitialisableDevice"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InitialisationStatus": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "InitialiseActions": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "InitialiseDevicesRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "deviceIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "action": {
            "$ref": "#/components/schemas/InitialiseActions"
          }
        },
        "additionalProperties": false
      },
      "InputVisiblityRequirement": {
        "type": "object",
        "properties": {
          "propertyName": {
            "type": "string",
            "nullable": true
          },
          "matchValues": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isInverse": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InsertOperationDescriptor": {
        "type": "object",
        "properties": {
          "operationToInsert": {
            "$ref": "#/components/schemas/ScheduleOperationDescriptor"
          },
          "targetLocation": {
            "$ref": "#/components/schemas/TargetLocation"
          }
        },
        "additionalProperties": false
      },
      "InsertScheduleOperationsRequest": {
        "type": "object",
        "properties": {
          "inserts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InsertOperationDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ItemType": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "format": "int32"
      },
      "LabwareProperties": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "templateId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "labwareJsonId": {
            "type": "string",
            "nullable": true
          },
          "wellCount": {
            "type": "integer",
            "format": "int32"
          },
          "barCodeRegEx": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "gripForce": {
            "type": "number",
            "format": "double"
          },
          "moveSpeed": {
            "type": "number",
            "format": "double"
          },
          "externalClearanceToPlateBottom": {
            "type": "number",
            "format": "double"
          },
          "gripHeight": {
            "type": "number",
            "format": "double"
          },
          "heightWithLid": {
            "type": "number",
            "format": "double"
          },
          "heightWithoutLid": {
            "type": "number",
            "format": "double"
          },
          "stackHeightIncrement": {
            "type": "number",
            "format": "double"
          },
          "stackHeightIncrementWithLid": {
            "type": "number",
            "format": "double"
          },
          "isLiddedDefault": {
            "type": "boolean"
          },
          "manufacturer": {
            "type": "string",
            "nullable": true
          },
          "partNumber": {
            "type": "string",
            "nullable": true
          },
          "docsUrl": {
            "type": "string",
            "nullable": true
          },
          "gripPortrait": {
            "type": "number",
            "format": "double"
          },
          "gripLandscape": {
            "type": "number",
            "format": "double"
          },
          "imageUrl": {
            "type": "string",
            "nullable": true
          },
          "svgTopLandscape": {
            "type": "string",
            "nullable": true
          },
          "svgCrossSection": {
            "type": "string",
            "nullable": true
          },
          "modelUrl": {
            "type": "string",
            "nullable": true
          },
          "modelMaterials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialMap"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ListPythonScriptExecutionsResponse": {
        "type": "object",
        "properties": {
          "executions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PythonScriptExecutionDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ListRecentSchedulesResponse": {
        "type": "object",
        "properties": {
          "schedules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleListItemDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ListSchedulesResponse": {
        "type": "object",
        "properties": {
          "folders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FolderStructureNode"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LocationPathParameters": {
        "type": "object",
        "properties": {
          "gripOrientation": {
            "$ref": "#/components/schemas/GripOrientation"
          },
          "gripProfile": {
            "$ref": "#/components/schemas/GripProfile"
          },
          "regripBeforePlace": {
            "type": "boolean"
          },
          "isRegripLocation": {
            "type": "boolean"
          },
          "gripperOpenClearance": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MaterialMap": {
        "type": "object",
        "properties": {
          "modelMaterialName": {
            "type": "string",
            "nullable": true
          },
          "replacementMaterialName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MoveItemRequest": {
        "type": "object",
        "properties": {
          "parentFolderId": {
            "type": "string",
            "nullable": true
          },
          "itemId": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/ItemType"
          }
        },
        "additionalProperties": false
      },
      "MoveOperationDescriptor": {
        "type": "object",
        "properties": {
          "operationId": {
            "type": "string",
            "nullable": true
          },
          "targetLocation": {
            "$ref": "#/components/schemas/TargetLocation"
          }
        },
        "additionalProperties": false
      },
      "MoveScheduleOperationsRequest": {
        "type": "object",
        "properties": {
          "moves": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MoveOperationDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "NoData": {
        "type": "object",
        "additionalProperties": false
      },
      "NumberUnit": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25
        ],
        "type": "integer",
        "format": "int32"
      },
      "OAuthErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "nullable": true
          },
          "error_description": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "ParameterDescriptor": {
        "type": "object",
        "properties": {
          "propertyName": {
            "type": "string",
            "nullable": true
          },
          "propertyDescriptor": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "primitiveType": {
            "type": "string",
            "nullable": true
          },
          "parameterType": {
            "type": "string",
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          },
          "currentValue": {
            "type": "string",
            "nullable": true
          },
          "parameterNameValue": {
            "type": "string",
            "nullable": true
          },
          "min": {
            "type": "number",
            "format": "double"
          },
          "max": {
            "type": "number",
            "format": "double"
          },
          "defaultValue": {
            "type": "string",
            "nullable": true
          },
          "placeHolder": {
            "type": "string",
            "nullable": true
          },
          "visiblityRequirement": {
            "$ref": "#/components/schemas/InputVisiblityRequirement"
          },
          "precision": {
            "type": "number",
            "format": "float"
          },
          "currentUnit": {
            "$ref": "#/components/schemas/NumberUnit"
          },
          "unitOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NumberUnit"
            },
            "nullable": true
          },
          "textType": {
            "type": "string",
            "nullable": true
          },
          "regexError": {
            "type": "string",
            "nullable": true
          },
          "regexErrorMsg": {
            "type": "string",
            "nullable": true
          },
          "valueOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "targetValueOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "allowCustomValueOptions": {
            "type": "boolean",
            "nullable": true
          },
          "isMultiSelect": {
            "type": "boolean"
          },
          "isObjectPairMapping": {
            "type": "boolean"
          },
          "isEnum": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ParameterOption": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "currentValue": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/ParameterOptionType"
          }
        },
        "additionalProperties": false
      },
      "ParameterOptionType": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "format": "int32"
      },
      "PluginRole": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "group": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PositionOffset": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "format": "double"
          },
          "y": {
            "type": "number",
            "format": "double"
          },
          "z": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "PythonScriptExecutionDescriptor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "threadId": {
            "type": "integer",
            "format": "int64"
          },
          "status": {
            "$ref": "#/components/schemas/PythonScriptExecutionStatus"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "exitCode": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          },
          "startedByUserId": {
            "type": "string",
            "nullable": true
          },
          "lineCount": {
            "type": "integer",
            "format": "int64"
          },
          "stdErrLineCount": {
            "type": "integer",
            "format": "int64"
          },
          "firstSequenceNumber": {
            "type": "integer",
            "format": "int64"
          },
          "lastSequenceNumber": {
            "type": "integer",
            "format": "int64"
          },
          "scriptSnapshot": {
            "$ref": "#/components/schemas/PythonScriptExecutionSnapshotDescriptor"
          }
        },
        "additionalProperties": false
      },
      "PythonScriptExecutionSnapshotDescriptor": {
        "type": "object",
        "properties": {
          "scriptId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "content": {
            "type": "string",
            "nullable": true
          },
          "parentFolderId": {
            "type": "string",
            "nullable": true
          },
          "version": {
            "type": "integer",
            "format": "int32"
          },
          "contentHash": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PythonScriptExecutionStatus": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "ReachableLocation": {
        "type": "object",
        "properties": {
          "locationId": {
            "type": "string",
            "nullable": true
          },
          "locationName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RemoveDeviceLocationResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "RemoveStorageDeviceColumnRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "storageDeviceId": {
            "type": "string",
            "nullable": true
          },
          "column": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "RemoveStorageDeviceColumnResponse": {
        "type": "object",
        "properties": {
          "storageDeviceDescriptor": {
            "$ref": "#/components/schemas/StorageDeviceDescriptor"
          }
        },
        "additionalProperties": false
      },
      "RenameItemRequest": {
        "type": "object",
        "properties": {
          "itemId": {
            "type": "string",
            "nullable": true
          },
          "newName": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/ItemType"
          }
        },
        "additionalProperties": false
      },
      "RevoWebDeviceInfo": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "groupNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isAvailable": {
            "type": "boolean"
          },
          "isUnitTestOnly": {
            "type": "boolean"
          },
          "allowedOrganisations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "allowedTenants": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "supportedModels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RevoWebScheduleOperationInfo": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "groupNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isAvailable": {
            "type": "boolean"
          },
          "isUnitTestOnly": {
            "type": "boolean"
          },
          "allowedOrganisations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "allowedTenants": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RfcOAuthPluginTokenResponse": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string",
            "nullable": true
          },
          "token_type": {
            "type": "string",
            "nullable": true
          },
          "expires_in": {
            "type": "integer",
            "format": "int32"
          },
          "refresh_token": {
            "type": "string",
            "nullable": true
          },
          "revo": {
            "$ref": "#/components/schemas/RfcOAuthRevoData"
          }
        },
        "additionalProperties": false
      },
      "RfcOAuthRevoData": {
        "type": "object",
        "properties": {
          "tenant": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/UserDto"
          },
          "roles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PluginRole"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RobotConfig": {
        "type": "object",
        "properties": {
          "locationPaths": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BaseWaypointLocationPath"
            },
            "nullable": true
          },
          "robotType": {
            "type": "string",
            "nullable": true
          },
          "isTeachModeActive": {
            "type": "boolean"
          },
          "gripperMovementMode": {
            "type": "string",
            "nullable": true
          },
          "reachableLocations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReachableLocation"
            },
            "nullable": true
          },
          "defaultGripperOpenClearance": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "RunDeviceOperationRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "deviceInstanceId": {
            "type": "string",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "nullable": true
          },
          "parameters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RunDeviceOperationResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "RunParameterValue": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RunParameterValueCollection": {
        "type": "object",
        "properties": {
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RunParameterValue"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RunSchedulesRequest": {
        "type": "object",
        "properties": {
          "simulationSpeed": {
            "type": "number",
            "format": "float"
          },
          "schedulesToRun": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SchedulesToRun"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RunTransferOperationRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "sourceName": {
            "type": "string",
            "nullable": true
          },
          "sourceType": {
            "type": "string",
            "nullable": true
          },
          "destinationName": {
            "type": "string",
            "nullable": true
          },
          "destinationType": {
            "type": "string",
            "nullable": true
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "readBarCode": {
            "type": "boolean"
          },
          "ignoreReadBarCodeFailure": {
            "type": "boolean"
          },
          "barCodeMismatchAction": {
            "type": "string",
            "nullable": true
          },
          "lidHandlerAction": {
            "type": "string",
            "nullable": true
          },
          "lidHandlerActionFailureAction": {
            "type": "string",
            "nullable": true
          },
          "claimTimeout": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RunTransferOperationResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "SaveScheduleErrorResponse": {
        "type": "object",
        "properties": {
          "nodeId": {
            "type": "string",
            "nullable": true
          },
          "propertyKey": {
            "type": "string",
            "nullable": true
          },
          "errorMsg": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveScheduleParametersRequest": {
        "type": "object",
        "properties": {
          "parameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleRunParameterDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveScheduleResponse": {
        "type": "object",
        "properties": {
          "hasWorkflowChanges": {
            "type": "boolean"
          },
          "replaceEntireWorkflow": {
            "type": "boolean"
          },
          "updatedWorkflowNodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleOperationDescriptor"
            },
            "nullable": true
          },
          "workflowValidationErrors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SaveScheduleErrorResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScheduleAction": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "ScheduleDescriptor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "pacingMode": {
            "type": "string",
            "nullable": true
          },
          "scheduleOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleOperationDescriptor"
            },
            "nullable": true
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "pacingTimeSeconds": {
            "type": "number",
            "format": "double"
          },
          "folderId": {
            "type": "string",
            "nullable": true
          },
          "suspendChildThreadStartOnError": {
            "type": "boolean"
          },
          "scheduleParameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleRunParameterDescriptor"
            },
            "nullable": true
          },
          "validationMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScheduleListItemDescriptor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScheduleOperationDescriptor": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "assemblyName": {
            "type": "string",
            "nullable": true
          },
          "assemblyFullPath": {
            "type": "string",
            "nullable": true
          },
          "typeName": {
            "type": "string",
            "nullable": true
          },
          "version": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "nullable": true
          },
          "parameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParameterDescriptor"
            },
            "nullable": true
          },
          "note": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "operationDescription": {
            "type": "string",
            "nullable": true
          },
          "validationMessage": {
            "type": "string",
            "nullable": true
          },
          "revoWebScheduleOperationInfo": {
            "$ref": "#/components/schemas/RevoWebScheduleOperationInfo"
          },
          "sequences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleOperationSequenceDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScheduleOperationSequenceDescriptor": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "assemblyName": {
            "type": "string",
            "nullable": true
          },
          "assemblyFullPath": {
            "type": "string",
            "nullable": true
          },
          "typeName": {
            "type": "string",
            "nullable": true
          },
          "version": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "nullable": true
          },
          "parameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParameterDescriptor"
            },
            "nullable": true
          },
          "note": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "operationDescription": {
            "type": "string",
            "nullable": true
          },
          "validationMessage": {
            "type": "string",
            "nullable": true
          },
          "revoWebScheduleOperationInfo": {
            "$ref": "#/components/schemas/RevoWebScheduleOperationInfo"
          },
          "sequences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleOperationSequenceDescriptor"
            },
            "nullable": true
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScheduleOperationDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScheduleRunParameterDescriptor": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "primitiveType": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScheduleStartMode": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "ScheduleStartSettings": {
        "type": "object",
        "properties": {
          "mode": {
            "$ref": "#/components/schemas/ScheduleStartMode"
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "predecessorScheduleThreadId": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "predecessorThreadIndex": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "useLastThread": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ScheduleStatus": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6
        ],
        "type": "integer",
        "format": "int32"
      },
      "ScheduleStatusInfo": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ScheduleStatus"
          },
          "scheduleName": {
            "type": "string",
            "nullable": true
          },
          "scheduleId": {
            "type": "string",
            "nullable": true
          },
          "scheduleThreadId": {
            "type": "integer",
            "format": "int64"
          },
          "startTime": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "SchedulesToRun": {
        "type": "object",
        "properties": {
          "scheduleId": {
            "type": "string",
            "nullable": true
          },
          "threadCount": {
            "type": "integer",
            "format": "int32"
          },
          "startSettings": {
            "$ref": "#/components/schemas/ScheduleStartSettings"
          },
          "runParameterValues": {
            "$ref": "#/components/schemas/RunParameterValueCollection"
          }
        },
        "additionalProperties": false
      },
      "ScriptLogChunkDescriptor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "executionId": {
            "type": "string",
            "nullable": true
          },
          "threadId": {
            "type": "integer",
            "format": "int64"
          },
          "firstSequenceNumber": {
            "type": "integer",
            "format": "int64"
          },
          "lastSequenceNumber": {
            "type": "integer",
            "format": "int64"
          },
          "lastCapturedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScriptLogLineDescriptor"
            },
            "nullable": true
          },
          "sequenceNumber": {
            "type": "integer",
            "format": "int64"
          },
          "capturedAt": {
            "type": "string",
            "format": "date-time"
          },
          "isStdErr": {
            "type": "boolean"
          },
          "line": {
            "type": "string",
            "nullable": true
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ScriptLogLineDescriptor": {
        "type": "object",
        "properties": {
          "sequenceNumber": {
            "type": "integer",
            "format": "int64"
          },
          "capturedAt": {
            "type": "string",
            "format": "date-time"
          },
          "isStdErr": {
            "type": "boolean"
          },
          "line": {
            "type": "string",
            "nullable": true
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetPositionsStoreRequest": {
        "type": "object",
        "properties": {
          "positionsToUpdate": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "storeId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ShelfConfig": {
        "type": "object",
        "properties": {
          "positions": {
            "type": "string",
            "nullable": true
          },
          "isBottomShelfPresent": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "StandardParams": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "format": "double"
          },
          "height": {
            "type": "number",
            "format": "double"
          },
          "length": {
            "type": "number",
            "format": "double"
          },
          "offset": {
            "$ref": "#/components/schemas/PositionOffset"
          }
        },
        "additionalProperties": false
      },
      "StorageDeviceColumnDescriptor": {
        "type": "object",
        "properties": {
          "columnNumber": {
            "type": "integer",
            "format": "int32"
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StoragePositionDescriptor"
            },
            "nullable": true
          },
          "isReversed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "StorageDeviceDescriptor": {
        "type": "object",
        "properties": {
          "deviceName": {
            "type": "string",
            "nullable": true
          },
          "deviceId": {
            "type": "string",
            "nullable": true
          },
          "deviceType": {
            "$ref": "#/components/schemas/StorageDeviceType"
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StorageDeviceColumnDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "StorageDeviceOverviewResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "slots": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "used": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "tempC": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "co2": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "rh": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "accessAvgSeconds": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "accessMinSeconds": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "accessMaxSeconds": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "throughputPerHour": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "errors24h": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "uptimePercent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "lastAccessedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "labwareMix": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "stores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StorageDeviceStorePlacementResponse"
            },
            "nullable": true
          },
          "occupancyTrend24h": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "StorageDeviceStorePlacementResponse": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "nullable": true
          },
          "slots": {
            "type": "integer",
            "format": "int32"
          },
          "used": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "StorageDeviceType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "StorageManagerOverviewResponse": {
        "type": "object",
        "properties": {
          "deviceOverviews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StorageDeviceOverviewResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "StoragePositionDescriptor": {
        "type": "object",
        "properties": {
          "positionId": {
            "type": "integer",
            "format": "int32"
          },
          "height": {
            "type": "number",
            "format": "double"
          },
          "storeId": {
            "type": "string",
            "nullable": true
          },
          "labwareId": {
            "type": "string",
            "nullable": true
          },
          "labwareInfo": {
            "$ref": "#/components/schemas/StoragePositionLabwareDescriptor"
          }
        },
        "additionalProperties": false
      },
      "StoragePositionLabwareDescriptor": {
        "type": "object",
        "properties": {
          "entityId": {
            "type": "string",
            "nullable": true
          },
          "barcode": {
            "type": "string",
            "nullable": true
          },
          "incubationDuration": {
            "type": "integer",
            "format": "int64"
          },
          "entryTime": {
            "type": "integer",
            "format": "int64"
          },
          "incubationTimeRemaining": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "StoreAreaDescriptor": {
        "type": "object",
        "properties": {
          "storeAreaId": {
            "type": "string",
            "nullable": true
          },
          "storeId": {
            "type": "string",
            "nullable": true
          },
          "storageDeviceId": {
            "type": "string",
            "nullable": true
          },
          "startPosition": {
            "type": "integer",
            "format": "int32"
          },
          "endPosition": {
            "type": "integer",
            "format": "int32"
          },
          "storageDeviceName": {
            "type": "string",
            "nullable": true
          },
          "storedObjectCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "StoreDescriptor": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "storeId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "defaultLabwareType": {
            "type": "string",
            "nullable": true
          },
          "storedObjectCount": {
            "type": "integer",
            "format": "int32"
          },
          "storeAreas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StoreAreaDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TargetLocation": {
        "type": "object",
        "properties": {
          "insertAfterNodeId": {
            "type": "string",
            "nullable": true
          },
          "containerId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TokenExchangeForm": {
        "type": "object",
        "properties": {
          "grant_type": {
            "type": "string",
            "nullable": true
          },
          "client_id": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "code_verifier": {
            "type": "string",
            "nullable": true
          },
          "client_assertion_type": {
            "type": "string",
            "nullable": true
          },
          "client_assertion": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceLocationRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "nullable": true
          },
          "attachToPartId": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "orientation": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          },
          "isHidden": {
            "type": "boolean"
          },
          "isTeachDisabled": {
            "type": "boolean"
          },
          "claimParentDevice": {
            "type": "boolean"
          },
          "deviceInstanceId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceLocationResponse": {
        "type": "object",
        "properties": {
          "location": {
            "$ref": "#/components/schemas/DeviceLocationDescriptor"
          }
        },
        "additionalProperties": false
      },
      "UpdateDevicePoolRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DevicePoolLocation"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "deviceInstanceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "properties": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "nullable": true
            },
            "nullable": true
          },
          "simulatorPosition": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceLocationDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateFrameworkBody": {
        "type": "object",
        "properties": {
          "framework": {
            "$ref": "#/components/schemas/FrameworkDescriptor"
          }
        },
        "additionalProperties": false
      },
      "UpdateLabwareRequest": {
        "type": "object",
        "properties": {
          "labware": {
            "$ref": "#/components/schemas/LabwareProperties"
          }
        },
        "additionalProperties": false
      },
      "UpdateLabwareResponse": {
        "type": "object",
        "properties": {
          "labware": {
            "$ref": "#/components/schemas/LabwareProperties"
          }
        },
        "additionalProperties": false
      },
      "UpdateOperationDescriptor": {
        "type": "object",
        "properties": {
          "operationToUpdate": {
            "$ref": "#/components/schemas/ScheduleOperationDescriptor"
          }
        },
        "additionalProperties": false
      },
      "UpdateReachableLocationsRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "deviceId": {
            "type": "string",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "UpdateReachableLocationsResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateScheduleOperationsRequest": {
        "type": "object",
        "properties": {
          "updates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UpdateOperationDescriptor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateSchedulePropertiesRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "scheduleId": {
            "type": "string",
            "nullable": true
          },
          "supportsCompressedSchedule": {
            "type": "boolean"
          },
          "pacingMode": {
            "type": "string",
            "nullable": true
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "pacingTimeSeconds": {
            "type": "number",
            "format": "double"
          },
          "suspendChildThreadStartOnError": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "UpdateStorageDeviceColumnRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "nullable": true
          },
          "tenantUuid": {
            "type": "string",
            "nullable": true
          },
          "storageDeviceId": {
            "type": "string",
            "nullable": true
          },
          "startPosition": {
            "type": "integer",
            "format": "int32"
          },
          "endPosition": {
            "type": "integer",
            "format": "int32"
          },
          "column": {
            "type": "integer",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "UpdateStorageDeviceColumnResponse": {
        "type": "object",
        "properties": {
          "storageDeviceDescriptor": {
            "$ref": "#/components/schemas/StorageDeviceDescriptor"
          }
        },
        "additionalProperties": false
      },
      "UpdateStoreResponse": {
        "type": "object",
        "properties": {
          "storeDescriptor": {
            "$ref": "#/components/schemas/StoreDescriptor"
          }
        },
        "additionalProperties": false
      },
      "UserDto": {
        "type": "object",
        "properties": {
          "firstname": {
            "type": "string",
            "nullable": true
          },
          "lastname": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "nickname": {
            "type": "string",
            "nullable": true
          },
          "mobileNumber": {
            "type": "string",
            "nullable": true
          },
          "icon": {
            "type": "string",
            "nullable": true
          },
          "userId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Vector3Object": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "format": "double"
          },
          "y": {
            "type": "number",
            "format": "double"
          },
          "z": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "WaypointParameters": {
        "type": "object",
        "properties": {
          "isSafeApproachPosition": {
            "type": "boolean"
          },
          "speedPercent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "railPosition": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "PluginBearer": {
        "type": "http",
        "description": "Plugin JWT obtained from POST /api/v1/{tenantId}/external-plugin/oauth/token (RFC 6749 authorization_code exchange with PKCE + private_key_jwt). The token is tenant-bound: it is only valid on routes for its own tenant.",
        "scheme": "Bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}