{"openapi":"3.1.0","info":{"title":"QA.tech (BYOK) API","version":"0.1.0","description":"QA.tech (BYOK) lets an AI assistant read your own QA.tech data through the QA.tech API with a key you supply (QA.tech API key). Read-only: 7 tools (list_projects, list_applications, list_runs, get_run, list_issues, get_issue, list_features). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to api.qa.tech. Unofficial...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-qa-tech.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-qa-tech/docs"},"termsOfService":"https://connectorbay.com/byok-qa-tech/terms"},"servers":[{"url":"https://byok-qa-tech.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-qa-tech/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_projects":{"post":{"operationId":"list_projects","summary":"List the projects of the organization the key belongs to, with short id, name, slug, link and default application. Proje","description":"List the projects of the organization the key belongs to, with short id, name, slug, link and default application. Project-scoped keys see only their own project. Use for \"Which QA.tech projects do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_applications":{"post":{"operationId":"list_applications","summary":"List the applications under test in a project with short id, name and kind. Use for \"Which applications does QA.tech tes","description":"List the applications under test in a project with short id, name and kind. Use for \"Which applications does QA.tech test in my project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Project short id such as proj_abc123 (from list_projects). Required for organization-scoped keys; a project-scoped key may only pass its own project.","title":"Project Short Id"}},"title":"list_applicationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_runs":{"post":{"operationId":"list_runs","summary":"List test runs, newest first, with status, result, trigger, branch, commit and pass, fail and error counts. Filter by st","description":"List test runs, newest first, with status, result, trigger, branch, commit and pass, fail and error counts. Filter by status, trigger, branch, commit or time window. Use for \"What were the latest QA.tech test runs and did they pass\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["running","passed","failed","errored","cancelled"],"type":"string"},{"type":"null"}],"default":null,"description":"Run outcome filter.","title":"Status"},"trigger":{"anyOf":[{"enum":["API","GITHUB","GITLAB","MANUAL","SCHEDULE","CHAT"],"type":"string"},{"type":"null"}],"default":null,"description":"How the run was started.","title":"Trigger"},"branch":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs of this branch (GitHub or GitLab triggers).","title":"Branch"},"commit_hash":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs of this commit hash.","title":"Commit Hash"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs started at or after this ISO 8601 time.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs started at or before this ISO 8601 time.","title":"Until"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Maximum results to return (1 to 100, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"},"project_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Project short id such as proj_abc123 (from list_projects). Required for organization-scoped keys; a project-scoped key may only pass its own project.","title":"Project Short Id"}},"title":"list_runsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_run":{"post":{"operationId":"get_run","summary":"Get one run by short id with status, result, its test cases (name, status, result, classification) and the issues found.","description":"Get one run by short id with status, result, its test cases (name, status, result, classification) and the issues found. Use for \"Why did QA.tech run run_abc123 fail\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"short_id":{"description":"Run short id (from list_runs).","maxLength":80,"title":"Short Id","type":"string"},"project_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Project short id such as proj_abc123 (from list_projects). Required for organization-scoped keys; a project-scoped key may only pass its own project.","title":"Project Short Id"}},"required":["short_id"],"title":"get_runArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_issues":{"post":{"operationId":"list_issues","summary":"List issues found across runs, newest occurrence first, with severity, status, type and links. Defaults to active issues","description":"List issues found across runs, newest occurrence first, with severity, status, type and links. Defaults to active issues. Use for \"What active critical issues has QA.tech found\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"severity":{"anyOf":[{"enum":["MINOR","MAJOR","CRITICAL"],"type":"string"},{"type":"null"}],"default":null,"description":"Only issues of this severity.","title":"Severity"},"status":{"anyOf":[{"enum":["ACTIVE","IGNORED","all"],"type":"string"},{"type":"null"}],"default":"ACTIVE","description":"Issue status: ACTIVE, IGNORED or all.","title":"Status"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only issues occurring at or after this ISO 8601 time.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only issues occurring at or before this ISO 8601 time.","title":"Until"},"order_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction by latest occurrence.","title":"Order Direction"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Maximum results to return (1 to 100, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"},"project_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Project short id such as proj_abc123 (from list_projects). Required for organization-scoped keys; a project-scoped key may only pass its own project.","title":"Project Short Id"}},"title":"list_issuesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_issue":{"post":{"operationId":"get_issue","summary":"Get one issue by short id with description, severity, status, tags and the recent run test cases where it occurred. Use ","description":"Get one issue by short id with description, severity, status, tags and the recent run test cases where it occurred. Use for \"Show QA.tech issue iss_abc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"short_id":{"description":"Issue short id (from list_issues).","maxLength":80,"title":"Short Id","type":"string"},"project_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Project short id such as proj_abc123 (from list_projects). Required for organization-scoped keys; a project-scoped key may only pass its own project.","title":"Project Short Id"}},"required":["short_id"],"title":"get_issueArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_features":{"post":{"operationId":"list_features","summary":"List features of the product that QA.tech discovered while crawling, with name, description and action count. Can be lim","description":"List features of the product that QA.tech discovered while crawling, with name, description and action count. Can be limited to one application. Use for \"What features has QA.tech found in my application\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"application_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only features of this application short id.","title":"Application Short Id"},"project_short_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Project short id such as proj_abc123 (from list_projects). Required for organization-scoped keys; a project-scoped key may only pass its own project.","title":"Project Short Id"}},"title":"list_featuresArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}