{"openapi":"3.1.0","info":{"title":"Windmill (BYOK) API","version":"0.1.0","description":"Windmill (BYOK) lets an AI assistant read your own Windmill data through the Windmill API with a key you supply (Windmill user token). Read-only: 11 tools (whoami, list_workspaces, list_scripts, list_flows, list_apps, list_schedules, list_recent_jobs, list_completed_jobs, get_job_counts, list_folders, list_variables). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-windmill.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-windmill/docs"},"termsOfService":"https://connectorbay.com/byok-windmill/terms"},"servers":[{"url":"https://byok-windmill.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-windmill/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/whoami":{"post":{"operationId":"whoami","summary":"Show the Windmill account the token belongs to: email, username, super-admin flag and company. Use for \"Which Windmill u","description":"Show the Windmill account the token belongs to: email, username, super-admin flag and company. Use for \"Which Windmill user is my token for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"whoamiArguments","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_workspaces":{"post":{"operationId":"list_workspaces","summary":"List the workspaces visible to the token with id, name, owner and domain. Use for \"Which Windmill workspaces can I acces","description":"List the workspaces visible to the token with id, name, owner and domain. Use for \"Which Windmill workspaces can I access\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_workspacesArguments","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_scripts":{"post":{"operationId":"list_scripts","summary":"List a workspace's scripts with path, summary, language, kind, author and creation time. Source code is not returned. Us","description":"List a workspace's scripts with path, summary, language, kind, author and creation time. Source code is not returned. Use for \"Which Python scripts are in my Windmill workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"path_start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose path starts with this text, for example 'f/reports/' or 'u/alice/'.","title":"Path Start"},"languages":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated languages to keep, for example 'python3,deno,bash'.","title":"Languages"},"starred_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only starred scripts.","title":"Starred Only"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["workspace"],"title":"list_scriptsArguments","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_flows":{"post":{"operationId":"list_flows","summary":"List a workspace's flows with path, summary, last editor, edit time and starred flag. Flow definitions are not returned.","description":"List a workspace's flows with path, summary, last editor, edit time and starred flag. Flow definitions are not returned. Use for \"What flows exist in my Windmill workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"path_start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose path starts with this text, for example 'f/reports/' or 'u/alice/'.","title":"Path Start"},"starred_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only starred flows.","title":"Starred Only"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["workspace"],"title":"list_flowsArguments","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_apps":{"post":{"operationId":"list_apps","summary":"List a workspace's apps with path, summary, version, execution mode and edit time. Use for \"Which Windmill apps do we ha","description":"List a workspace's apps with path, summary, version, execution mode and edit time. Use for \"Which Windmill apps do we have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"path_start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose path starts with this text, for example 'f/reports/' or 'u/alice/'.","title":"Path Start"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["workspace"],"title":"list_appsArguments","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_schedules":{"post":{"operationId":"list_schedules","summary":"List a workspace's schedules with cron expression, timezone, target script or flow, enabled flag and last error. Use for","description":"List a workspace's schedules with cron expression, timezone, target script or flow, enabled flag and last error. Use for \"Which Windmill schedules are enabled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["workspace"],"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/list_recent_jobs":{"post":{"operationId":"list_recent_jobs","summary":"List recent jobs (queued, running and completed) of a workspace with script path, kind, user, timing and success flag. A","description":"List recent jobs (queued, running and completed) of a workspace with script path, kind, user, timing and success flag. Arguments, results and logs are not returned. Use for \"Which jobs ran in my Windmill workspace recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"script_path_exact":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs of this exact script or flow path.","title":"Script Path Exact"},"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for successful jobs only, false for failed ones only (omit for all).","title":"Success"},"running":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to show only running jobs.","title":"Running"},"created_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs created after this ISO 8601 time.","title":"Created After"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many jobs to return (1 to 100).","title":"Per Page"}},"required":["workspace"],"title":"list_recent_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}},"/v1/tools/list_completed_jobs":{"post":{"operationId":"list_completed_jobs","summary":"List completed jobs of a workspace, newest first, with success flag, duration and who started them. Arguments, results a","description":"List completed jobs of a workspace, newest first, with success flag, duration and who started them. Arguments, results and logs are not returned. Use for \"Which Windmill jobs failed today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"script_path_exact":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs of this exact script or flow path.","title":"Script Path Exact"},"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for successful jobs only, false for failed ones only (omit for all).","title":"Success"},"started_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs started after this ISO 8601 time.","title":"Started After"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["workspace"],"title":"list_completed_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}},"/v1/tools/get_job_counts":{"post":{"operationId":"get_job_counts","summary":"Count the jobs waiting in the queue (and suspended) and the completed jobs stored for a workspace. Use for \"How many job","description":"Count the jobs waiting in the queue (and suspended) and the completed jobs stored for a workspace. Use for \"How many jobs are queued in my Windmill workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"}},"required":["workspace"],"title":"get_job_countsArguments","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_folders":{"post":{"operationId":"list_folders","summary":"List a workspace's folders with owners, summary and creator. Use for \"Which folders exist in my Windmill workspace\".","description":"List a workspace's folders with owners, summary and creator. Use for \"Which folders exist in my Windmill workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["workspace"],"title":"list_foldersArguments","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_variables":{"post":{"operationId":"list_variables","summary":"List variable paths of a workspace with description and secret flag. Values are not returned. Use for \"Which variables a","description":"List variable paths of a workspace with description and secret flag. Values are not returned. Use for \"Which variables are defined in my Windmill workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"description":"Workspace id (shown in the Windmill URL and returned by list_workspaces), for example 'demo'.","maxLength":200,"title":"Workspace","type":"string"},"path_start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only variables whose path starts with this text.","title":"Path Start"}},"required":["workspace"],"title":"list_variablesArguments","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}}}}