{
  "openapi": "3.1.0",
  "info": {
    "title": "MultiSpace Local API",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "http://127.0.0.1:{port}",
      "variables": {
        "port": {
          "default": "REPLACE_WITH_UI_PORT"
        }
      }
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "paths": {
    "/v1/command": {
      "post": {
        "summary": "Run a permitted local browser command",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "action": {
                        "const": "profiles.list"
                      }
                    },
                    "required": [
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string"
                      },
                      "action": {
                        "const": "profiles.create"
                      }
                    },
                    "required": [
                      "name",
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profileId": {
                        "type": "string"
                      },
                      "action": {
                        "const": "profiles.start"
                      }
                    },
                    "required": [
                      "profileId",
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profileId": {
                        "type": "string"
                      },
                      "action": {
                        "const": "profiles.stop"
                      }
                    },
                    "required": [
                      "profileId",
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profileId": {
                        "type": "string"
                      },
                      "action": {
                        "const": "pages.list"
                      }
                    },
                    "required": [
                      "profileId",
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profileId": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string"
                      },
                      "action": {
                        "const": "pages.open"
                      }
                    },
                    "required": [
                      "profileId",
                      "url",
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profileId": {
                        "type": "string"
                      },
                      "pageIndex": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "action": {
                        "const": "pages.read"
                      }
                    },
                    "required": [
                      "profileId",
                      "action"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profileId": {
                        "type": "string"
                      },
                      "pageIndex": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "action": {
                        "const": "pages.screenshot"
                      }
                    },
                    "required": [
                      "profileId",
                      "action"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON result"
          },
          "400": {
            "description": "Invalid or failed command"
          },
          "401": {
            "description": "Missing or invalid token"
          },
          "403": {
            "description": "Origin, Host or profile permission rejected"
          },
          "413": {
            "description": "Request too large"
          },
          "429": {
            "description": "Queue full"
          }
        }
      }
    }
  }
}