{"openapi":"3.1.0","info":{"title":"Katalon Test Ops Execution (BYOK) API","version":"0.1.0","description":"Katalon Test Ops Execution (BYOK) lets an AI assistant read your own Katalon Test Ops Execution data through the Katalon Test Ops Execution API with a key you supply (Katalon API key (User Settings, Katalon API Key)). Read-only: 7 tools (list_schedules, get_schedule, list_test_runs, get_test_run, list_test_results, get_test_result, list_test_run_jobs). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-katalon-testops-execution.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-katalon-testops-execution/docs"},"termsOfService":"https://connectorbay.com/byok-katalon-testops-execution/terms"},"servers":[{"url":"https://byok-katalon-testops-execution.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-katalon-testops-execution/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_schedules":{"post":{"operationId":"list_schedules","summary":"List the project's saved schedules with name, profile and the schedule and scheduler ids and next run times. Manual sche","description":"List the project's saved schedules with name, profile and the schedule and scheduler ids and next run times. Manual schedules may be missing. Zero-based paging, page size up to 100. Use for \"Which test schedules exist in my Katalon project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Filter expression in the syntax of the Katalon v2 list API (the q parameter); leave empty for no filter.","title":"Filter"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number (the first page is 0).","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Page size, 1 to 100 (the service caps larger values at 100).","title":"Size"}},"required":["tenant"],"title":"list_schedulesArguments","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_schedule":{"post":{"operationId":"get_schedule","summary":"Get one saved schedule by schedule id: name, profile, time zone, next run time and its schedulers (id, start, end, next ","description":"Get one saved schedule by schedule id: name, profile, time zone, next run time and its schedulers (id, start, end, next time). Use for \"When does Katalon schedule 4410 run next\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"schedule_id":{"description":"Schedule (run configuration) id from list_schedules. A scheduler id or test run id here returns 403.","minimum":1,"title":"Schedule Id","type":"integer"}},"required":["tenant","schedule_id"],"title":"get_scheduleArguments","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_test_runs":{"post":{"operationId":"list_test_runs","summary":"List the project's test runs with run number, stage, status, start and end time, schedule id and test case count. Zero-b","description":"List the project's test runs with run number, stage, status, start and end time, schedule id and test case count. Zero-based paging, page size up to 100. Use for \"What were the latest test runs in Katalon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Filter expression in the syntax of the Katalon v2 list API (the q parameter); leave empty for no filter.","title":"Filter"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number (the first page is 0).","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Page size, 1 to 100 (the service caps larger values at 100).","title":"Size"}},"required":["tenant"],"title":"list_test_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_test_run":{"post":{"operationId":"get_test_run","summary":"Get one test run by id: stage (NOT_STARTED, RUNNING, ANALYZING, ANALYZED, IMPORTING, COMPLETED, CANCELLED, TERMINATE or ","description":"Get one test run by id: stage (NOT_STARTED, RUNNING, ANALYZING, ANALYZED, IMPORTING, COMPLETED, CANCELLED, TERMINATE or ERROR), status (PASSED, FAILED, ERROR, INCOMPLETE, RUNNING, SKIPPED, NOT_RUN or BLOCKED), timing, schedule id and number of test cases. A run passed only when stage is COMPLETED, status PASSED and the test case count is above 0. Use for \"Did Katalon test run 123456 pass\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"test_run_id":{"description":"Test run id from list_test_runs (not the run order number).","minimum":1,"title":"Test Run Id","type":"integer"}},"required":["tenant","test_run_id"],"title":"get_test_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_test_results":{"post":{"operationId":"list_test_results","summary":"List the test results of one test run with status, duration, timing, retry count and error message. Use executionTestRes","description":"List the test results of one test run with status, duration, timing, retry count and error message. Use executionTestResultId (not id) with get_test_result. Zero-based paging, page size up to 100. Use for \"Which tests failed in Katalon test run 123456\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"test_run_id":{"description":"Test run id from list_test_runs.","minimum":1,"title":"Test Run Id","type":"integer"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Filter expression in the syntax of the Katalon v2 list API (the q parameter); leave empty for no filter.","title":"Filter"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based page number (the first page is 0).","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Page size, 1 to 100 (the service caps larger values at 100).","title":"Size"}},"required":["tenant","test_run_id"],"title":"list_test_resultsArguments","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_test_result":{"post":{"operationId":"get_test_result","summary":"Get one test result by its numeric executionTestResultId: status, duration, timing, retry count, error message and asser","description":"Get one test result by its numeric executionTestResultId: status, duration, timing, retry count, error message and assertion counts. Output and logs are not requested. Use for \"Show Katalon test result 5550001 of run 123456\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"test_run_id":{"description":"Test run id from list_test_runs.","minimum":1,"title":"Test Run Id","type":"integer"},"test_result_id":{"description":"Numeric executionTestResultId from list_test_results, not the string id.","minimum":1,"title":"Test Result Id","type":"integer"}},"required":["tenant","test_run_id","test_result_id"],"title":"get_test_resultArguments","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_test_run_jobs":{"post":{"operationId":"list_test_run_jobs","summary":"List the jobs of one test run (one per environment for automated runs; manual runs have none) with build number, status ","description":"List the jobs of one test run (one per environment for automated runs; manual runs have none) with build number, status and start and stop time. Logs are not returned. Use for \"Which jobs did Katalon test run 123456 use and how did they end\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tenant":{"description":"Your Katalon tenant slug: the part before .katalon.io in your tenant host, for example 'acme' for acme.katalon.io.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Tenant","type":"string"},"execution_id":{"description":"Execution id of the test run (the id from list_test_runs).","minimum":1,"title":"Execution Id","type":"integer"}},"required":["tenant","execution_id"],"title":"list_test_run_jobsArguments","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}}}}