{"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/organizations/{organizationId}/audit-logs":{"get":{"operationId":"AuditLogController_list","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Opaque `nextCursor` from the previous page.","schema":{"maxLength":256,"type":"string"}},{"name":"from","required":false,"in":"query","description":"Inclusive lower bound (ISO 8601).","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"Exclusive upper bound (ISO 8601).","schema":{"type":"string"}},{"name":"actorId","required":false,"in":"query","schema":{"maxLength":128,"type":"string"}},{"name":"action","required":false,"in":"query","schema":{"maxLength":128,"pattern":"/^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_.]*$/","type":"string"}},{"name":"resourceType","required":false,"in":"query","schema":{"maxLength":64,"pattern":"/^[a-z][a-z0-9_]*$/","type":"string"}},{"name":"resourceId","required":false,"in":"query","schema":{"maxLength":256,"type":"string"}},{"name":"actorType","required":false,"in":"query","schema":{"enum":["user","system","service"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"List audit log entries, newest first","tags":["Audit logs"]}},"/v1/organizations/{organizationId}/audit-logs/actions":{"get":{"operationId":"AuditLogController_actions","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"List filterable audit actions","tags":["Audit logs"]}},"/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"]},"patch":{"description":"Updates your display name, shared across all organizations.","operationId":"AccountController_updateProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountProfileInput"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Update current account","tags":["Account"]}},"/v1/projects":{"get":{"operationId":"AccountProjectsController_getProjects","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectPresenter"}}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseDetailsPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseDetailsPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseDetailsPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseDetailsPresenter"}}}},"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":{"$ref":"#/components/schemas/TestCaseResultPresenter"}}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseDetailsPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestRunPresenter"}}}},"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":{"$ref":"#/components/schemas/TestCaseResultPresenter"}}}},"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":{"$ref":"#/components/schemas/TestCaseResultPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSuitePresenter"}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestSuitePresenter"}}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestSuitePresenter"}}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"List suite details","tags":["Test suites"]}},"/v1/projects/{projectId}/test-suites/summary":{"get":{"operationId":"AccountTestSuitesController_getTestSuitesSummary","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Suite navigation summary: suites with member counts plus the project's\nall-tests and ungrouped totals","tags":["Test suites"]}},"/v1/projects/{projectId}/test-suites/schedules":{"get":{"operationId":"AccountTestSuitesController_listTestSuiteSchedules","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestSuiteSchedulePresenter"}}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"List suite schedules: which suites in the project run on their own, and when","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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestRunPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Run a test suite","tags":["Test suites"]}},"/v1/test-suites/{id}/schedule":{"get":{"operationId":"AccountTestSuitesController_getTestSuiteSchedule","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSuiteSchedulePresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Get a suite's schedule, or null when it only runs by hand","tags":["Test suites"]},"put":{"operationId":"AccountTestSuitesController_saveTestSuiteSchedule","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveTestSuiteScheduleUsecaseInput"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSuiteSchedulePresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Create or replace a suite's schedule. Each scheduled run uses the suite's\ncurrent test cases.","tags":["Test suites"]},"delete":{"operationId":"AccountTestSuitesController_deleteTestSuiteSchedule","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 suite's schedule","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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSuitePresenter"}}}},"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/exploratory-goal":{"post":{"operationId":"AccountTestRunsController_transcribeExploratoryGoal","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."}}}}}},"responses":{"201":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Transcribe an exploratory run goal","tags":["Test runs"]}},"/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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestRunPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestRunPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestRunPresenter"}}}},"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/test-runs/{id}/results/{resultId}/share":{"post":{"operationId":"AccountTestRunsController_enableResultSharing","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":[]}],"tags":["Test runs"]},"delete":{"operationId":"AccountTestRunsController_disableResultSharing","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":[]}],"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentPresenter"}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentPresenter"}}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPresenter"}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagPresenter"}}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetPresenter"}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetPresenter"}}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAccountPresenter"}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestAccountPresenter"}}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAccountPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAccountPresenter"}}}},"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/azure_devops/connect":{"post":{"operationId":"AccountIntegrationsController_connectAzureDevOps","parameters":[{"name":"teamId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectAzureDevOpsUsecaseInput"}}}},"responses":{"201":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"tags":["Integrations"]}},"/v1/teams/{teamId}/integrations/azure_devops/projects":{"get":{"operationId":"AccountIntegrationsController_azureProjects","parameters":[{"name":"teamId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"tags":["Integrations"]}},"/v1/teams/{teamId}/integrations/azure_devops/projects/{project}/work-item-types":{"get":{"operationId":"AccountIntegrationsController_azureTypes","parameters":[{"name":"teamId","required":true,"in":"path","schema":{"type":"string"}},{"name":"project","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"tags":["Integrations"]}},"/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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationPresenter"}}}}},"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, Slack, or Azure DevOps consent. No API token. Responds with 302.","operationId":"IntegrationCallbackController_callback","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}},{"name":"code","required":false,"in":"query","schema":{"type":"string"}},{"name":"error","required":false,"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","false_positive"],"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"environmentId","required":false,"in":"query","schema":{"type":"string"}},{"name":"platform","required":false,"in":"query","schema":{"enum":["web","ios","android"],"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/projects/{projectId}/bugs/stats":{"get":{"operationId":"AccountBugsController_getBugStats","parameters":[{"name":"projectId","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 bug stats for a project","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}/recording":{"get":{"operationId":"AccountBugsController_getBugRecording","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 the recording of the latest run that found a bug","tags":["Bugs"]}},"/v1/bugs/{id}/share":{"post":{"operationId":"AccountBugsController_enableBugSharing","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 bug","tags":["Bugs"]},"delete":{"operationId":"AccountBugsController_disableBugSharing","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 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":{"$ref":"#/components/schemas/FindingPresenter"}}}},"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":{"$ref":"#/components/schemas/FindingPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Reopen a bug","tags":["Bugs"]}},"/v1/bugs/{id}/false-positive":{"post":{"operationId":"AccountBugsController_markFalsePositive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Mark a bug as a false positive","tags":["Bugs"]}},"/v1/bugs/bulk-status":{"post":{"operationId":"AccountBugsController_bulkUpdateStatus","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateBugStatusUsecaseInput"}}}},"responses":{"201":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Resolve, reopen or mark many bugs as false positives","tags":["Bugs"]}},"/v1/bugs/{id}/report":{"post":{"operationId":"AccountBugsController_reportBug","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BugReportDestinationInput"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileBuildPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Create a team","tags":["Teams"]}},"/v1/teams/{teamId}":{"patch":{"operationId":"AccountCreateTeamController_updateTeam","parameters":[{"name":"teamId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTeamUsecaseInput"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Update a team","tags":["Teams"]}},"/v1/organizations/{organizationId}/partner-charges":{"get":{"operationId":"AccountPartnerChargesController_list","parameters":[{"name":"organizationId","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"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"List runs charged by a partner platform","tags":["Organizations"]}},"/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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberPresenter"}}}},"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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberPresenter"}}}},"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":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"List teams","tags":["Session"]}},"/v1/me/bootstrap":{"get":{"description":"Returns the signed-in profile, your teams, the selected team's projects and their environments in one call.","operationId":"AccountBootstrapController_get","parameters":[],"responses":{"200":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Load app shell data","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":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationPresenter"}}}},"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":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvitationPresenter"}}}}},"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/shared/bugs/{token}":{"get":{"operationId":"PublicBugController_getSharedBug","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get shared bug","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"]}},"/v1/projects/{projectId}/studio/sessions":{"post":{"operationId":"StudioSessionsController_start","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartStudioSessionRequest"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioSessionPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Start a Studio session","tags":["Studio"]}},"/v1/studio/sessions/{id}":{"get":{"operationId":"StudioSessionsController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioSessionPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Get a Studio session","tags":["Studio"]}},"/v1/studio/sessions/{id}/device-tools":{"get":{"operationId":"StudioSessionsController_deviceTools","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","description":"The `cursor` the previous read returned; without it, everything recorded so far.","schema":{"pattern":"LIVE_EVIDENCE_CURSOR_RE","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Read a Studio session's console and network since a cursor","tags":["Studio"]}},"/v1/studio/sessions/{id}/events":{"get":{"description":"Server-sent events: the session now, then again on every change. Response is not wrapped in `{ payload }`.","operationId":"StudioSessionsController_stream","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 Studio session changes","tags":["Studio"]}},"/v1/studio/sessions/{id}/end":{"post":{"operationId":"StudioSessionsController_end","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndStudioSessionInput"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioSessionPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"End a Studio session","tags":["Studio"]}},"/v1/studio/sessions/{id}/reset":{"post":{"operationId":"StudioSessionsController_reset","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioSessionPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Reset a Studio session's browser or app to its starting point","tags":["Studio"]}},"/v1/studio/sessions/{id}/steps/run":{"post":{"description":"Streams server-sent events on this response while the step runs: `activity` events, then one of `result`, `stopped` or `error`. Closing the request stops the step.","operationId":"StudioSessionsController_runStep","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStudioStepInput"}}}},"responses":{"201":{"description":""},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Run one step on a Studio session","tags":["Studio"]}},"/v1/studio/sessions/{id}/heartbeat":{"post":{"operationId":"StudioSessionsController_heartbeat","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioSessionPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Tell a Studio session its page is still open","tags":["Studio"]}},"/v1/studio/sessions/{id}/keep-alive":{"post":{"operationId":"StudioSessionsController_keepAlive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioSessionPresenter"}}}},"401":{"description":"Missing or invalid Authorization bearer token."}},"security":[{"bearer":[]}],"summary":"Reset a Studio session's idle timeout","tags":["Studio"]}}},"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 and update teams 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":{"UpdateAccountProfileInput":{"type":"object","properties":{"name":{"type":"string","description":"Display name. An empty string clears it.","maxLength":100}}},"ProjectPresenter":{"type":"object","properties":{}},"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"},"credentialId":{"type":"string","deprecated":true},"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"]},"TestCaseDetailsPresenter":{"type":"object","properties":{}},"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"}}}},"TestCaseResultPresenter":{"type":"object","properties":{}},"PartnerRunApprovalDto":{"type":"object","properties":{"credits":{"type":"number","minimum":1,"description":"Partner credits the user approved"},"approvalRef":{"type":"string","maxLength":512,"description":"The partner's reference for the approval"}},"required":["credits"]},"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."},"partnerApproval":{"description":"The user's approval of the run's charge, for partner-billed organizations.","allOf":[{"$ref":"#/components/schemas/PartnerRunApprovalDto"}]}}},"TestRunPresenter":{"type":"object","properties":{}},"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"]},"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"]},"TestSuitePresenter":{"type":"object","properties":{}},"TestSuiteSchedulePresenter":{"type":"object","properties":{}},"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."},"partnerApproval":{"description":"The user's approval of the run's charge, for partner-billed organizations.","allOf":[{"$ref":"#/components/schemas/PartnerRunApprovalDto"}]}}},"SaveTestSuiteScheduleUsecaseInput":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Defaults to on. Turning a schedule off keeps its settings."},"schedule":{"type":"object","description":"`{ kind: 'interval', interval: 'hourly' | 'every_3_hours' | 'every_6_hours' | 'every_12_hours' }`,\n`{ kind: 'daily', timeLocal: 'HH:mm', timezone }`, or\n`{ kind: 'weekly', timeLocal: 'HH:mm', dayOfWeek: 0-6, timezone }` with an IANA timezone."},"environmentId":{"type":"string","description":"Required for web projects: the environment each scheduled run opens."},"platform":{"type":"string","description":"Required for mobile projects: each scheduled run installs this platform's\nnewest ready build.","enum":["ios","android"]}},"required":["schedule"]},"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","maxLength":1000},"environmentId":{"type":"string","description":"Required for web projects; mobile runs install a build instead."},"name":{"type":"string"},"rerunOf":{"type":"string","description":"The run this one reruns. Its suite, start point, preparation case and\nexecution mode carry over, so cases run the way they did the first time."},"mobileBuildId":{"type":"string","description":"Required for mobile projects; the run installs this exact project build."},"partnerApproval":{"description":"The user's approval of the run's charge, for partner-billed organizations.","allOf":[{"$ref":"#/components/schemas/PartnerRunApprovalDto"}]}}},"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"]},"EnvironmentPresenter":{"type":"object","properties":{}},"UpdateEnvironmentRequest":{"type":"object","properties":{"name":{"type":"string"},"baseUrl":{"type":"string"}}},"AddTagRequest":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]},"TagPresenter":{"type":"object","properties":{}},"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"]},"AssetPresenter":{"type":"object","properties":{}},"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"]},"TestAccountPresenter":{"type":"object","properties":{}},"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":{}},"ConnectAzureDevOpsUsecaseInput":{"type":"object","properties":{"organization":{"type":"string","pattern":"/^[a-zA-Z0-9][a-zA-Z0-9-]{0,49}$/"},"teamId":{"type":"string"},"returnTo":{"type":"string"}},"required":["organization","returnTo"]},"IntegrationPresenter":{"type":"object","properties":{}},"ConnectIntegrationRequest":{"type":"object","properties":{"returnTo":{"type":"string"}},"required":["returnTo"]},"ReportBugRequest":{"type":"object","properties":{"integrationKey":{"type":"string","enum":["jira","azure_devops"]},"testCaseResultId":{"type":"string"},"teamId":{"type":"string"}},"required":["testCaseResultId","teamId"]},"FindingPresenter":{"type":"object","properties":{}},"BulkUpdateBugStatusUsecaseInput":{"type":"object","properties":{"ids":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string"}},"action":{"type":"string","enum":["resolve","reopen","mark_false_positive"]}},"required":["ids","action"]},"BugReportDestinationInput":{"type":"object","properties":{"integrationKey":{"type":"string","enum":["jira","azure_devops"]}}},"MobileBuildPresenter":{"type":"object","properties":{}},"AddTeamUsecaseInput":{"type":"object","properties":{"name":{"type":"string"},"identifier":{"type":"string","pattern":"/^[A-Z0-9]{2,32}$/"}},"required":["name","identifier"]},"TeamPresenter":{"type":"object","properties":{}},"UpdateTeamUsecaseInput":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"AddTeamMemberDto":{"type":"object","properties":{"accountId":{"type":"string"},"role":{"type":"string","enum":["admin","user"]}},"required":["accountId","role"]},"TeamMemberPresenter":{"type":"object","properties":{}},"UpdateTeamMemberDto":{"type":"object","properties":{"role":{"type":"string","enum":["admin","user"]}},"required":["role"]},"SignUpOrganizationUseCaseInput":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string","maxLength":100},"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"]},"InvitationPresenter":{"type":"object","properties":{}},"AcceptInvitationDto":{"type":"object","properties":{"password":{"type":"string","description":"Required only when the invitation email does not yet have a User account.","minLength":8},"name":{"type":"string","description":"Only used when the invitation creates a new User account.","maxLength":100}}},"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."}}},"StartStudioSessionRequest":{"type":"object","properties":{"environmentId":{"type":"string","description":"Web projects: the environment to open in the browser."},"mobileBuildId":{"type":"string","description":"Mobile projects: the build to install on the device."}}},"StudioSessionPresenter":{"type":"object","properties":{}},"EndStudioSessionInput":{"type":"object","properties":{"reason":{"type":"string","enum":["user","page_closed"]}}},"StudioSinceEventInput":{"type":"object","properties":{"kind":{"type":"string","enum":["reset","user_control","other_case","stopped"]},"seconds":{"type":"number","description":"user_control: how long the person had the browser.","minimum":0,"maximum":86400},"steps":{"type":"number","description":"other_case: how many steps of other cases ran.","minimum":1,"maximum":1000},"text":{"type":"string","description":"stopped: the step that was stopped.","maxLength":2000}},"required":["kind"]},"StudioNextStepInput":{"type":"object","properties":{"type":{"type":"string","enum":["action","verify","login"]},"text":{"type":"string","maxLength":2000},"testAccountId":{"type":"string"}},"required":["type"]},"RunStudioStepInput":{"type":"object","properties":{"type":{"type":"string","enum":["action","verify","wait","login"]},"text":{"type":"string","description":"Action instruction or verify assertion.","maxLength":2000},"seconds":{"type":"number","minimum":1,"maximum":180},"testAccountId":{"type":"string"},"caseId":{"type":"string","description":"The test case the step belongs to; each case has its own conversation.","pattern":"/^[A-Za-z0-9_-]{1,64}$/"},"since":{"description":"What happened on the browser since this case's last turn, oldest first.","maxItems":20,"type":"array","items":{"$ref":"#/components/schemas/StudioSinceEventInput"}},"next":{"$ref":"#/components/schemas/StudioNextStepInput"}},"required":["type","caseId"]},"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."}}},"LimrunMobileBuildMetadataInput":{"type":"object","properties":{"assetId":{"type":"string"},"assetName":{"type":"string"},"md5":{"type":"string"}},"required":["assetId","assetName","md5"]},"MobileBuildMetadataInput":{"type":"object","properties":{"limrun":{"$ref":"#/components/schemas/LimrunMobileBuildMetadataInput"}}},"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"]}}}}