{
  "openapi": "3.0.0",
  "paths": {
    "/v1": {
      "get": {
        "operationId": "AppController_getHello",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "summary": "Health check",
        "tags": [
          "Health"
        ]
      }
    },
    "/v1/me": {
      "get": {
        "description": "Returns the signed-in account, organization, and the teams you can work in.",
        "operationId": "AccountController_getProfile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get current account",
        "tags": [
          "Account"
        ]
      }
    },
    "/v1/projects": {
      "get": {
        "operationId": "AccountProjectsController_getProjects",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List projects",
        "tags": [
          "Projects"
        ]
      },
      "post": {
        "operationId": "AccountProjectsController_createProject",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddProjectUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/overview": {
      "get": {
        "operationId": "AccountProjectsController_getProjectOverview",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "preset",
            "required": true,
            "in": "query",
            "schema": {
              "enum": [
                "last-7-days",
                "last-14-days",
                "last-30-days",
                "last-90-days"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get project overview",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/settings": {
      "get": {
        "operationId": "AccountProjectsController_getProjectSettings",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get project settings",
        "tags": [
          "Projects"
        ]
      },
      "patch": {
        "operationId": "AccountProjectsController_updateProjectSettings",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectSettingsUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update project settings",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/storage-usage": {
      "get": {
        "operationId": "AccountProjectsController_getProjectStorageUsage",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get storage usage",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}": {
      "patch": {
        "operationId": "AccountProjectsController_updateProject",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/integration-configs": {
      "patch": {
        "operationId": "AccountProjectsController_setIntegrationConfig",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetProjectIntegrationConfigUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update integration config",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/integrations/google_chat": {
      "post": {
        "operationId": "AccountProjectsController_connectGoogleChat",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectGoogleChatIntegrationUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Connect Google Chat",
        "tags": [
          "Projects"
        ]
      },
      "delete": {
        "operationId": "AccountProjectsController_disconnectGoogleChat",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Disconnect Google Chat",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/integrations/google_chat/test": {
      "post": {
        "operationId": "AccountProjectsController_testGoogleChat",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Test Google Chat",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/test-run-settings": {
      "patch": {
        "operationId": "AccountProjectsController_updateTestRunSettings",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectTestRunSettingsUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update run settings",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}/notification-settings": {
      "patch": {
        "operationId": "AccountProjectsController_updateNotificationSettings",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectNotificationSettingsUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update notification settings",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{projectId}/test-cases/import": {
      "post": {
        "operationId": "AccountTestCasesController_importTestCases",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The file to upload."
                  },
                  "teamId": {
                    "type": "string",
                    "description": "Team that owns the imported cases."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Import test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/projects/{projectId}/test-cases": {
      "post": {
        "operationId": "AccountTestCasesController_addTestCase",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTestCaseRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a test case",
        "tags": [
          "Test cases"
        ]
      },
      "get": {
        "operationId": "AccountTestCasesController_filterTestCases",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "severity",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "critical",
                "high",
                "medium",
                "low"
              ],
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "draft",
                "active",
                "inactive"
              ],
              "type": "string"
            }
          },
          {
            "name": "createdBy",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          },
          {
            "name": "offset",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/projects/{projectId}/test-cases/ungrouped": {
      "get": {
        "operationId": "AccountTestCasesController_getUngroupedTestCases",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          },
          {
            "name": "offset",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "severity",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "critical",
                "high",
                "medium",
                "low"
              ],
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "draft",
                "active",
                "inactive"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List ungrouped test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/bulk-activate": {
      "post": {
        "operationId": "AccountTestCasesController_bulkActivateTestCases",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkActivateTestCasesUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Activate test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/bulk-deactivate": {
      "post": {
        "operationId": "AccountTestCasesController_bulkDeactivateTestCases",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeactivateTestCasesUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Deactivate test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/bulk-delete": {
      "post": {
        "operationId": "AccountTestCasesController_bulkDeleteTestCases",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteTestCasesUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/bulk-move-to-suite": {
      "post": {
        "operationId": "AccountTestCasesController_moveTestCasesToSuite",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveTestCasesToSuiteUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Move test cases",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}": {
      "get": {
        "operationId": "AccountTestCasesController_getTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a test case",
        "tags": [
          "Test cases"
        ]
      },
      "put": {
        "operationId": "AccountTestCasesController_updateTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTestCaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a test case",
        "tags": [
          "Test cases"
        ]
      },
      "delete": {
        "operationId": "AccountTestCasesController_deleteTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a test case",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/activate": {
      "post": {
        "operationId": "AccountTestCasesController_activateTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Activate a test case",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/deactivate": {
      "post": {
        "operationId": "AccountTestCasesController_deactivateTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Deactivate a test case",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/results-history": {
      "get": {
        "operationId": "AccountTestCasesController_getTestCaseResultsHistory",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "environmentId",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List result history",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/duplicate": {
      "post": {
        "operationId": "AccountTestCasesController_duplicateTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Duplicate a test case",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/run": {
      "post": {
        "operationId": "AccountTestCasesController_runTestCase",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunTestCaseUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Run a test case",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/results/{resultId}": {
      "get": {
        "operationId": "AccountTestCasesController_getTestCaseResult",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a result",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/results/{resultId}/share": {
      "post": {
        "operationId": "AccountTestCasesController_enableTestCaseResultSharing",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Share a result",
        "tags": [
          "Test cases"
        ]
      },
      "delete": {
        "operationId": "AccountTestCasesController_disableTestCaseResultSharing",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unshare a result",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/results/{resultId}/approve-healing": {
      "post": {
        "operationId": "AccountTestCasesController_approveTestCaseHealing",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Approve healing",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/test-cases/{id}/results/{resultId}/dismiss-healing": {
      "post": {
        "operationId": "AccountTestCasesController_dismissTestCaseHealing",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Dismiss healing",
        "tags": [
          "Test cases"
        ]
      }
    },
    "/v1/projects/{projectId}/test-suites": {
      "post": {
        "operationId": "AccountTestSuitesController_addTestSuite",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTestSuiteRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a test suite",
        "tags": [
          "Test suites"
        ]
      },
      "get": {
        "operationId": "AccountTestSuitesController_filterTestSuites",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBy",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List test suites",
        "tags": [
          "Test suites"
        ]
      }
    },
    "/v1/projects/{projectId}/test-suites/details": {
      "get": {
        "operationId": "AccountTestSuitesController_getTestSuitesDetails",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamIdentifier",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectIdentifier",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List suite details",
        "tags": [
          "Test suites"
        ]
      }
    },
    "/v1/test-suites/{id}/run": {
      "post": {
        "operationId": "AccountTestSuitesController_runTestSuite",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunTestSuiteUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Run a test suite",
        "tags": [
          "Test suites"
        ]
      }
    },
    "/v1/test-suites/{id}": {
      "get": {
        "operationId": "AccountTestSuitesController_getTestSuite",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "description": "Free-text match against the test case name and description.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "severity",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "critical",
                "high",
                "medium",
                "low"
              ],
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "draft",
                "active",
                "inactive"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a test suite",
        "tags": [
          "Test suites"
        ]
      },
      "put": {
        "operationId": "AccountTestSuitesController_updateTestSuite",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTestSuiteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a test suite",
        "tags": [
          "Test suites"
        ]
      },
      "delete": {
        "operationId": "AccountTestSuitesController_deleteTestSuite",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a test suite",
        "tags": [
          "Test suites"
        ]
      }
    },
    "/v1/projects/{projectId}/test-runs": {
      "post": {
        "operationId": "AccountTestRunsController_createTestRun",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTestRunRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a run",
        "tags": [
          "Test runs"
        ]
      },
      "get": {
        "operationId": "AccountTestRunsController_filterTestRuns",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "testCaseId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "testCaseIds",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "testSuiteId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBy",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "pending",
                "queued",
                "running",
                "error",
                "failed",
                "completed",
                "stopping",
                "stopped"
              ],
              "type": "string"
            }
          },
          {
            "name": "statuses",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "pending",
                  "queued",
                  "running",
                  "error",
                  "failed",
                  "completed",
                  "stopping",
                  "stopped"
                ]
              }
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "required": false,
            "in": "query",
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "required": false,
            "in": "query",
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          },
          {
            "name": "offset",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List runs",
        "tags": [
          "Test runs"
        ]
      }
    },
    "/v1/test-runs/{id}/events": {
      "get": {
        "description": "Server-sent events for a live run. Response is not wrapped in `{ payload }`.",
        "operationId": "AccountTestRunsController_streamTestRunEvents",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Stream run events",
        "tags": [
          "Test runs"
        ]
      }
    },
    "/v1/test-runs/{id}": {
      "get": {
        "operationId": "AccountTestRunsController_getTestRun",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a run",
        "tags": [
          "Test runs"
        ]
      }
    },
    "/v1/test-runs/{id}/stop": {
      "post": {
        "operationId": "AccountTestRunsController_stopTestRun",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Stop a run",
        "tags": [
          "Test runs"
        ]
      }
    },
    "/v1/test-runs/{id}/share": {
      "post": {
        "operationId": "AccountTestRunsController_enableSharing",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Share a run",
        "tags": [
          "Test runs"
        ]
      },
      "delete": {
        "operationId": "AccountTestRunsController_disableSharing",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Unshare a run",
        "tags": [
          "Test runs"
        ]
      }
    },
    "/v1/test-runs/{id}/report/send": {
      "post": {
        "operationId": "AccountTestRunsController_sendReport",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Send a run report",
        "tags": [
          "Test runs"
        ]
      }
    },
    "/v1/projects/{projectId}/environments": {
      "post": {
        "operationId": "AccountEnvironmentsController_addEnvironment",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddEnvironmentRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create an environment",
        "tags": [
          "Environments"
        ]
      },
      "get": {
        "operationId": "AccountEnvironmentsController_filterEnvironments",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "baseUrl",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List environments",
        "tags": [
          "Environments"
        ]
      }
    },
    "/v1/environments/{id}": {
      "put": {
        "operationId": "AccountEnvironmentsController_updateEnvironment",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEnvironmentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update an environment",
        "tags": [
          "Environments"
        ]
      },
      "delete": {
        "operationId": "AccountEnvironmentsController_deleteEnvironment",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete an environment",
        "tags": [
          "Environments"
        ]
      }
    },
    "/v1/projects/{projectId}/tags": {
      "post": {
        "operationId": "AccountTagsController_addTag",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTagRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a tag",
        "tags": [
          "Tags"
        ]
      },
      "get": {
        "operationId": "AccountTagsController_filterTags",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List tags",
        "tags": [
          "Tags"
        ]
      }
    },
    "/v1/tags/{id}": {
      "put": {
        "operationId": "AccountTagsController_updateTag",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTagRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a tag",
        "tags": [
          "Tags"
        ]
      },
      "delete": {
        "operationId": "AccountTagsController_deleteTag",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a tag",
        "tags": [
          "Tags"
        ]
      }
    },
    "/v1/projects/{projectId}/assets/upload": {
      "post": {
        "operationId": "AccountAssetsController_uploadAsset",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The file to upload."
                  },
                  "replacingAssetId": {
                    "type": "string",
                    "description": "Optional existing asset to replace."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Upload an asset",
        "tags": [
          "Assets"
        ]
      }
    },
    "/v1/projects/{projectId}/assets": {
      "post": {
        "operationId": "AccountAssetsController_addAsset",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddAssetRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create an asset",
        "tags": [
          "Assets"
        ]
      },
      "get": {
        "operationId": "AccountAssetsController_filterAssets",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storageKey",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List assets",
        "tags": [
          "Assets"
        ]
      }
    },
    "/v1/assets/{id}": {
      "get": {
        "operationId": "AccountAssetsController_getAsset",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get an asset",
        "tags": [
          "Assets"
        ]
      },
      "put": {
        "operationId": "AccountAssetsController_updateAsset",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAssetRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update an asset",
        "tags": [
          "Assets"
        ]
      }
    },
    "/v1/assets/{id}/content": {
      "patch": {
        "operationId": "AccountAssetsController_replaceAssetContent",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceAssetContentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Replace asset content",
        "tags": [
          "Assets"
        ]
      }
    },
    "/v1/projects/{projectId}/test-accounts": {
      "post": {
        "operationId": "AccountTestAccountsController_addTestAccount",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTestAccountRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a test account",
        "tags": [
          "Test accounts"
        ]
      },
      "get": {
        "operationId": "AccountTestAccountsController_filterTestAccounts",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "required": false,
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "label",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "password",
                "google",
                "phone",
                "custom"
              ],
              "type": "string"
            }
          },
          {
            "name": "username",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List test accounts",
        "tags": [
          "Test accounts"
        ]
      }
    },
    "/v1/test-accounts/{id}": {
      "get": {
        "operationId": "AccountTestAccountsController_getTestAccount",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a test account",
        "tags": [
          "Test accounts"
        ]
      },
      "put": {
        "operationId": "AccountTestAccountsController_updateTestAccount",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTestAccountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a test account",
        "tags": [
          "Test accounts"
        ]
      },
      "delete": {
        "operationId": "AccountTestAccountsController_deleteTestAccount",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a test account",
        "tags": [
          "Test accounts"
        ]
      }
    },
    "/v1/organizations/{organizationId}/settings": {
      "get": {
        "operationId": "AccountOrganizationController_getSettings",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get organization settings",
        "tags": [
          "Organizations"
        ]
      },
      "patch": {
        "operationId": "AccountOrganizationController_updateSettings",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateOrgSettingsUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update organization settings",
        "tags": [
          "Organizations"
        ]
      }
    },
    "/v1/teams/{teamId}/integrations": {
      "get": {
        "operationId": "AccountIntegrationsController_list",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List integrations",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/teams/{teamId}/integrations/jira/projects": {
      "get": {
        "operationId": "AccountIntegrationsController_getJiraProjects",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List Jira projects",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/teams/{teamId}/integrations/slack/channels": {
      "get": {
        "operationId": "AccountIntegrationsController_getSlackChannels",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List Slack channels",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/teams/{teamId}/integrations/{key}/connect": {
      "post": {
        "operationId": "AccountIntegrationsController_connect",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectIntegrationRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Connect an integration",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/teams/{teamId}/integrations/{key}": {
      "delete": {
        "operationId": "AccountIntegrationsController_disconnect",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Disconnect an integration",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/integrations/{key}/callback": {
      "get": {
        "description": "Browser redirect target after Jira or Slack consent. No API token. Responds with 302.",
        "operationId": "IntegrationCallbackController_callback",
        "parameters": [
          {
            "name": "key",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "Integration OAuth callback",
        "tags": [
          "Integrations"
        ]
      }
    },
    "/v1/projects/{projectId}/bug-reports": {
      "post": {
        "operationId": "AccountBugReportsController_report",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReportBugRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a bug report",
        "tags": [
          "Bugs"
        ]
      }
    },
    "/v1/projects/{projectId}/bugs": {
      "get": {
        "operationId": "AccountBugsController_filterBugs",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "open",
                "reopened",
                "resolved"
              ],
              "type": "string"
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          },
          {
            "name": "offset",
            "required": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/Object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List bugs",
        "tags": [
          "Bugs"
        ]
      }
    },
    "/v1/bugs/{id}": {
      "get": {
        "operationId": "AccountBugsController_getBug",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a bug",
        "tags": [
          "Bugs"
        ]
      }
    },
    "/v1/bugs/{id}/resolve": {
      "post": {
        "operationId": "AccountBugsController_resolveBug",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Resolve a bug",
        "tags": [
          "Bugs"
        ]
      }
    },
    "/v1/bugs/{id}/reopen": {
      "post": {
        "operationId": "AccountBugsController_reopenBug",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Reopen a bug",
        "tags": [
          "Bugs"
        ]
      }
    },
    "/v1/bugs/{id}/report": {
      "post": {
        "operationId": "AccountBugsController_reportBug",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Report a finding",
        "tags": [
          "Bugs"
        ]
      }
    },
    "/v1/projects/{projectId}/mobile-builds/upload": {
      "post": {
        "description": "Stores the binary and registers it as a runnable build in one call. The app ID, version, and build number are read from the file. Returns the build; pass its `id` to a run.",
        "operationId": "AccountMobileBuildsController_uploadMobileBuild",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The file to upload."
                  },
                  "name": {
                    "type": "string",
                    "description": "Optional build name. Defaults to the app name in the binary."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MobileBuildPresenter"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Upload a new build",
        "tags": [
          "Mobile builds"
        ]
      }
    },
    "/v1/projects/{projectId}/mobile-builds": {
      "get": {
        "operationId": "AccountMobileBuildsController_filterMobileBuilds",
        "parameters": [
          {
            "name": "projectId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bundleId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "platform",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "ios",
                "android"
              ],
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "enum": [
                "ready",
                "archived"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MobileBuildPresenter"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List builds",
        "tags": [
          "Mobile builds"
        ]
      }
    },
    "/v1/mobile-builds/{id}": {
      "get": {
        "operationId": "AccountMobileBuildsController_getMobileBuild",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a build",
        "tags": [
          "Mobile builds"
        ]
      },
      "delete": {
        "operationId": "AccountMobileBuildsController_deleteMobileBuild",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a build",
        "tags": [
          "Mobile builds"
        ]
      }
    },
    "/v1/teams": {
      "post": {
        "operationId": "AccountCreateTeamController_createTeam",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTeamUsecaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a team",
        "tags": [
          "Teams"
        ]
      }
    },
    "/v1/teams/{teamId}/members": {
      "get": {
        "operationId": "TeamMemberController_list",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List team members",
        "tags": [
          "Team members"
        ]
      },
      "post": {
        "operationId": "TeamMemberController_add",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTeamMemberDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Add a team member",
        "tags": [
          "Team members"
        ]
      }
    },
    "/v1/teams/{teamId}/members/{accountId}": {
      "patch": {
        "operationId": "TeamMemberController_updateRole",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTeamMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a team member role",
        "tags": [
          "Team members"
        ]
      },
      "delete": {
        "operationId": "TeamMemberController_remove",
        "parameters": [
          {
            "name": "teamId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Remove a team member",
        "tags": [
          "Team members"
        ]
      }
    },
    "/v1/me/teams": {
      "get": {
        "operationId": "AccountTeamsController_list",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "Session"
        ]
      }
    },
    "/v1/upload/file": {
      "post": {
        "operationId": "UploadController_uploadFile",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The file to upload."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Upload a file",
        "tags": [
          "Uploads"
        ]
      }
    },
    "/v1/auth/signup": {
      "post": {
        "operationId": "AuthController_register",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignUpOrganizationUseCaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Create an organization",
        "tags": [
          "Auth"
        ]
      }
    },
    "/v1/auth/login": {
      "post": {
        "operationId": "AuthController_login",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginUserUseCaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Sign in",
        "tags": [
          "Auth"
        ]
      }
    },
    "/v1/auth/refresh": {
      "post": {
        "operationId": "AuthController_refreshToken",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshTokenDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Refresh session",
        "tags": [
          "Auth"
        ]
      }
    },
    "/v1/auth/otp/request": {
      "post": {
        "operationId": "AuthController_requestOtp",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestLoginOtpUseCaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Send login code",
        "tags": [
          "Auth"
        ]
      }
    },
    "/v1/auth/otp/login": {
      "post": {
        "operationId": "AuthController_loginWithOtp",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginWithOtpUseCaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Sign in with code",
        "tags": [
          "Auth"
        ]
      }
    },
    "/v1/auth/switch-team": {
      "post": {
        "operationId": "AuthController_switchTeam",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SwitchTeamDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Switch team",
        "tags": [
          "Auth",
          "Auth"
        ]
      }
    },
    "/v1/auth/cli/authorize": {
      "post": {
        "operationId": "CliAuthController_authorize",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizeCliUseCaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Approve CLI login",
        "tags": [
          "CLI auth",
          "CLI auth"
        ]
      }
    },
    "/v1/auth/cli/token": {
      "post": {
        "operationId": "CliAuthController_token",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExchangeCliCodeUseCaseInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Exchange CLI code",
        "tags": [
          "CLI auth"
        ]
      }
    },
    "/v1/me/api-tokens": {
      "post": {
        "description": "The plaintext token is returned once. It starts with `op_` and is sent as `Authorization: Bearer`.",
        "operationId": "MeApiTokensController_createToken",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePersonalApiTokenInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create API token",
        "tags": [
          "API tokens"
        ]
      },
      "get": {
        "operationId": "MeApiTokensController_listTokens",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List API tokens",
        "tags": [
          "API tokens"
        ]
      }
    },
    "/v1/me/api-tokens/{id}": {
      "patch": {
        "operationId": "MeApiTokensController_updateToken",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePersonalApiTokenInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update an API token",
        "tags": [
          "API tokens"
        ]
      },
      "delete": {
        "operationId": "MeApiTokensController_revokeToken",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Revoke an API token",
        "tags": [
          "API tokens"
        ]
      }
    },
    "/mcp": {
      "get": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_get",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "post": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "put": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_put",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "delete": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_delete",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "patch": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_patch",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "options": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_options",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "head": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_head",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      },
      "search": {
        "description": "JSON-RPC for AI clients. Authorize with an OAuth access token, not a personal API token. Not wrapped in `{ payload }`. See Coding Agents → MCP.",
        "operationId": "McpController_handle_search",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "mcpOAuth": []
          }
        ],
        "summary": "Hosted MCP",
        "tags": [
          "MCP"
        ]
      }
    },
    "/.well-known/oauth-protected-resource": {
      "get": {
        "operationId": "McpDiscoveryController_resource[0]",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "MCP resource metadata",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/.well-known/oauth-protected-resource/mcp": {
      "get": {
        "operationId": "McpDiscoveryController_resource[1]",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "MCP resource metadata",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/.well-known/oauth-authorization-server": {
      "get": {
        "operationId": "OAuthController_metadata",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth server metadata",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/oauth/register": {
      "post": {
        "operationId": "OAuthController_register",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Register OAuth client",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/oauth/authorize": {
      "get": {
        "operationId": "OAuthController_authorize",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "summary": "Start OAuth",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/oauth/token": {
      "post": {
        "operationId": "OAuthController_token",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Exchange OAuth token",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/oauth/revoke": {
      "post": {
        "operationId": "OAuthController_revoke",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Revoke OAuth token",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/oauth/request": {
      "get": {
        "operationId": "OAuthController_details",
        "parameters": [
          {
            "name": "request",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Load OAuth consent",
        "tags": [
          "OAuth",
          "OAuth"
        ]
      }
    },
    "/oauth/consent": {
      "post": {
        "operationId": "OAuthController_consent",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OAuthConsentDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Approve or deny OAuth",
        "tags": [
          "OAuth",
          "OAuth"
        ]
      }
    },
    "/oauth/{operation}": {
      "get": {
        "operationId": "OAuthController_options_get",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "post": {
        "operationId": "OAuthController_options_post",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "put": {
        "operationId": "OAuthController_options_put",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "delete": {
        "operationId": "OAuthController_options_delete",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "patch": {
        "operationId": "OAuthController_options_patch",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "options": {
        "operationId": "OAuthController_options_options",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "head": {
        "operationId": "OAuthController_options_head",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      },
      "search": {
        "operationId": "OAuthController_options_search",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "OAuth CORS preflight",
        "tags": [
          "OAuth"
        ]
      }
    },
    "/v1/organizations/{organizationId}/invitations": {
      "post": {
        "operationId": "OrganizationInvitationController_create",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateInvitationDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create an invitation",
        "tags": [
          "Invitations"
        ]
      },
      "get": {
        "operationId": "OrganizationInvitationController_list",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List invitations",
        "tags": [
          "Invitations"
        ]
      }
    },
    "/v1/organizations/{organizationId}/invitations/{id}": {
      "delete": {
        "operationId": "OrganizationInvitationController_revoke",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Revoke an invitation",
        "tags": [
          "Invitations"
        ]
      }
    },
    "/v1/invitations/{token}": {
      "get": {
        "operationId": "InvitationController_preview",
        "parameters": [
          {
            "name": "token",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "Preview invitation",
        "tags": [
          "Invitations"
        ]
      }
    },
    "/v1/invitations/{token}/accept": {
      "post": {
        "description": "Bearer token is optional. Signed-in accept attaches the invite to the current user.",
        "operationId": "InvitationController_accept",
        "parameters": [
          {
            "name": "token",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AcceptInvitationDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Accept invitation",
        "tags": [
          "Invitations"
        ]
      }
    },
    "/v1/shared/test-results/{token}": {
      "get": {
        "operationId": "PublicTestCaseResultController_getSharedTestCaseResult",
        "parameters": [
          {
            "name": "token",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "Get shared result",
        "tags": [
          "Shared reports"
        ]
      }
    },
    "/v1/shared/test-runs/{token}": {
      "get": {
        "operationId": "PublicTestRunController_getSharedTestRunReport",
        "parameters": [
          {
            "name": "token",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "summary": "Get shared run",
        "tags": [
          "Shared reports"
        ]
      }
    },
    "/v1/organizations/{organizationId}/billing/plans": {
      "get": {
        "operationId": "BillingController_getPlans",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List billing plans",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/organizations/{organizationId}/billing/checkout": {
      "post": {
        "operationId": "BillingController_createCheckout",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCheckoutDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create checkout",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/organizations/{organizationId}/billing/portal": {
      "post": {
        "operationId": "BillingController_createPortal",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePortalDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Open billing portal",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/organizations/{organizationId}/billing/cancel-scheduled-downgrade": {
      "post": {
        "operationId": "BillingController_cancelScheduledDowngrade",
        "parameters": [
          {
            "name": "organizationId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          },
          "401": {
            "description": "Missing or invalid Authorization bearer token."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Cancel scheduled downgrade",
        "tags": [
          "Billing"
        ]
      }
    },
    "/v1/billing/webhook": {
      "post": {
        "description": "Verified with the Stripe-Signature header against the raw request body. Not a `{ payload }` JSON wrapper concern for clients.",
        "operationId": "BillingWebhookController_handleWebhook",
        "parameters": [
          {
            "name": "stripe-signature",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "Stripe webhook",
        "tags": [
          "Webhooks"
        ]
      }
    }
  },
  "info": {
    "title": "Operio API",
    "description": "HTTP API for Operio — create projects, write tests, run them, and inspect results.\n\nMost JSON responses are wrapped as `{ \"payload\": ... }`. Streaming (SSE), OAuth redirects, file callbacks, and MCP are not wrapped.\n\nAuthenticate account and project routes with `Authorization: Bearer <token>`. The token may be:\n\n- a session JWT from `POST /v1/auth/login`, OTP login, or refresh\n- a personal API token from `POST /v1/me/api-tokens` (tokens start with `op_`)\n\nHosted MCP uses OAuth 2.1 instead of personal API tokens. See the MCP docs in Coding Agents.\n\nThe public API reference covers a subset of AccountModule routes. This spec still lists every HTTP route the API serves.",
    "version": "0.2.2",
    "contact": {}
  },
  "tags": [
    {
      "name": "Account",
      "description": "Current account profile."
    },
    {
      "name": "Projects",
      "description": "Projects owned by the authenticated account."
    },
    {
      "name": "Test cases",
      "description": "Test cases in a project."
    },
    {
      "name": "Test suites",
      "description": "Suites that group test cases."
    },
    {
      "name": "Test runs",
      "description": "Start, inspect, share, and stop runs."
    },
    {
      "name": "Environments",
      "description": "Web environment URLs for a project."
    },
    {
      "name": "Tags",
      "description": "Labels for organizing test cases."
    },
    {
      "name": "Assets",
      "description": "Files referenced from test steps."
    },
    {
      "name": "Test accounts",
      "description": "Test accounts a project can use to sign in during a run."
    },
    {
      "name": "Mobile builds",
      "description": "iOS and Android binaries for mobile projects."
    },
    {
      "name": "Integrations",
      "description": "Jira, Slack, and Google Chat connections."
    },
    {
      "name": "Bugs",
      "description": "Findings from runs and how they are reported."
    },
    {
      "name": "Organizations",
      "description": "Organization settings for the current account."
    },
    {
      "name": "Teams",
      "description": "Create a team on the current account."
    },
    {
      "name": "Session",
      "description": "Session-scoped team listing."
    },
    {
      "name": "Health",
      "description": "Process health."
    },
    {
      "name": "API tokens",
      "description": "Personal API tokens for the current account."
    },
    {
      "name": "CLI auth",
      "description": "Browser consent and token exchange for the Operio CLI."
    },
    {
      "name": "Team members",
      "description": "Membership of a team."
    },
    {
      "name": "Invitations",
      "description": "Organization invitations."
    },
    {
      "name": "Billing",
      "description": "Plans, checkout, and the customer portal."
    },
    {
      "name": "Webhooks",
      "description": "Incoming provider webhooks."
    },
    {
      "name": "Uploads",
      "description": "Generic file upload."
    },
    {
      "name": "Shared reports",
      "description": "Public links to shared runs and results."
    },
    {
      "name": "OAuth",
      "description": "OAuth 2.1 endpoints for MCP and related clients."
    },
    {
      "name": "MCP",
      "description": "Hosted Model Context Protocol endpoint."
    }
  ],
  "servers": [
    {
      "url": "https://api.operio.run",
      "description": "Production"
    },
    {
      "url": "http://localhost:4000",
      "description": "Local development"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearer": {
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "type": "http",
        "description": "Session JWT or personal API token (`op_...`). Same header for both."
      },
      "mcpOAuth": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.operio.run/oauth/authorize",
            "tokenUrl": "https://api.operio.run/oauth/token",
            "scopes": {
              "mcp:read": "Inspect projects, tests, environments, and results.",
              "mcp:write": "Create or change data and start runs."
            }
          }
        },
        "description": "OAuth used by the hosted MCP server and MCP clients."
      }
    },
    "schemas": {
      "AddProjectUsecaseInput": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string",
            "description": "Team to create the project in. Defaults to the account's first team.\n\nCallers that track a selected team — the CLI, for one — must be able to\nname it, otherwise the project silently lands somewhere the caller is not\nlooking and their own project list comes back empty."
          },
          "name": {
            "type": "string",
            "pattern": "/^[a-zA-Z0-9]+(?: [a-zA-Z0-9]+)*$/"
          },
          "description": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "web",
              "mobile"
            ]
          },
          "baseUrl": {
            "type": "string",
            "description": "Required for web projects. Used to create the project's production\nenvironment. Mobile projects have no environments."
          }
        },
        "required": [
          "name",
          "type"
        ]
      },
      "UpdateProjectSettingsUsecaseInput": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          },
          "identifier": {
            "type": "string",
            "maxLength": 32,
            "pattern": "/^[a-zA-Z0-9]+$/"
          }
        },
        "required": [
          "teamId",
          "identifier"
        ]
      },
      "UpdateProjectRequest": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "pattern": "/^[a-zA-Z0-9]+(?: [a-zA-Z0-9]+)*$/"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "teamId"
        ]
      },
      "SetProjectIntegrationConfigUsecaseInput": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "description": "IntegrationType key, e.g. 'jira'"
          },
          "config": {
            "type": "object"
          }
        },
        "required": [
          "teamId",
          "type",
          "config"
        ]
      },
      "ConnectGoogleChatIntegrationUsecaseInput": {
        "type": "object",
        "properties": {
          "webhookUrl": {
            "type": "string",
            "maxLength": 2048
          }
        },
        "required": [
          "webhookUrl"
        ]
      },
      "UpdateProjectTestRunSettingsUsecaseInput": {
        "type": "object",
        "properties": {
          "reportRecipients": {
            "description": "Full replacement list; omit to leave the current recipients untouched.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "shareReportByDefault": {
            "type": "boolean"
          }
        }
      },
      "UpdateProjectNotificationSettingsUsecaseInput": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Master mute for all failure alerts. Omit to leave unchanged."
          },
          "slackEnabled": {
            "type": "boolean"
          },
          "googleChatEnabled": {
            "type": "boolean"
          },
          "emailEnabled": {
            "type": "boolean"
          },
          "alertRecipients": {
            "description": "Full replacement list; omit to leave the current recipients untouched.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          }
        }
      },
      "TestStepDto": {
        "type": "object",
        "properties": {
          "order": {
            "type": "number",
            "minimum": 1
          },
          "type": {
            "type": "string",
            "enum": [
              "action",
              "verify",
              "shared-steps",
              "wait",
              "screenshot",
              "login"
            ]
          },
          "instruction": {
            "type": "string"
          },
          "assertion": {
            "type": "string"
          },
          "seconds": {
            "type": "number",
            "minimum": 1,
            "maximum": 180
          },
          "label": {
            "type": "string"
          },
          "testAccountId": {
            "type": "string"
          },
          "sharedStepsId": {
            "type": "string"
          }
        },
        "required": [
          "order",
          "type"
        ]
      },
      "AddTestCaseRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "severity": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TestStepDto"
            }
          },
          "tagIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "enum": [
              "draft",
              "active",
              "inactive"
            ],
            "type": "string"
          },
          "testSuiteIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "name"
        ]
      },
      "Object": {
        "type": "object",
        "properties": {}
      },
      "BulkActivateTestCasesUsecaseInput": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "BulkDeactivateTestCasesUsecaseInput": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "BulkDeleteTestCasesUsecaseInput": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "ids"
        ]
      },
      "MoveTestCasesToSuiteUsecaseInput": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "targetSuiteId": {
            "type": "string",
            "nullable": true,
            "description": "Target suite, or null/omitted to leave the test cases ungrouped."
          }
        },
        "required": [
          "ids"
        ]
      },
      "UpdateTestCaseRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "status": {
            "enum": [
              "draft",
              "active",
              "inactive"
            ],
            "type": "string"
          },
          "severity": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TestStepDto"
            }
          },
          "tagIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "testSuiteIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "RunTestCaseUsecaseInput": {
        "type": "object",
        "properties": {
          "environmentId": {
            "type": "string",
            "description": "Required for web projects; mobile runs install a build instead."
          },
          "mobileBuildId": {
            "type": "string",
            "description": "Required for mobile projects; the run installs this exact project build."
          }
        }
      },
      "TestSuiteExecutionConfigInput": {
        "type": "object",
        "properties": {
          "orderStrategy": {
            "type": "string",
            "enum": [
              "suite_order",
              "severity_order"
            ]
          },
          "executionMode": {
            "type": "string",
            "enum": [
              "sequential",
              "parallel"
            ]
          },
          "startFrom": {
            "type": "string",
            "enum": [
              "start",
              "previous_test_case"
            ],
            "description": "Where each test case begins. `start` opens the environment start URL (web) or relaunches the app (mobile); `previous_test_case` continues from where the previous case ended."
          },
          "preparationTestCaseId": {
            "type": "string",
            "nullable": true,
            "description": "`null` clears the preparation test case."
          }
        }
      },
      "AddTestSuiteRequest": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "testCaseIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "priority": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "executionConfig": {
            "$ref": "#/components/schemas/TestSuiteExecutionConfigInput"
          }
        },
        "required": [
          "teamId",
          "name"
        ]
      },
      "RunTestSuiteUsecaseInput": {
        "type": "object",
        "properties": {
          "environmentId": {
            "type": "string",
            "description": "Required for web projects; mobile runs install a build instead."
          },
          "mobileBuildId": {
            "type": "string",
            "description": "Required for mobile projects; the run installs this exact project build."
          }
        }
      },
      "UpdateTestSuiteRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "testCaseIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "priority": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "executionConfig": {
            "$ref": "#/components/schemas/TestSuiteExecutionConfigInput"
          }
        }
      },
      "CreateTestRunRequest": {
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "scripted",
              "exploratory"
            ],
            "type": "string"
          },
          "testCaseIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "goal": {
            "type": "string"
          },
          "environmentId": {
            "type": "string",
            "description": "Required for web projects; mobile runs install a build instead."
          },
          "name": {
            "type": "string"
          },
          "mobileBuildId": {
            "type": "string",
            "description": "Required for mobile projects; the run installs this exact project build."
          }
        }
      },
      "AddEnvironmentRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "baseUrl": {
            "type": "string",
            "description": "Required because environments are web-only URL targets."
          },
          "platform": {
            "description": "Optional legacy discriminator; only web is accepted.",
            "enum": [
              "web",
              "ios",
              "android"
            ],
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "UpdateEnvironmentRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "baseUrl": {
            "type": "string"
          }
        }
      },
      "AddTagRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "UpdateTagRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string"
          }
        }
      },
      "AddAssetRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "storageKey": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "size": {
            "type": "number"
          }
        },
        "required": [
          "name",
          "storageKey",
          "category"
        ]
      },
      "UpdateAssetRequest": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "storageKey": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "size": {
            "type": "number"
          }
        }
      },
      "ReplaceAssetContentRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "storageKey": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "size": {
            "type": "number"
          }
        },
        "required": [
          "storageKey",
          "category"
        ]
      },
      "AddTestAccountRequest": {
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "password",
              "google",
              "phone",
              "custom"
            ],
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "loginInstructions": {
            "type": "string"
          }
        },
        "required": [
          "label"
        ]
      },
      "UpdateTestAccountRequest": {
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "password",
              "google",
              "phone",
              "custom"
            ],
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "loginInstructions": {
            "type": "string"
          }
        }
      },
      "UpdateOrgSettingsUsecaseInput": {
        "type": "object",
        "properties": {}
      },
      "ConnectIntegrationRequest": {
        "type": "object",
        "properties": {
          "returnTo": {
            "type": "string"
          }
        },
        "required": [
          "returnTo"
        ]
      },
      "ReportBugRequest": {
        "type": "object",
        "properties": {
          "testCaseResultId": {
            "type": "string"
          },
          "teamId": {
            "type": "string"
          }
        },
        "required": [
          "testCaseResultId",
          "teamId"
        ]
      },
      "AddMobileBuildRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "artifactType": {
            "enum": [
              "simulator_app_zip",
              "ipa",
              "apk",
              "aab"
            ],
            "type": "string"
          },
          "bundleId": {
            "type": "string",
            "description": "App id the agent opens on the device, e.g. com.example.app."
          },
          "url": {
            "type": "string"
          },
          "storageKey": {
            "type": "string"
          },
          "iconKey": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "buildNumber": {
            "type": "string"
          },
          "size": {
            "type": "number"
          },
          "metadata": {
            "$ref": "#/components/schemas/MobileBuildMetadataInput"
          }
        },
        "required": [
          "name",
          "artifactType",
          "bundleId",
          "storageKey"
        ]
      },
      "AddTeamUsecaseInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "identifier": {
            "type": "string",
            "pattern": "/^[A-Z0-9]{2,32}$/"
          }
        },
        "required": [
          "name",
          "identifier"
        ]
      },
      "AddTeamMemberDto": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "user"
            ]
          }
        },
        "required": [
          "accountId",
          "role"
        ]
      },
      "UpdateTeamMemberDto": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "user"
            ]
          }
        },
        "required": [
          "role"
        ]
      },
      "SignUpOrganizationUseCaseInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "password": {
            "type": "string",
            "minLength": 6
          },
          "organizationName": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "password",
          "organizationName"
        ]
      },
      "LoginUserUseCaseInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "password": {
            "type": "string",
            "minLength": 6
          }
        },
        "required": [
          "email",
          "password"
        ]
      },
      "RefreshTokenDto": {
        "type": "object",
        "properties": {
          "refreshToken": {
            "type": "string"
          }
        },
        "required": [
          "refreshToken"
        ]
      },
      "RequestLoginOtpUseCaseInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          }
        },
        "required": [
          "email"
        ]
      },
      "LoginWithOtpUseCaseInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "code": {
            "type": "string",
            "minLength": 6,
            "maxLength": 6
          }
        },
        "required": [
          "email",
          "code"
        ]
      },
      "SwitchTeamDto": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          }
        },
        "required": [
          "teamId"
        ]
      },
      "AuthorizeCliUseCaseInput": {
        "type": "object",
        "properties": {
          "redirectUri": {
            "type": "string"
          },
          "codeChallenge": {
            "type": "string"
          },
          "codeChallengeMethod": {
            "type": "string",
            "enum": [
              "S256"
            ]
          }
        },
        "required": [
          "redirectUri",
          "codeChallenge",
          "codeChallengeMethod"
        ]
      },
      "ExchangeCliCodeUseCaseInput": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "codeVerifier": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "codeVerifier"
        ]
      },
      "CreatePersonalApiTokenInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "pattern": "/\\S/"
          },
          "expiresInDays": {
            "type": "number",
            "enum": [
              7,
              30,
              60,
              90,
              365
            ]
          },
          "expiresAt": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "UpdatePersonalApiTokenInput": {
        "type": "object",
        "properties": {
          "disabled": {
            "type": "boolean"
          }
        },
        "required": [
          "disabled"
        ]
      },
      "OAuthConsentDto": {
        "type": "object",
        "properties": {
          "request": {
            "type": "string"
          },
          "confirmation": {
            "type": "string"
          },
          "decision": {
            "type": "string",
            "enum": [
              "allow",
              "deny"
            ]
          }
        },
        "required": [
          "request",
          "confirmation",
          "decision"
        ]
      },
      "TeamAssignmentInputDto": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "user"
            ]
          }
        },
        "required": [
          "teamId",
          "role"
        ]
      },
      "CreateInvitationDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "orgRole": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member"
            ]
          },
          "teamAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamAssignmentInputDto"
            }
          }
        },
        "required": [
          "email"
        ]
      },
      "AcceptInvitationDto": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string",
            "description": "Required only when the invitation email does not yet have a User account.",
            "minLength": 8
          }
        }
      },
      "CreateCheckoutDto": {
        "type": "object",
        "properties": {
          "planSlug": {
            "type": "string",
            "description": "Plan slug to subscribe to (resolved to a Stripe price via the Plan document)."
          },
          "billingInterval": {
            "type": "string",
            "enum": [
              "monthly",
              "yearly"
            ]
          },
          "successPath": {
            "type": "string",
            "description": "Optional path (relative to frontendUrl) to return to after a successful checkout."
          },
          "cancelPath": {
            "type": "string",
            "description": "Optional path (relative to frontendUrl) to return to if checkout is cancelled."
          }
        },
        "required": [
          "planSlug",
          "billingInterval"
        ]
      },
      "CreatePortalDto": {
        "type": "object",
        "properties": {
          "returnPath": {
            "type": "string",
            "description": "Optional path (relative to frontendUrl) to return to after leaving the portal."
          }
        }
      },
      "GetProjectOverviewQuery": {
        "type": "object",
        "properties": {
          "preset": {
            "enum": [
              "last-7-days",
              "last-14-days",
              "last-30-days",
              "last-90-days"
            ],
            "type": "string"
          }
        },
        "required": [
          "preset"
        ]
      },
      "UploadAssetRequest": {
        "type": "object",
        "properties": {
          "replacingAssetId": {
            "type": "string"
          }
        }
      },
      "ImportTestCasesRequest": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          }
        },
        "required": [
          "teamId"
        ]
      },
      "GetUngroupedTestCasesQuery": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "object",
            "default": 100,
            "minimum": 1,
            "maximum": 200
          },
          "offset": {
            "type": "object",
            "default": 0,
            "minimum": 0
          },
          "name": {
            "type": "string"
          },
          "severity": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "status": {
            "enum": [
              "draft",
              "active",
              "inactive"
            ],
            "type": "string"
          }
        },
        "required": [
          "limit",
          "offset"
        ]
      },
      "GetTestSuiteQuery": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Free-text match against the test case name and description."
          },
          "severity": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "status": {
            "enum": [
              "draft",
              "active",
              "inactive"
            ],
            "type": "string"
          }
        }
      },
      "UploadMobileBuildRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Defaults to the app name read from the binary."
          }
        }
      },
      "MobileBuildMetadataInput": {
        "type": "object",
        "properties": {
          "limrun": {
            "$ref": "#/components/schemas/LimrunMobileBuildMetadataInput"
          }
        }
      },
      "LimrunMobileBuildMetadataInput": {
        "type": "object",
        "properties": {
          "assetId": {
            "type": "string"
          },
          "assetName": {
            "type": "string"
          },
          "md5": {
            "type": "string"
          }
        },
        "required": [
          "assetId",
          "assetName",
          "md5"
        ]
      },
      "MobileBuildPresenter": {
        "type": "object",
        "properties": {}
      }
    }
  }
}
