{
  "openapi": "3.0.3",
  "info": {
    "version": "1.633.1",
    "title": "Windmill API",
    "contact": {
      "name": "Windmill Team",
      "email": "contact@windmill.dev",
      "url": "https://windmill.dev"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
    },
    "x-logo": {
      "url": "https://windmill.dev/img/windmill.svg"
    }
  },
  "externalDocs": {
    "description": "documentation portal",
    "url": "https://windmill.dev"
  },
  "servers": [
    {
      "url": "/api"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    },
    {
      "cookieAuth": []
    }
  ],
  "paths": {
    "/version": {
      "get": {
        "summary": "get backend version",
        "operationId": "backendVersion",
        "tags": [
          "settings"
        ],
        "responses": {
          "200": {
            "description": "git version of backend",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/health/status": {
      "get": {
        "summary": "health status",
        "description": "Health status endpoint. Returns cached health status (database connectivity, worker count).\nCache TTL is fixed at 5 seconds. Use force=true query parameter to bypass cache.\nNote: This endpoint is intentionally different from Kubernetes probes to avoid confusion.\nFor k8s liveness/readiness probes, use /version endpoint.\n",
        "operationId": "getHealthStatus",
        "tags": [
          "health"
        ],
        "security": [],
        "parameters": [
          {
            "name": "force",
            "in": "query",
            "description": "Force a fresh check, bypassing the cache",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "server is healthy or degraded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthStatusResponse"
                }
              }
            }
          },
          "503": {
            "description": "server is unhealthy (database unreachable)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/health/detailed": {
      "get": {
        "summary": "detailed health status",
        "description": "Returns detailed health information including database pool stats, worker details, and queue status.\nRequires authentication. Use for monitoring dashboards and debugging.\nThis endpoint always returns fresh data (no caching).\n",
        "operationId": "getHealthDetailed",
        "tags": [
          "health"
        ],
        "responses": {
          "200": {
            "description": "server is healthy or degraded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailedHealthResponse"
                }
              }
            }
          },
          "503": {
            "description": "server is unhealthy (database unreachable)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailedHealthResponse"
                }
              }
            }
          }
        }
      }
    },
    "/uptodate": {
      "get": {
        "summary": "is backend up to date",
        "operationId": "backendUptodate",
        "tags": [
          "settings"
        ],
        "responses": {
          "200": {
            "description": "is backend up to date",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/ee_license": {
      "get": {
        "summary": "get license id",
        "operationId": "getLicenseId",
        "tags": [
          "settings"
        ],
        "responses": {
          "200": {
            "description": "get license id (empty if not ee)",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/inkeep": {
      "post": {
        "summary": "query Windmill AI documentation assistant (EE only)",
        "operationId": "queryDocumentation",
        "x-mcp-tool": true,
        "tags": [
          "documentation"
        ],
        "requestBody": {
          "description": "query to send to the AI documentation assistant",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The documentation query to send to the AI assistant"
                  }
                },
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "AI documentation assistant response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Response from Inkeep service"
                }
              }
            }
          },
          "403": {
            "description": "Enterprise Edition required",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/openapi.yaml": {
      "get": {
        "summary": "get openapi yaml spec",
        "operationId": "getOpenApiYaml",
        "tags": [
          "settings"
        ],
        "responses": {
          "200": {
            "description": "openapi yaml file content",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/audit/get/{id}": {
      "get": {
        "summary": "get audit log (requires admin privilege)",
        "operationId": "getAuditLog",
        "tags": [
          "audit"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/PathId"
          }
        ],
        "responses": {
          "200": {
            "description": "an audit log",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditLog"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/audit/list": {
      "get": {
        "summary": "list audit logs (requires admin privilege)",
        "operationId": "listAuditLogs",
        "tags": [
          "audit"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "$ref": "#/components/parameters/Username"
          },
          {
            "$ref": "#/components/parameters/Operation"
          },
          {
            "name": "operations",
            "in": "query",
            "description": "comma separated list of exact operations to include",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exclude_operations",
            "in": "query",
            "description": "comma separated list of operations to exclude",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/ResourceName"
          },
          {
            "$ref": "#/components/parameters/ActionKind"
          },
          {
            "name": "all_workspaces",
            "in": "query",
            "description": "get audit logs for all workspaces",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "a list of audit logs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AuditLog"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/auth/login": {
      "post": {
        "security": [],
        "summary": "login with password",
        "operationId": "login",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "credentials",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Login"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully authenticated. The session ID is returned in a cookie named `token` and as plaintext response. Preferred method of authorization is through the bearer token. The cookie is only for browser convenience.\n",
            "headers": {
              "Set-Cookie": {
                "schema": {
                  "type": "string",
                  "example": "token=abcde12345; Path=/; HttpOnly"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/auth/logout": {
      "post": {
        "security": [],
        "summary": "logout",
        "operationId": "logout",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "clear cookies and clear token (if applicable)",
            "headers": {
              "Set-Cookie": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/auth/is_smtp_configured": {
      "get": {
        "security": [],
        "summary": "check if SMTP is configured for password reset",
        "operationId": "isSmtpConfigured",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "returns true if SMTP is configured",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/auth/request_password_reset": {
      "post": {
        "security": [],
        "summary": "request password reset email",
        "operationId": "requestPasswordReset",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "email to send password reset link to",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "password reset email sent (if user exists)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PasswordResetResponse"
                }
              }
            }
          },
          "400": {
            "description": "SMTP not configured"
          }
        }
      }
    },
    "/auth/reset_password": {
      "post": {
        "security": [],
        "summary": "reset password using token",
        "operationId": "resetPassword",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "token and new password",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "token",
                  "new_password"
                ],
                "properties": {
                  "token": {
                    "type": "string"
                  },
                  "new_password": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "password reset successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PasswordResetResponse"
                }
              }
            }
          },
          "400": {
            "description": "invalid or expired token"
          }
        }
      }
    },
    "/w/{workspace}/users/get/{username}": {
      "get": {
        "summary": "get user (require admin privilege)",
        "operationId": "getUser",
        "tags": [
          "user",
          "admin"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/update/{username}": {
      "post": {
        "summary": "update user (require admin privilege)",
        "operationId": "updateUser",
        "tags": [
          "user",
          "admin"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "new user",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditWorkspaceUser"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "edited user",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/is_owner/{path}": {
      "get": {
        "summary": "is owner of path",
        "operationId": "isOwnerOfPath",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "is owner",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/users/setpassword": {
      "post": {
        "summary": "set password",
        "operationId": "setPassword",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "set password",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "password set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/set_password_of/{user}": {
      "post": {
        "summary": "set password for a specific user (require super admin)",
        "operationId": "setPasswordForUser",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "user",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "set password",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "password set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/set_login_type/{user}": {
      "post": {
        "summary": "set login type for a specific user (require super admin)",
        "operationId": "setLoginTypeForUser",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "user",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "set login type",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "login_type": {
                    "type": "string"
                  }
                },
                "required": [
                  "login_type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "login type set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/create": {
      "post": {
        "summary": "create user",
        "operationId": "createUserGlobally",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "user info",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  },
                  "super_admin": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "string"
                  },
                  "company": {
                    "type": "string"
                  },
                  "skip_email": {
                    "type": "boolean",
                    "description": "Skip sending email notifications to the user"
                  }
                },
                "required": [
                  "email",
                  "password",
                  "super_admin"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "user created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/update/{email}": {
      "post": {
        "summary": "global update user (require super admin)",
        "operationId": "globalUserUpdate",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "new user info",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "is_super_admin": {
                    "type": "boolean"
                  },
                  "is_devops": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "user updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/username_info/{email}": {
      "get": {
        "summary": "global username info (require super admin)",
        "operationId": "globalUsernameInfo",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user renamed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "username": {
                      "type": "string"
                    },
                    "workspace_usernames": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "workspace_id": {
                            "type": "string"
                          },
                          "username": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "workspace_id",
                          "username"
                        ]
                      }
                    }
                  },
                  "required": [
                    "username",
                    "workspace_usernames"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/users/rename/{email}": {
      "post": {
        "summary": "global rename user (require super admin)",
        "operationId": "globalUserRename",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "new username",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_username": {
                    "type": "string"
                  }
                },
                "required": [
                  "new_username"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "user renamed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/delete/{email}": {
      "delete": {
        "summary": "global delete user (require super admin)",
        "operationId": "globalUserDelete",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/overwrite": {
      "post": {
        "summary": "global overwrite users (require super admin and EE)",
        "operationId": "globalUsersOverwrite",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "List of users",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExportedUser"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success message",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/export": {
      "get": {
        "summary": "global export users (require super admin and EE)",
        "operationId": "globalUsersExport",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "exported users",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExportedUser"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/users/onboarding": {
      "post": {
        "summary": "Submit user onboarding data",
        "operationId": "submitOnboardingData",
        "tags": [
          "user"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "touch_point": {
                    "type": "string"
                  },
                  "use_case": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Onboarding data submitted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/delete/{username}": {
      "delete": {
        "summary": "delete user (require admin privilege)",
        "operationId": "deleteUser",
        "tags": [
          "user",
          "admin"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "delete user",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/convert_to_group/{username}": {
      "post": {
        "summary": "convert manual user to group user (require admin privilege)",
        "operationId": "convertUserToGroup",
        "tags": [
          "user",
          "admin"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "convert user to group user",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/github_app/connected_repositories": {
      "get": {
        "summary": "get connected repositories",
        "operationId": "getGlobalConnectedRepositories",
        "tags": [
          "Git Sync"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number for pagination (default 1)",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "connected repositories",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GithubInstallations"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/list": {
      "get": {
        "summary": "list all workspaces visible to me",
        "operationId": "listWorkspaces",
        "tags": [
          "workspace"
        ],
        "responses": {
          "200": {
            "description": "all workspaces",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Workspace"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/allowed_domain_auto_invite": {
      "get": {
        "summary": "is domain allowed for auto invi",
        "operationId": "isDomainAllowed",
        "tags": [
          "workspace"
        ],
        "responses": {
          "200": {
            "description": "domain allowed or not",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/users": {
      "get": {
        "summary": "list all workspaces visible to me with user info",
        "operationId": "listUserWorkspaces",
        "tags": [
          "workspace"
        ],
        "responses": {
          "200": {
            "description": "workspace with associated username",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserWorkspaceList"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_as_superadmin": {
      "get": {
        "summary": "get workspace as super admin (require to be super admin)",
        "operationId": "getWorkspaceAsSuperAdmin",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "workspace",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workspace"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/list_as_superadmin": {
      "get": {
        "summary": "list all workspaces as super admin (require to be super admin)",
        "operationId": "listWorkspacesAsSuperAdmin",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "workspaces",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Workspace"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/create": {
      "post": {
        "summary": "create workspace",
        "operationId": "createWorkspace",
        "tags": [
          "workspace"
        ],
        "requestBody": {
          "description": "new token",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspace"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "token created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/create_workspace_fork_branch": {
      "post": {
        "summary": "create forked workspace branch with git sync",
        "operationId": "createWorkspaceForkGitBranch",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new forked workspace",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspaceFork"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "forked workspace branch created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/create_fork": {
      "post": {
        "summary": "create forked workspace",
        "operationId": "createWorkspaceFork",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new forked workspace",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspaceFork"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "forked workspace created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/exists": {
      "post": {
        "summary": "exists workspace",
        "operationId": "existsWorkspace",
        "tags": [
          "workspace"
        ],
        "requestBody": {
          "description": "id of workspace",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/exists_username": {
      "post": {
        "summary": "exists username",
        "operationId": "existsUsername",
        "tags": [
          "workspace"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "username"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/settings/refresh_custom_instance_user_pwd": {
      "post": {
        "summary": "Refreshes the password for the custom_instance_user",
        "operationId": "refreshCustomInstanceUserPwd",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/settings/list_custom_instance_pg_databases": {
      "post": {
        "summary": "Returns the set-up statuses of custom instance pg databases",
        "operationId": "listCustomInstanceDbs",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "Statuses of all custom instance dbs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/CustomInstanceDb"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/settings/setup_custom_instance_pg_database/{name}": {
      "post": {
        "summary": "Runs CREATE DATABASE on the Windmill Postgres and grants access to the custom_instance_user",
        "operationId": "setupCustomInstanceDb",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tag": {
                    "$ref": "#/components/schemas/CustomInstanceDbTag"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The name of the database to create"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomInstanceDb"
                }
              }
            }
          }
        }
      }
    },
    "/settings/global/{key}": {
      "get": {
        "summary": "get global settings",
        "operationId": "getGlobal",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Key"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      },
      "post": {
        "summary": "post global settings",
        "operationId": "setGlobal",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Key"
          }
        ],
        "requestBody": {
          "description": "value set",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/local": {
      "get": {
        "summary": "get local settings",
        "operationId": "getLocal",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/settings/test_smtp": {
      "post": {
        "summary": "test smtp",
        "operationId": "testSmtp",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "test smtp payload",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "to": {
                    "type": "string"
                  },
                  "smtp": {
                    "type": "object",
                    "properties": {
                      "host": {
                        "type": "string"
                      },
                      "username": {
                        "type": "string"
                      },
                      "password": {
                        "type": "string"
                      },
                      "port": {
                        "type": "integer"
                      },
                      "from": {
                        "type": "string"
                      },
                      "tls_implicit": {
                        "type": "boolean"
                      },
                      "disable_tls": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "host",
                      "username",
                      "password",
                      "port",
                      "from",
                      "tls_implicit",
                      "disable_tls"
                    ]
                  }
                },
                "required": [
                  "to",
                  "smtp"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/test_critical_channels": {
      "post": {
        "summary": "test critical channels",
        "operationId": "testCriticalChannels",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "test critical channel payload",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "email": {
                      "type": "string"
                    },
                    "slack_channel": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/critical_alerts": {
      "get": {
        "summary": "Get all critical alerts",
        "operationId": "getCriticalAlerts",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer",
              "default": 1,
              "description": "The page number to retrieve (minimum value is 1)"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "description": "Number of alerts per page (maximum is 100)"
            }
          },
          {
            "in": "query",
            "name": "acknowledged",
            "schema": {
              "type": "boolean",
              "nullable": true,
              "description": "Filter by acknowledgment status; true for acknowledged, false for unacknowledged, and omit for all alerts"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved all critical alerts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "alerts": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CriticalAlert"
                      }
                    },
                    "total_rows": {
                      "type": "integer",
                      "description": "Total number of rows matching the query.",
                      "example": 100
                    },
                    "total_pages": {
                      "type": "integer",
                      "description": "Total number of pages based on the page size.",
                      "example": 10
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/settings/critical_alerts/{id}/acknowledge": {
      "post": {
        "summary": "Acknowledge a critical alert",
        "operationId": "acknowledgeCriticalAlert",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The ID of the critical alert to acknowledge"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully acknowledged the critical alert",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Critical alert acknowledged"
                }
              }
            }
          }
        }
      }
    },
    "/settings/critical_alerts/acknowledge_all": {
      "post": {
        "summary": "Acknowledge all unacknowledged critical alerts",
        "operationId": "acknowledgeAllCriticalAlerts",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "Successfully acknowledged all unacknowledged critical alerts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "All unacknowledged critical alerts acknowledged"
                }
              }
            }
          }
        }
      }
    },
    "/settings/test_license_key": {
      "post": {
        "summary": "test license key",
        "operationId": "testLicenseKey",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "test license key",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "license_key": {
                    "type": "string"
                  }
                },
                "required": [
                  "license_key"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/test_object_storage_config": {
      "post": {
        "summary": "test object storage config",
        "operationId": "testObjectStorageConfig",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "test object storage config",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/send_stats": {
      "post": {
        "summary": "send stats",
        "operationId": "sendStats",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/get_stats": {
      "get": {
        "summary": "get encrypted telemetry stats (EE only)",
        "operationId": "getStats",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "base64-encoded encrypted telemetry blob",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/latest_key_renewal_attempt": {
      "get": {
        "summary": "get latest key renewal attempt",
        "operationId": "getLatestKeyRenewalAttempt",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "type": "string"
                    },
                    "attempted_at": {
                      "type": "string",
                      "format": "date-time"
                    }
                  },
                  "required": [
                    "result",
                    "attempted_at"
                  ],
                  "nullable": true
                }
              }
            }
          }
        }
      }
    },
    "/settings/renew_license_key": {
      "post": {
        "summary": "renew license key",
        "operationId": "renewLicenseKey",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "name": "license_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/customer_portal": {
      "post": {
        "summary": "create customer portal session",
        "operationId": "createCustomerPortalSession",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "name": "license_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "url to portal",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/saml/test_metadata": {
      "post": {
        "summary": "test metadata",
        "operationId": "testMetadata",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "test metadata",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/list_global": {
      "get": {
        "summary": "list global settings",
        "operationId": "listGlobalSettings",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "list of settings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GlobalSetting"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/min_keep_alive_version": {
      "get": {
        "summary": "get minimum worker versions required to stay alive",
        "operationId": "getMinKeepAliveVersion",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "minimum keep-alive versions for workers and agents",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "worker",
                    "agent"
                  ],
                  "properties": {
                    "worker": {
                      "type": "string",
                      "description": "minimum version for normal workers"
                    },
                    "agent": {
                      "type": "string",
                      "description": "minimum version for agent workers"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/jwks.json": {
      "get": {
        "summary": "get JWKS for Vault JWT authentication",
        "operationId": "getJwks",
        "tags": [
          "setting"
        ],
        "responses": {
          "200": {
            "description": "JSON Web Key Set",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JwksResponse"
                }
              }
            }
          }
        }
      }
    },
    "/settings/test_secret_backend": {
      "post": {
        "summary": "test secret backend connection (HashiCorp Vault)",
        "operationId": "testSecretBackend",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "Vault settings to test",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VaultSettings"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "connection successful",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/settings/migrate_secrets_to_vault": {
      "post": {
        "summary": "migrate secrets from database to HashiCorp Vault",
        "operationId": "migrateSecretsToVault",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "Vault settings for migration target",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VaultSettings"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "migration report",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecretMigrationReport"
                }
              }
            }
          }
        }
      }
    },
    "/settings/migrate_secrets_to_database": {
      "post": {
        "summary": "migrate secrets from HashiCorp Vault to database",
        "operationId": "migrateSecretsToDatabase",
        "tags": [
          "setting"
        ],
        "requestBody": {
          "description": "Vault settings for migration source",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VaultSettings"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "migration report",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecretMigrationReport"
                }
              }
            }
          }
        }
      }
    },
    "/users/email": {
      "get": {
        "summary": "get current user email (if logged in)",
        "operationId": "getCurrentEmail",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "user email",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/refresh_token": {
      "get": {
        "summary": "refresh the current token",
        "operationId": "refreshUserToken",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "if_expiring_in_less_than_s",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "new token",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/tutorial_progress": {
      "get": {
        "summary": "get tutorial progress",
        "operationId": "getTutorialProgress",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "tutorial progress",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "progress": {
                      "type": "integer"
                    },
                    "skipped_all": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "update tutorial progress",
        "operationId": "updateTutorialProgress",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "progress update",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "progress": {
                    "type": "integer"
                  },
                  "skipped_all": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "tutorial progress",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/leave_instance": {
      "post": {
        "summary": "leave instance",
        "operationId": "leaveInstance",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/usage": {
      "get": {
        "summary": "get current usage outside of premium workspaces",
        "operationId": "getUsage",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "free usage",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        }
      }
    },
    "/users/all_runnables": {
      "get": {
        "summary": "get all runnables in every workspace",
        "operationId": "getRunnable",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "free all runnables",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "workspace": {
                      "type": "string"
                    },
                    "endpoint_async": {
                      "type": "string"
                    },
                    "endpoint_sync": {
                      "type": "string"
                    },
                    "summary": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "workspace",
                    "endpoint_async",
                    "endpoint_sync",
                    "summary",
                    "kind"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/users/whoami": {
      "get": {
        "summary": "get current global whoami (if logged in)",
        "operationId": "globalWhoami",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "user email",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GlobalUserInfo"
                }
              }
            }
          }
        }
      }
    },
    "/users/list_invites": {
      "get": {
        "summary": "list all workspace invites",
        "operationId": "listWorkspaceInvites",
        "tags": [
          "user"
        ],
        "responses": {
          "200": {
            "description": "list all workspace invites",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkspaceInvite"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/whoami": {
      "get": {
        "summary": "whoami",
        "operationId": "whoami",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/github_app/token": {
      "post": {
        "summary": "get github app token",
        "operationId": "getGithubAppToken",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "jwt job token",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "job_token": {
                    "type": "string"
                  }
                },
                "required": [
                  "job_token"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "github app token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "token": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "token"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/github_app/install_from_workspace": {
      "post": {
        "tags": [
          "Git Sync"
        ],
        "summary": "Install a GitHub installation from another workspace",
        "operationId": "installFromWorkspace",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "source_workspace_id": {
                    "type": "string",
                    "description": "The ID of the workspace containing the installation to copy"
                  },
                  "installation_id": {
                    "type": "number",
                    "description": "The ID of the GitHub installation to copy"
                  }
                },
                "required": [
                  "source_workspace_id",
                  "installation_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Installation successfully copied"
          }
        }
      }
    },
    "/w/{workspace}/github_app/installation/{installation_id}": {
      "delete": {
        "summary": "Delete a GitHub installation from a workspace",
        "operationId": "deleteFromWorkspace",
        "description": "Removes a GitHub installation from the specified workspace. Requires admin privileges.",
        "tags": [
          "Git Sync"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "installation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            },
            "description": "The ID of the GitHub installation to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Installation successfully deleted"
          }
        }
      }
    },
    "/w/{workspace}/github_app/export/{installationId}": {
      "get": {
        "summary": "Export GitHub installation JWT token",
        "description": "Exports the JWT token for a specific GitHub installation in the workspace",
        "operationId": "exportInstallation",
        "tags": [
          "Git Sync"
        ],
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "installationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully exported the JWT token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "jwt_token": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/github_app/import": {
      "post": {
        "summary": "Import GitHub installation from JWT token",
        "description": "Imports a GitHub installation from a JWT token exported from another instance",
        "operationId": "importInstallation",
        "tags": [
          "Git Sync"
        ],
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "jwt_token"
                ],
                "properties": {
                  "jwt_token": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully imported the installation"
          }
        }
      }
    },
    "/users/accept_invite": {
      "post": {
        "summary": "accept invite to workspace",
        "operationId": "acceptInvite",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "accept invite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspace_id": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  }
                },
                "required": [
                  "workspace_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/decline_invite": {
      "post": {
        "summary": "decline invite to workspace",
        "operationId": "declineInvite",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "decline invite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspace_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "workspace_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/invite_user": {
      "post": {
        "summary": "invite user to workspace",
        "operationId": "inviteUser",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceInvite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "is_admin": {
                    "type": "boolean"
                  },
                  "operator": {
                    "type": "boolean"
                  },
                  "parent_workspace_id": {
                    "type": "string",
                    "nullable": true
                  }
                },
                "required": [
                  "email",
                  "is_admin",
                  "operator"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/add_user": {
      "post": {
        "summary": "add user to workspace",
        "operationId": "addUser",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceInvite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "is_admin": {
                    "type": "boolean"
                  },
                  "username": {
                    "type": "string"
                  },
                  "operator": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "email",
                  "is_admin",
                  "operator"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/delete_invite": {
      "post": {
        "summary": "delete user invite",
        "operationId": "delete invite",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceInvite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "is_admin": {
                    "type": "boolean"
                  },
                  "operator": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "email",
                  "is_admin",
                  "operator"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/archive": {
      "post": {
        "summary": "archive workspace",
        "operationId": "archiveWorkspace",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/unarchive/{workspace}": {
      "post": {
        "summary": "unarchive workspace",
        "operationId": "unarchiveWorkspace",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/workspaces/delete/{workspace}": {
      "delete": {
        "summary": "delete workspace (require super admin)",
        "operationId": "deleteWorkspace",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "only_delete_forks",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/leave": {
      "post": {
        "summary": "leave workspace",
        "operationId": "leaveWorkspace",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_workspace_name": {
      "get": {
        "summary": "get workspace name",
        "operationId": "getWorkspaceName",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/change_workspace_name": {
      "post": {
        "summary": "change workspace name",
        "operationId": "changeWorkspaceName",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_name": {
                    "type": "string"
                  }
                },
                "required": [
                  "username"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/change_workspace_id": {
      "post": {
        "summary": "change workspace id",
        "operationId": "changeWorkspaceId",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_id": {
                    "type": "string"
                  },
                  "new_name": {
                    "type": "string"
                  }
                },
                "required": [
                  "username"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/change_workspace_color": {
      "post": {
        "summary": "change workspace id",
        "operationId": "changeWorkspaceColor",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/whois/{username}": {
      "get": {
        "summary": "whois",
        "operationId": "whois",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/operator_settings": {
      "post": {
        "operationId": "updateOperatorSettings",
        "summary": "Update operator settings for a workspace",
        "description": "Updates the operator settings for a specific workspace. Requires workspace admin privileges.",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperatorSettings"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operator settings updated successfully",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/compare/{target_workspace_id}": {
      "get": {
        "operationId": "compareWorkspaces",
        "summary": "Compare two workspaces",
        "description": "Compares the current workspace with a target workspace to find differences in scripts, flows, apps, resources, and variables. Returns information about items that are ahead, behind, or in conflict.",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "target_workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The ID of the workspace to compare with"
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace comparison results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceComparison"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/reset_diff_tally/{fork_workspace_id}": {
      "post": {
        "operationId": "resetDiffTally",
        "summary": "Resets the ahead and behind deployement counter after a deployement",
        "description": "This endpoint should be called after a fork deployement",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "fork_workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The ID of the workspace to compare with"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/users/exists/{email}": {
      "get": {
        "summary": "exists email",
        "operationId": "existsEmail",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/users/list_as_super_admin": {
      "get": {
        "summary": "list all users as super admin (require to be super amdin)",
        "operationId": "listUsersAsSuperAdmin",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "active_only",
            "in": "query",
            "description": "filter only active users",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GlobalUserInfo"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/list_pending_invites": {
      "get": {
        "summary": "list pending invites for a workspace",
        "operationId": "listPendingInvites",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkspaceInvite"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_settings": {
      "get": {
        "summary": "get settings",
        "operationId": "getSettings",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "workspace_id": {
                      "type": "string"
                    },
                    "slack_name": {
                      "type": "string"
                    },
                    "slack_team_id": {
                      "type": "string"
                    },
                    "slack_command_script": {
                      "type": "string"
                    },
                    "slack_oauth_client_id": {
                      "type": "string"
                    },
                    "slack_oauth_client_secret": {
                      "type": "string"
                    },
                    "teams_team_id": {
                      "type": "string"
                    },
                    "teams_command_script": {
                      "type": "string"
                    },
                    "teams_team_name": {
                      "type": "string"
                    },
                    "teams_team_guid": {
                      "type": "string"
                    },
                    "auto_invite": {
                      "$ref": "#/components/schemas/AutoInviteConfig"
                    },
                    "plan": {
                      "type": "string"
                    },
                    "customer_id": {
                      "type": "string"
                    },
                    "webhook": {
                      "type": "string"
                    },
                    "deploy_to": {
                      "type": "string"
                    },
                    "ai_config": {
                      "$ref": "#/components/schemas/AIConfig"
                    },
                    "error_handler": {
                      "$ref": "#/components/schemas/ErrorHandlerConfig"
                    },
                    "success_handler": {
                      "$ref": "#/components/schemas/SuccessHandlerConfig"
                    },
                    "large_file_storage": {
                      "$ref": "#/components/schemas/LargeFileStorage"
                    },
                    "ducklake": {
                      "$ref": "#/components/schemas/DucklakeSettings"
                    },
                    "datatable": {
                      "$ref": "#/components/schemas/DataTableSettings"
                    },
                    "git_sync": {
                      "$ref": "#/components/schemas/WorkspaceGitSyncSettings"
                    },
                    "deploy_ui": {
                      "$ref": "#/components/schemas/WorkspaceDeployUISettings"
                    },
                    "default_app": {
                      "type": "string"
                    },
                    "default_scripts": {
                      "$ref": "#/components/schemas/WorkspaceDefaultScripts"
                    },
                    "mute_critical_alerts": {
                      "type": "boolean"
                    },
                    "color": {
                      "type": "string"
                    },
                    "operator_settings": {
                      "$ref": "#/components/schemas/OperatorSettings"
                    },
                    "public_app_execution_limit_per_minute": {
                      "type": "integer",
                      "description": "Rate limit for public app executions per minute per server. NULL or 0 means disabled."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_deploy_to": {
      "get": {
        "summary": "get deploy to",
        "operationId": "getDeployTo",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deploy_to": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/is_premium": {
      "get": {
        "summary": "get if workspace is premium",
        "operationId": "getIsPremium",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/premium_info": {
      "get": {
        "summary": "get premium info",
        "operationId": "getPremiumInfo",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "skip_subscription_fetch",
            "in": "query",
            "description": "skip fetching subscription status from stripe",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "premium": {
                      "type": "boolean"
                    },
                    "usage": {
                      "type": "number"
                    },
                    "owner": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "is_past_due": {
                      "type": "boolean"
                    },
                    "max_tolerated_executions": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "premium",
                    "owner",
                    "is_past_due"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/threshold_alert": {
      "get": {
        "summary": "get threshold alert info",
        "operationId": "getThresholdAlert",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "threshold_alert_amount": {
                      "type": "number"
                    },
                    "last_alert_sent": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "set threshold alert info",
        "operationId": "setThresholdAlert",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "threshold alert info",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "threshold_alert_amount": {
                    "type": "number"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/rebuild_dependency_map": {
      "post": {
        "summary": "rebuild dependency map",
        "operationId": "rebuildDependencyMap",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_dependents/{imported_path}": {
      "get": {
        "summary": "get dependents of an imported path",
        "operationId": "getDependents",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "imported_path",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The imported path to get dependents for"
          }
        ],
        "responses": {
          "200": {
            "description": "list of dependents",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DependencyDependent"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_dependents_amounts": {
      "post": {
        "summary": "get dependents amounts for multiple imported paths",
        "operationId": "getDependentsAmounts",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "List of imported paths to get dependents counts for",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "list of dependents amounts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DependentsAmount"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_dependency_map": {
      "get": {
        "summary": "get dependency map",
        "operationId": "getDependencyMap",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "dmap",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DependencyMap"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_slack_command": {
      "post": {
        "summary": "edit slack command",
        "operationId": "editSlackCommand",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceInvite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "slack_command_script": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/slack_oauth_config": {
      "get": {
        "summary": "get workspace slack oauth config",
        "operationId": "getWorkspaceSlackOauthConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "slack oauth config",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "slack_oauth_client_id": {
                      "type": "string",
                      "nullable": true
                    },
                    "slack_oauth_client_secret": {
                      "type": "string",
                      "nullable": true,
                      "description": "Masked with *** if set"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "set workspace slack oauth config",
        "operationId": "setWorkspaceSlackOauthConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Slack OAuth Configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "slack_oauth_client_id",
                  "slack_oauth_client_secret"
                ],
                "properties": {
                  "slack_oauth_client_id": {
                    "type": "string"
                  },
                  "slack_oauth_client_secret": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "delete workspace slack oauth config",
        "operationId": "deleteWorkspaceSlackOauthConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_teams_command": {
      "post": {
        "summary": "edit teams command",
        "operationId": "editTeamsCommand",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceInvite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "slack_command_script": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/available_teams_ids": {
      "get": {
        "summary": "list available teams ids",
        "operationId": "listAvailableTeamsIds",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search teams by name. If omitted, returns first page of all teams.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "next_link",
            "in": "query",
            "description": "Pagination cursor URL from previous response. Pass this to fetch the next page of results.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "teams": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "team_name": {
                            "type": "string"
                          },
                          "team_id": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "total_count": {
                      "type": "integer",
                      "description": "Total number of teams across all pages"
                    },
                    "per_page": {
                      "type": "integer",
                      "description": "Number of teams per page (configurable via TEAMS_PER_PAGE env var)"
                    },
                    "next_link": {
                      "type": "string",
                      "nullable": true,
                      "description": "URL to fetch next page of results. Null if no more pages."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/available_teams_channels": {
      "get": {
        "summary": "list available channels for a specific team",
        "operationId": "listAvailableTeamsChannels",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "Microsoft Teams team ID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of channels for the specified team",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "channels": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "channel_name": {
                            "type": "string"
                          },
                          "channel_id": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "total_count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/connect_teams": {
      "post": {
        "summary": "connect teams",
        "operationId": "connectTeams",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "connect teams",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "team_id": {
                    "type": "string"
                  },
                  "team_name": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/run_slack_message_test_job": {
      "post": {
        "summary": "run a job that sends a message to Slack",
        "operationId": "runSlackMessageTestJob",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "path to hub script to run and its corresponding args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "hub_script_path": {
                    "type": "string"
                  },
                  "channel": {
                    "type": "string"
                  },
                  "test_msg": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "job_uuid": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/run_teams_message_test_job": {
      "post": {
        "summary": "run a job that sends a message to Teams",
        "operationId": "runTeamsMessageTestJob",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "path to hub script to run and its corresponding args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "hub_script_path": {
                    "type": "string"
                  },
                  "channel": {
                    "type": "string"
                  },
                  "test_msg": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "job_uuid": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_deploy_to": {
      "post": {
        "summary": "edit deploy to",
        "operationId": "editDeployTo",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deploy_to": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_auto_invite": {
      "post": {
        "summary": "edit auto invite",
        "operationId": "editAutoInvite",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceInvite",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "operator": {
                    "type": "boolean"
                  },
                  "invite_all": {
                    "type": "boolean"
                  },
                  "auto_add": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_instance_groups": {
      "post": {
        "summary": "edit instance groups",
        "operationId": "editInstanceGroups",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Instance Groups Configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "groups": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "roles": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_webhook": {
      "post": {
        "summary": "edit webhook",
        "operationId": "editWebhook",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceWebhook",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "webhook": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_copilot_config": {
      "post": {
        "summary": "edit copilot config",
        "operationId": "editCopilotConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceCopilotConfig",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AIConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_copilot_info": {
      "get": {
        "summary": "get copilot info",
        "operationId": "getCopilotInfo",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIConfig"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_error_handler": {
      "post": {
        "summary": "edit error handler",
        "operationId": "editErrorHandler",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceErrorHandler",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditErrorHandler"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_success_handler": {
      "post": {
        "summary": "edit success handler",
        "operationId": "editSuccessHandler",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "WorkspaceSuccessHandler",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditSuccessHandler"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_large_file_storage_config": {
      "post": {
        "summary": "edit large file storage settings",
        "operationId": "editLargeFileStorageConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "LargeFileStorage info",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "large_file_storage": {
                    "$ref": "#/components/schemas/LargeFileStorage"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/list_ducklakes": {
      "get": {
        "summary": "list ducklakes",
        "operationId": "listDucklakes",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/list_datatables": {
      "get": {
        "summary": "list Datatables",
        "operationId": "listDataTables",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/list_datatable_schemas": {
      "get": {
        "summary": "list schemas of all connected Datatables",
        "operationId": "listDataTableSchemas",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "schemas of all datatables",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DataTableSchema"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_ducklake_config": {
      "post": {
        "summary": "edit ducklake settings",
        "operationId": "editDucklakeConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Ducklake settings",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "settings"
                ],
                "properties": {
                  "settings": {
                    "$ref": "#/components/schemas/DucklakeSettings"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_datatable_config": {
      "post": {
        "summary": "edit datatable settings",
        "operationId": "editDataTableConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "DataTable settings",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "settings"
                ],
                "properties": {
                  "settings": {
                    "$ref": "#/components/schemas/DataTableSettings"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_git_sync_config": {
      "post": {
        "summary": "edit workspace git sync settings",
        "operationId": "editWorkspaceGitSyncConfig",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Workspace Git sync settings",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "git_sync_settings": {
                    "$ref": "#/components/schemas/WorkspaceGitSyncSettings"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_git_sync_repository": {
      "post": {
        "summary": "add or update individual git sync repository",
        "operationId": "editGitSyncRepository",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Git sync repository settings to add or update",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "git_repo_resource_path": {
                    "type": "string",
                    "description": "The resource path of the git repository to update"
                  },
                  "repository": {
                    "$ref": "#/components/schemas/GitRepositorySettings"
                  }
                },
                "required": [
                  "git_repo_resource_path",
                  "repository"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/delete_git_sync_repository": {
      "delete": {
        "summary": "delete individual git sync repository",
        "operationId": "deleteGitSyncRepository",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Git sync repository to delete",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "git_repo_resource_path": {
                    "type": "string",
                    "description": "The resource path of the git repository to delete"
                  }
                },
                "required": [
                  "git_repo_resource_path"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_deploy_ui_config": {
      "post": {
        "summary": "edit workspace deploy ui settings",
        "operationId": "editWorkspaceDeployUISettings",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Workspace deploy UI settings",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deploy_ui_settings": {
                    "$ref": "#/components/schemas/WorkspaceDeployUISettings"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/edit_default_app": {
      "post": {
        "summary": "edit default app for workspace",
        "operationId": "editWorkspaceDefaultApp",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Workspace default app",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "default_app_path": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/default_scripts": {
      "post": {
        "summary": "edit default scripts for workspace",
        "operationId": "editDefaultScripts",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Workspace default app",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceDefaultScripts"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "get default scripts for workspace",
        "operationId": "get default scripts",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceDefaultScripts"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/set_environment_variable": {
      "post": {
        "summary": "set environment variable",
        "operationId": "setEnvironmentVariable",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Workspace default app",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/encryption_key": {
      "get": {
        "summary": "retrieves the encryption key for this workspace",
        "operationId": "getWorkspaceEncryptionKey",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "key"
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "update the encryption key for this workspace",
        "operationId": "setWorkspaceEncryptionKey",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "New encryption key",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_key": {
                    "type": "string"
                  },
                  "skip_reencrypt": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "new_key"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/default_app": {
      "get": {
        "summary": "get default app for workspace",
        "operationId": "getWorkspaceDefaultApp",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "default_app_path": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/usage": {
      "get": {
        "summary": "get usage",
        "operationId": "getWorkspaceUsage",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "usage",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/used_triggers": {
      "get": {
        "summary": "get used triggers",
        "operationId": "getUsedTriggers",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "http_routes_used": {
                      "type": "boolean"
                    },
                    "websocket_used": {
                      "type": "boolean"
                    },
                    "kafka_used": {
                      "type": "boolean"
                    },
                    "nats_used": {
                      "type": "boolean"
                    },
                    "postgres_used": {
                      "type": "boolean"
                    },
                    "mqtt_used": {
                      "type": "boolean"
                    },
                    "gcp_used": {
                      "type": "boolean"
                    },
                    "sqs_used": {
                      "type": "boolean"
                    },
                    "email_used": {
                      "type": "boolean"
                    },
                    "nextcloud_used": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "http_routes_used",
                    "websocket_used",
                    "kafka_used",
                    "nats_used",
                    "postgres_used",
                    "mqtt_used",
                    "gcp_used",
                    "sqs_used",
                    "email_used",
                    "nextcloud_used"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/list": {
      "get": {
        "summary": "list users",
        "operationId": "listUsers",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/User"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/list_usage": {
      "get": {
        "summary": "list users usage",
        "operationId": "listUsersUsage",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserUsage"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/list_usernames": {
      "get": {
        "summary": "list usernames",
        "operationId": "listUsernames",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/users/username_to_email/{username}": {
      "get": {
        "summary": "get email from username",
        "operationId": "usernameToEmail",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "email",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/tokens/list/scopes": {
      "get": {
        "summary": "list of available scopes",
        "operationId": "ListAvailableScopes",
        "tags": [
          "token"
        ],
        "responses": {
          "200": {
            "description": "list of available scopes",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScopeDomain"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/users/tokens/create": {
      "post": {
        "summary": "create token",
        "operationId": "createToken",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "new token",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewToken"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "token created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/tokens/impersonate": {
      "post": {
        "summary": "create token to impersonate a user (require superadmin)",
        "operationId": "createTokenImpersonate",
        "tags": [
          "user"
        ],
        "requestBody": {
          "description": "new token",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewTokenImpersonate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "token created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/tokens/delete/{token_prefix}": {
      "delete": {
        "summary": "delete token",
        "operationId": "deleteToken",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "token_prefix",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "delete token",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/users/tokens/list": {
      "get": {
        "summary": "list token",
        "operationId": "listTokens",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "name": "exclude_ephemeral",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "truncated token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TruncatedToken"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oidc/token/{audience}": {
      "post": {
        "summary": "get OIDC token (ee only)",
        "operationId": "getOidcToken",
        "tags": [
          "oidc"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "audience",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "expires_in",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "new oidc token",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/create": {
      "post": {
        "summary": "create variable",
        "operationId": "createVariable",
        "x-mcp-tool": true,
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "already_encrypted",
            "description": "whether the variable is already encrypted (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "new variable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVariable"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "variable created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/encrypt": {
      "post": {
        "summary": "encrypt value",
        "operationId": "encryptValue",
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new variable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "encrypted value",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/delete/{path}": {
      "delete": {
        "summary": "delete variable",
        "operationId": "deleteVariable",
        "x-mcp-tool": true,
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "variable deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/delete_bulk": {
      "delete": {
        "summary": "delete variables in bulk",
        "operationId": "deleteVariablesBulk",
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "paths to delete",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "paths": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "paths"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "deleted paths",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/update/{path}": {
      "post": {
        "summary": "update variable",
        "operationId": "updateVariable",
        "x-mcp-tool": true,
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "already_encrypted",
            "description": "whether the variable is already encrypted (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "updated variable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditVariable"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "variable updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/get/{path}": {
      "get": {
        "summary": "get variable",
        "operationId": "getVariable",
        "x-mcp-tool": true,
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "decrypt_secret",
            "description": "ask to decrypt secret if this variable is secret\n(if not secret no effect, default: true)\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_encrypted",
            "description": "ask to include the encrypted value if secret and decrypt secret is not true (default: false)\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "variable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListableVariable"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/get_value/{path}": {
      "get": {
        "summary": "get variable value",
        "operationId": "getVariableValue",
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "allow_cache",
            "description": "allow getting a cached value for improved performance\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "variable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/exists/{path}": {
      "get": {
        "summary": "does variable exists at path",
        "operationId": "existsVariable",
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "variable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/list": {
      "get": {
        "summary": "list variables",
        "operationId": "listVariable",
        "x-mcp-tool": true,
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "path_start",
            "description": "filter variables by path prefix",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "variable list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ListableVariable"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/variables/list_contextual": {
      "get": {
        "summary": "list contextual variables",
        "operationId": "listContextualVariables",
        "tags": [
          "variable"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "contextual variable list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ContextualVariable"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/get_secondary_storage_names": {
      "get": {
        "summary": "get secondary storage names",
        "operationId": "getSecondaryStorageNames",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "include_default",
            "in": "query",
            "description": "If true, include \"_default_\" in the list if primary workspace storage is set",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/critical_alerts": {
      "get": {
        "summary": "Get all critical alerts for this workspace",
        "operationId": "workspaceGetCriticalAlerts",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer",
              "default": 1,
              "description": "The page number to retrieve (minimum value is 1)"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "description": "Number of alerts per page (maximum is 100)"
            }
          },
          {
            "in": "query",
            "name": "acknowledged",
            "schema": {
              "type": "boolean",
              "nullable": true,
              "description": "Filter by acknowledgment status; true for acknowledged, false for unacknowledged, and omit for all alerts"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved all critical alerts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "alerts": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CriticalAlert"
                      }
                    },
                    "total_rows": {
                      "type": "integer",
                      "description": "Total number of rows matching the query.",
                      "example": 100
                    },
                    "total_pages": {
                      "type": "integer",
                      "description": "Total number of pages based on the page size.",
                      "example": 10
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/critical_alerts/{id}/acknowledge": {
      "post": {
        "summary": "Acknowledge a critical alert for this workspace",
        "operationId": "workspaceAcknowledgeCriticalAlert",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The ID of the critical alert to acknowledge"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully acknowledged the critical alert",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Critical alert acknowledged"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/critical_alerts/acknowledge_all": {
      "post": {
        "summary": "Acknowledge all unacknowledged critical alerts for this workspace",
        "operationId": "workspaceAcknowledgeAllCriticalAlerts",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully acknowledged all unacknowledged critical alerts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "All unacknowledged critical alerts acknowledged"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/critical_alerts/mute": {
      "post": {
        "summary": "Mute critical alert UI for this workspace",
        "operationId": "workspaceMuteCriticalAlertsUI",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Boolean flag to mute critical alerts.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mute_critical_alerts": {
                    "type": "boolean",
                    "description": "Whether critical alerts should be muted.",
                    "example": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated mute critical alert settings.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Updated mute critical alert UI settings for workspace: workspace_id"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspaces/protection_rules": {
      "get": {
        "summary": "list all protection rules for a workspace",
        "operationId": "listProtectionRules",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of protection rules",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProtectionRuleset"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "create a new protection rule",
        "operationId": "createProtectionRule",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "New protection rule configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "rules",
                  "bypass_groups",
                  "bypass_users"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Unique name for the protection rule",
                    "example": "Production Protection"
                  },
                  "rules": {
                    "$ref": "#/components/schemas/ProtectionRules"
                  },
                  "bypass_groups": {
                    "$ref": "#/components/schemas/RuleBypasserGroups"
                  },
                  "bypass_users": {
                    "$ref": "#/components/schemas/RuleBypasserUsers"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "protection rule created successfully",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "rule with this name already exists"
          }
        }
      }
    },
    "/w/{workspace}/workspaces/protection_rules/{rule_name}": {
      "post": {
        "summary": "update an existing protection rule",
        "operationId": "updateProtectionRule",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "rule_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the protection rule to update"
          }
        ],
        "requestBody": {
          "description": "Updated protection rule configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "rules",
                  "bypass_groups",
                  "bypass_users"
                ],
                "properties": {
                  "rules": {
                    "$ref": "#/components/schemas/ProtectionRules"
                  },
                  "bypass_groups": {
                    "$ref": "#/components/schemas/RuleBypasserGroups"
                  },
                  "bypass_users": {
                    "$ref": "#/components/schemas/RuleBypasserUsers"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "protection rule updated successfully",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "protection rule not found"
          }
        }
      },
      "delete": {
        "summary": "delete a protection rule",
        "operationId": "deleteProtectionRule",
        "tags": [
          "workspace"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "rule_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the protection rule to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "protection rule deleted successfully",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "protection rule not found"
          }
        }
      }
    },
    "/w/{workspace}/workspaces/public_app_rate_limit": {
      "post": {
        "summary": "Set public app rate limit for this workspace",
        "operationId": "setPublicAppRateLimit",
        "tags": [
          "setting"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Public app rate limit configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "public_app_execution_limit_per_minute": {
                    "type": "integer",
                    "description": "Rate limit for public app executions per minute per server. NULL or 0 to disable.",
                    "example": 100
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated public app rate limit settings.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Updated public app rate limit for workspace: workspace_id"
                }
              }
            }
          }
        }
      }
    },
    "/oauth/login_callback/{client_name}": {
      "post": {
        "security": [],
        "summary": "login with oauth authorization flow",
        "operationId": "loginWithOauth",
        "tags": [
          "user"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ClientName"
          }
        ],
        "requestBody": {
          "description": "Partially filled script",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully authenticated. The session ID is returned in a cookie named `token` and as plaintext response. Preferred method of authorization is through the bearer token. The cookie is only for browser convenience.\n",
            "headers": {
              "Set-Cookie": {
                "schema": {
                  "type": "string",
                  "example": "token=abcde12345; Path=/; HttpOnly"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oauth/connect_slack_callback": {
      "post": {
        "summary": "connect slack callback",
        "operationId": "connectSlackCallback",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "code endpoint",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "state"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "slack token",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/oauth/connect_slack_callback": {
      "post": {
        "summary": "connect slack callback instance",
        "operationId": "connectSlackCallbackInstance",
        "tags": [
          "oauth"
        ],
        "requestBody": {
          "description": "code endpoint",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "state"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "success message",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/oauth/connect_callback/{client_name}": {
      "post": {
        "summary": "connect callback",
        "operationId": "connectCallback",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ClientName"
          }
        ],
        "requestBody": {
          "description": "code endpoint",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "state"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "oauth token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oauth/create_account": {
      "post": {
        "summary": "create OAuth account",
        "operationId": "createAccount",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "code endpoint",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "refresh_token": {
                    "type": "string",
                    "description": "OAuth refresh token. For authorization_code flow, this contains the actual refresh token. For client_credentials flow, this must be set to an empty string."
                  },
                  "expires_in": {
                    "type": "integer"
                  },
                  "client": {
                    "type": "string"
                  },
                  "grant_type": {
                    "type": "string",
                    "default": "authorization_code"
                  },
                  "cc_client_id": {
                    "type": "string",
                    "description": "OAuth client ID for resource-level credentials (client_credentials flow only)"
                  },
                  "cc_client_secret": {
                    "type": "string",
                    "description": "OAuth client secret for resource-level credentials (client_credentials flow only)"
                  },
                  "cc_token_url": {
                    "type": "string",
                    "description": "OAuth token URL override for resource-level authentication (client_credentials flow only)"
                  },
                  "mcp_server_url": {
                    "type": "string",
                    "description": "MCP server URL for MCP OAuth token refresh"
                  }
                },
                "required": [
                  "refresh_token",
                  "expires_in",
                  "client"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "account set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/oauth/connect_client_credentials/{client}": {
      "post": {
        "summary": "connect OAuth using client credentials",
        "operationId": "connectClientCredentials",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "name": "client",
            "in": "path",
            "description": "OAuth client name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "client credentials flow parameters",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "scopes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "cc_client_id": {
                    "type": "string",
                    "description": "OAuth client ID for resource-level authentication"
                  },
                  "cc_client_secret": {
                    "type": "string",
                    "description": "OAuth client secret for resource-level authentication"
                  },
                  "cc_token_url": {
                    "type": "string",
                    "description": "OAuth token URL override for resource-level authentication"
                  }
                },
                "required": [
                  "cc_client_id",
                  "cc_client_secret"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OAuth token response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oauth/refresh_token/{id}": {
      "post": {
        "summary": "refresh token",
        "operationId": "refreshToken",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/AccountId"
          }
        ],
        "requestBody": {
          "description": "variable path",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  }
                },
                "required": [
                  "path"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "token refreshed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oauth/disconnect/{id}": {
      "post": {
        "summary": "disconnect account",
        "operationId": "disconnectAccount",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/AccountId"
          }
        ],
        "responses": {
          "200": {
            "description": "disconnected client",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oauth/disconnect_slack": {
      "post": {
        "summary": "disconnect slack",
        "operationId": "disconnectSlack",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "disconnected slack",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/oauth/disconnect_teams": {
      "post": {
        "summary": "disconnect teams",
        "operationId": "disconnectTeams",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "disconnected teams",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/oauth/list_logins": {
      "get": {
        "summary": "list oauth logins",
        "operationId": "listOAuthLogins",
        "tags": [
          "oauth"
        ],
        "responses": {
          "200": {
            "description": "list of oauth and saml login clients",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "oauth": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string"
                          },
                          "display_name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "type"
                        ]
                      }
                    },
                    "saml": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "oauth"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/oauth/list_connects": {
      "get": {
        "summary": "list oauth connects",
        "operationId": "listOAuthConnects",
        "tags": [
          "oauth"
        ],
        "responses": {
          "200": {
            "description": "list of oauth connects clients",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/oauth/get_connect/{client}": {
      "get": {
        "summary": "get oauth connect",
        "operationId": "getOAuthConnect",
        "tags": [
          "oauth"
        ],
        "parameters": [
          {
            "name": "client",
            "description": "client name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "get",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "extra_params": {
                      "type": "object"
                    },
                    "scopes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "grant_types": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/teams/activities": {
      "post": {
        "summary": "send update to Microsoft Teams activity",
        "description": "Respond to a Microsoft Teams activity after a workspace command is run",
        "operationId": "sendMessageToConversation",
        "tags": [
          "teams"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "conversation_id",
                  "text"
                ],
                "properties": {
                  "conversation_id": {
                    "type": "string",
                    "description": "The ID of the Teams conversation/activity"
                  },
                  "success": {
                    "type": "boolean",
                    "description": "Used for styling the card conditionally",
                    "default": true
                  },
                  "text": {
                    "type": "string",
                    "description": "The message text to be sent in the Teams card"
                  },
                  "card_block": {
                    "type": "object",
                    "description": "The card block to be sent in the Teams card"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Activity processed successfully"
          }
        }
      }
    },
    "/w/{workspace}/resources/create": {
      "post": {
        "summary": "create resource",
        "operationId": "createResource",
        "x-mcp-tool": true,
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "update_if_exists",
            "description": "update the resource if it already exists (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "new resource",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateResource"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "resource created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/delete/{path}": {
      "delete": {
        "summary": "delete resource",
        "operationId": "deleteResource",
        "x-mcp-tool": true,
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "resource deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/delete_bulk": {
      "delete": {
        "summary": "delete resources in bulk",
        "operationId": "deleteResourcesBulk",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "paths to delete",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "paths": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "paths"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "deleted paths",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/update/{path}": {
      "post": {
        "summary": "update resource",
        "operationId": "updateResource",
        "x-mcp-tool": true,
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated resource",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditResource"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "resource updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/update_value/{path}": {
      "post": {
        "summary": "update resource value",
        "operationId": "updateResourceValue",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated resource",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "resource value updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/get/{path}": {
      "get": {
        "summary": "get resource",
        "operationId": "getResource",
        "x-mcp-tool": true,
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Resource"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/get_value_interpolated/{path}": {
      "get": {
        "summary": "get resource interpolated (variables and resources are fully unrolled)",
        "operationId": "getResourceValueInterpolated",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "job_id",
            "description": "job id",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "allow_cache",
            "description": "allow getting a cached value for improved performance",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "resource value",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/get_value/{path}": {
      "get": {
        "summary": "get resource value",
        "operationId": "getResourceValue",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "resource value",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/git_commit_hash/{path}": {
      "get": {
        "summary": "get git repository latest commit hash",
        "operationId": "getGitCommitHash",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "git_ssh_identity",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "git commit hash",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "commit_hash": {
                      "type": "string",
                      "description": "Latest commit hash from git ls-remote"
                    }
                  },
                  "required": [
                    "commit_hash"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/exists/{path}": {
      "get": {
        "summary": "does resource exists",
        "operationId": "existsResource",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "does resource exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/list": {
      "get": {
        "summary": "list resources",
        "operationId": "listResource",
        "x-mcp-tool": true,
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "resource_type",
            "description": "resource_types to list from, separated by ',',",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource_type_exclude",
            "description": "resource_types to not list from, separated by ',',",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "path_start",
            "description": "filter resources by path prefix",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "resource list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ListableResource"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/list_search": {
      "get": {
        "summary": "list resources for search",
        "operationId": "listSearchResource",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "resource list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "value": {}
                    },
                    "required": [
                      "path",
                      "value"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/mcp_tools/{path}": {
      "get": {
        "summary": "get MCP tools from resource",
        "operationId": "getMcpTools",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "list of MCP tools",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "parameters": {
                        "type": "object"
                      }
                    },
                    "required": [
                      "name",
                      "parameters"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/list_names/{name}": {
      "get": {
        "summary": "list resource names",
        "operationId": "listResourceNames",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "resource list names",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "path"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/create": {
      "post": {
        "summary": "create resource_type",
        "operationId": "createResourceType",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new resource_type",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceType"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "resource_type created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/file_resource_type_to_file_ext_map": {
      "get": {
        "summary": "get map from resource type to format extension",
        "operationId": "fileResourceTypeToFileExtMap",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "map from resource type to file ext",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/delete/{path}": {
      "delete": {
        "summary": "delete resource_type",
        "operationId": "deleteResourceType",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "resource_type deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/update/{path}": {
      "post": {
        "summary": "update resource_type",
        "operationId": "updateResourceType",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated resource_type",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditResourceType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "resource_type updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/get/{path}": {
      "get": {
        "summary": "get resource_type",
        "operationId": "getResourceType",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "resource_type deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceType"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/exists/{path}": {
      "get": {
        "summary": "does resource_type exists",
        "operationId": "existsResourceType",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "does resource_type exist",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/list": {
      "get": {
        "summary": "list resource_types",
        "operationId": "listResourceType",
        "x-mcp-tool": true,
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "resource_type list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceType"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/resources/type/listnames": {
      "get": {
        "summary": "list resource_types names",
        "operationId": "listResourceTypeNames",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "resource_type list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/npm_proxy/metadata/{package}": {
      "get": {
        "summary": "get npm package metadata from private registry",
        "operationId": "getNpmPackageMetadata",
        "tags": [
          "npm_proxy"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "package",
            "description": "npm package name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "package metadata",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tags": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "versions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/npm_proxy/resolve/{package}": {
      "get": {
        "summary": "resolve npm package version from private registry",
        "operationId": "resolveNpmPackageVersion",
        "tags": [
          "npm_proxy"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "package",
            "description": "npm package name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "description": "version tag or reference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "resolved version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "version": {
                      "type": "string",
                      "nullable": true
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/npm_proxy/filetree/{package}/{version}": {
      "get": {
        "summary": "get npm package file tree from private registry",
        "operationId": "getNpmPackageFiletree",
        "tags": [
          "npm_proxy"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "package",
            "description": "npm package name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "description": "package version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "package file tree",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "default": {
                      "type": "string"
                    },
                    "files": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/npm_proxy/file/{package}/{version}/{filepath}": {
      "get": {
        "summary": "get specific file from npm package in private registry",
        "operationId": "getNpmPackageFile",
        "tags": [
          "npm_proxy"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "package",
            "description": "npm package name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "description": "package version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filepath",
            "description": "file path within package",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "file content",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/embeddings/query_resource_types": {
      "get": {
        "summary": "query resource types by similarity",
        "operationId": "queryResourceTypes",
        "tags": [
          "resource"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "text",
            "description": "query text",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "query limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "resource type details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "score": {
                        "type": "number"
                      },
                      "schema": {}
                    },
                    "required": [
                      "name",
                      "score"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/integrations/hub/list": {
      "get": {
        "summary": "list hub integrations",
        "operationId": "listHubIntegrations",
        "tags": [
          "integration"
        ],
        "parameters": [
          {
            "name": "kind",
            "description": "query integrations kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "integrations details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/flows/hub/list": {
      "get": {
        "summary": "list all hub flows",
        "operationId": "listHubFlows",
        "tags": [
          "flow"
        ],
        "responses": {
          "200": {
            "description": "hub flows list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "flows": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "flow_id": {
                            "type": "number"
                          },
                          "summary": {
                            "type": "string"
                          },
                          "apps": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "approved": {
                            "type": "boolean"
                          },
                          "votes": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "flow_id",
                          "summary",
                          "apps",
                          "approved",
                          "votes"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/flows/hub/get/{id}": {
      "get": {
        "summary": "get hub flow by id",
        "operationId": "getHubFlowById",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PathId"
          }
        ],
        "responses": {
          "200": {
            "description": "flow",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "flow": {
                      "$ref": "#/components/schemas/OpenFlow"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/apps/hub/list": {
      "get": {
        "summary": "list all hub apps",
        "operationId": "listHubApps",
        "tags": [
          "app"
        ],
        "responses": {
          "200": {
            "description": "hub apps list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "apps": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "app_id": {
                            "type": "number"
                          },
                          "summary": {
                            "type": "string"
                          },
                          "apps": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "approved": {
                            "type": "boolean"
                          },
                          "votes": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "app_id",
                          "summary",
                          "apps",
                          "approved",
                          "votes"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/apps/hub/get/{id}": {
      "get": {
        "summary": "get hub app by id",
        "operationId": "getHubAppById",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PathId"
          }
        ],
        "responses": {
          "200": {
            "description": "app",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "app": {
                      "type": "object",
                      "properties": {
                        "summary": {
                          "type": "string"
                        },
                        "value": {}
                      },
                      "required": [
                        "summary",
                        "value"
                      ]
                    }
                  },
                  "required": [
                    "app"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/apps/hub/get_raw/{id}": {
      "get": {
        "summary": "get hub raw app by id",
        "operationId": "getHubRawAppById",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PathId"
          }
        ],
        "responses": {
          "200": {
            "description": "raw app",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "app": {
                      "type": "object",
                      "properties": {
                        "summary": {
                          "type": "string"
                        },
                        "value": {}
                      },
                      "required": [
                        "summary",
                        "value"
                      ]
                    }
                  },
                  "required": [
                    "app"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/apps_u/public_app_by_custom_path/{custom_path}": {
      "get": {
        "summary": "get public app by custom path",
        "operationId": "getPublicAppByCustomPath",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CustomPath"
          }
        ],
        "responses": {
          "200": {
            "description": "app details",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/AppWithLastVersion"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "workspace_id": {
                          "type": "string"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/scripts/hub/get/{path}": {
      "get": {
        "summary": "get hub script content by path",
        "operationId": "getHubScriptContentByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/scripts/hub/get_full/{path}": {
      "get": {
        "summary": "get full hub script by path",
        "operationId": "getHubScriptByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "content": {
                      "type": "string"
                    },
                    "lockfile": {
                      "type": "string"
                    },
                    "schema": {},
                    "language": {
                      "type": "string"
                    },
                    "summary": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "content",
                    "language"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/scripts/hub/pick/{path}": {
      "get": {
        "summary": "record hub script pick",
        "operationId": "pickHubScriptByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script pick recorded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "success"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/scripts/hub/top": {
      "get": {
        "summary": "get top hub scripts",
        "operationId": "getTopHubScripts",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "name": "limit",
            "description": "query limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "app",
            "description": "query scripts app",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "description": "query scripts kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "hub scripts list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "asks": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "ask_id": {
                            "type": "number"
                          },
                          "summary": {
                            "type": "string"
                          },
                          "app": {
                            "type": "string"
                          },
                          "version_id": {
                            "type": "number"
                          },
                          "kind": {
                            "$ref": "#/components/schemas/HubScriptKind"
                          },
                          "votes": {
                            "type": "number"
                          },
                          "views": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "ask_id",
                          "summary",
                          "app",
                          "version_id",
                          "kind",
                          "views",
                          "votes"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/embeddings/query_hub_scripts": {
      "get": {
        "summary": "query hub scripts by similarity",
        "operationId": "queryHubScripts",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "name": "text",
            "description": "query text",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "description": "query scripts kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "description": "query limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "app",
            "description": "query scripts app",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "ask_id": {
                        "type": "number"
                      },
                      "id": {
                        "type": "number"
                      },
                      "version_id": {
                        "type": "number"
                      },
                      "summary": {
                        "type": "string"
                      },
                      "app": {
                        "type": "string"
                      },
                      "kind": {
                        "$ref": "#/components/schemas/HubScriptKind"
                      },
                      "score": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "ask_id",
                      "id",
                      "version_id",
                      "summary",
                      "app",
                      "kind",
                      "score"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/list_search": {
      "get": {
        "summary": "list scripts for search",
        "operationId": "listSearchScript",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "script list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "content": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "path",
                      "content"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/list": {
      "get": {
        "summary": "list all scripts",
        "operationId": "listScripts",
        "x-mcp-tool": true,
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "name": "path_start",
            "description": "mask to filter matching starting path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "path_exact",
            "description": "mask to filter exact matching path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "first_parent_hash",
            "description": "mask to filter scripts whom first direct parent has exact hash",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "last_parent_hash",
            "description": "mask to filter scripts whom last parent in the chain has exact hash.\nBeware that each script stores only a limited number of parents. Hence\nthe last parent hash for a script is not necessarily its top-most parent.\nTo find the top-most parent you will have to jump from last to last hash\n until finding the parent\n",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "parent_hash",
            "description": "is the hash present in the array of stored parent hashes for this script.\nThe same warning applies than for last_parent_hash. A script only store a\nlimited number of direct parent\n",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "show_archived",
            "description": "(default false)\nshow only the archived files.\nwhen multiple archived hash share the same path, only the ones with the latest create_at\nare\ned.\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_without_main",
            "description": "(default false)\ninclude scripts without an exported main function\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_draft_only",
            "description": "(default false)\ninclude scripts that have no deployed version\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_template",
            "description": "(default regardless)\nif true show only the templates\nif false show only the non templates\nif not defined, show all regardless of if the script is a template\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "kinds",
            "description": "(default regardless)\nscript kinds to filter, split by comma\n",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "starred_only",
            "description": "(default false)\nshow only the starred items\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "with_deployment_msg",
            "description": "(default false)\ninclude deployment message\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "languages",
            "in": "query",
            "description": "Filter to only include scripts written in the given languages.\nAccepts multiple values as a comma-separated list.\n",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "without_description",
            "in": "query",
            "description": "(default false)\nIf true, the description field will be omitted from the response.\n",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "dedicated_worker",
            "in": "query",
            "description": "(default regardless)\nIf true, show only scripts with dedicated_worker enabled.\nIf false, show only scripts with dedicated_worker disabled.\n",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All scripts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Script"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/list_paths": {
      "get": {
        "summary": "list all scripts paths",
        "operationId": "listScriptPaths",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of script paths",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/drafts/create": {
      "post": {
        "summary": "create draft",
        "operationId": "createDraft",
        "tags": [
          "draft"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  },
                  "typ": {
                    "type": "string",
                    "enum": [
                      "flow",
                      "script",
                      "app"
                    ]
                  },
                  "value": {}
                },
                "required": [
                  "path",
                  "typ",
                  "enum"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "draft created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/drafts/delete/{kind}/{path}": {
      "delete": {
        "summary": "delete draft",
        "operationId": "deleteDraft",
        "tags": [
          "draft"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "script",
                "flow",
                "app"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "draft deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/create": {
      "post": {
        "summary": "create script",
        "operationId": "createScript",
        "x-mcp-tool": true,
        "x-mcp-instructions": "To create a script, specify the path (e.g., 'f/my_folder/my_script'), the content (source code), and the language. For TypeScript, use 'bun' unless deno-specific APIs are needed.",
        "x-mcp-tool-include-fields": [
          "path",
          "content",
          "language",
          "summary",
          "description",
          "kind",
          "tag",
          "deployment_message"
        ],
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Partially filled script",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewScript"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "script created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/toggle_workspace_error_handler/p/{path}": {
      "post": {
        "summary": "Toggle ON and OFF the workspace error handler for a given script",
        "operationId": "toggleWorkspaceErrorHandlerForScript",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "Workspace error handler enabled",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "muted": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "error handler toggled",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/workers/custom_tags": {
      "get": {
        "summary": "get all instance custom tags (tags are used to dispatch jobs to different worker groups)",
        "operationId": "getCustomTags",
        "tags": [
          "worker"
        ],
        "parameters": [
          {
            "name": "show_workspace_restriction",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "list of custom tags",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workers/custom_tags": {
      "get": {
        "summary": "get custom tags available for this workspace",
        "operationId": "getCustomTagsForWorkspace",
        "tags": [
          "worker"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of custom tags for workspace",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/get_default_tags": {
      "get": {
        "summary": "get all instance default tags",
        "operationId": "geDefaultTags",
        "tags": [
          "worker"
        ],
        "responses": {
          "200": {
            "description": "list of default tags",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/is_default_tags_per_workspace": {
      "get": {
        "summary": "is default tags per workspace",
        "operationId": "isDefaultTagsPerWorkspace",
        "tags": [
          "worker"
        ],
        "responses": {
          "200": {
            "description": "is the default tags per workspace",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspace_dependencies/create": {
      "post": {
        "summary": "create workspace dependencies",
        "operationId": "createWorkspaceDependencies",
        "tags": [
          "workspace_dependencies"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "New workspace dependencies",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewWorkspaceDependencies"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "workspace dependencies created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspace_dependencies/archive/{language}": {
      "post": {
        "summary": "archive workspace dependencies (require admin)",
        "operationId": "archiveWorkspaceDependencies",
        "tags": [
          "workspace_dependencies"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "language",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ScriptLang"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspace_dependencies/delete/{language}": {
      "post": {
        "summary": "delete workspace dependencies (require admin)",
        "operationId": "deleteWorkspaceDependencies",
        "tags": [
          "workspace_dependencies"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "language",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ScriptLang"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspace_dependencies/list": {
      "get": {
        "summary": "list all workspace dependencies",
        "operationId": "listWorkspaceDependencies",
        "tags": [
          "workspace_dependencies"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "All workspace dependencies",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkspaceDependencies"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/workspace_dependencies/get_latest/{language}": {
      "get": {
        "summary": "get latest workspace dependencies by language and name",
        "operationId": "getLatestWorkspaceDependencies",
        "tags": [
          "workspace_dependencies"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "language",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ScriptLang"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Latest workspace dependencies",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceDependencies"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/archive/p/{path}": {
      "post": {
        "summary": "archive script by path",
        "operationId": "archiveScriptByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script archived",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/archive/h/{hash}": {
      "post": {
        "summary": "archive script by hash",
        "operationId": "archiveScriptByHash",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptHash"
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Script"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/delete/h/{hash}": {
      "post": {
        "summary": "delete script by hash (erase content but keep hash, require admin)",
        "operationId": "deleteScriptByHash",
        "x-mcp-tool": true,
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptHash"
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Script"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/delete/p/{path}": {
      "post": {
        "summary": "delete script at a given path (require admin)",
        "operationId": "deleteScriptByPath",
        "x-mcp-tool": true,
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "keep_captures",
            "description": "keep captures",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "script path",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/delete_bulk": {
      "delete": {
        "summary": "delete scripts in bulk",
        "operationId": "deleteScriptsBulk",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "paths to delete",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "paths": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "paths"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "deleted paths",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/get/p/{path}": {
      "get": {
        "summary": "get script by path",
        "operationId": "getScriptByPath",
        "x-mcp-tool": true,
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "with_starred_info",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Script"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/get_triggers_count/{path}": {
      "get": {
        "summary": "get triggers count of script",
        "operationId": "getTriggersCountOfScript",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "triggers count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggersCount"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/list_tokens/{path}": {
      "get": {
        "summary": "get tokens with script scope",
        "operationId": "listTokensOfScript",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "tokens list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TruncatedToken"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/get/draft/{path}": {
      "get": {
        "summary": "get script by path with draft",
        "operationId": "getScriptByPathWithDraft",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NewScriptWithDraft"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/history/p/{path}": {
      "get": {
        "summary": "get history of a script by path",
        "operationId": "getScriptHistoryByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScriptHistory"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/list_paths_from_workspace_runnable/{path}": {
      "get": {
        "summary": "list script paths using provided script as a relative import",
        "operationId": "listScriptPathsFromWorkspaceRunnable",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "list of script paths",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/get_latest_version/{path}": {
      "get": {
        "summary": "get scripts's latest version (hash)",
        "operationId": "getScriptLatestVersion",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "tags": [
          "script"
        ],
        "responses": {
          "200": {
            "description": "Script version/hash",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScriptHistory"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/history_update/h/{hash}/p/{path}": {
      "post": {
        "summary": "update history of a script",
        "operationId": "updateScriptHistory",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptHash"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "Script deployment message",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deployment_msg": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/raw/p/{path}": {
      "get": {
        "summary": "raw script by path",
        "operationId": "rawScriptByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script content",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/scripts_u/tokened_raw/{workspace}/{token}/{path}": {
      "get": {
        "summary": "raw script by path with a token (mostly used by lsp to be used with import maps to resolve scripts)",
        "operationId": "rawScriptByPathTokened",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Token"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script content",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/exists/p/{path}": {
      "get": {
        "summary": "exists script by path",
        "operationId": "existsScriptByPath",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "does it exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/get/h/{hash}": {
      "get": {
        "summary": "get script by hash",
        "operationId": "getScriptByHash",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptHash"
          },
          {
            "name": "with_starred_info",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "authed",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Script"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/raw/h/{path}": {
      "get": {
        "summary": "raw script by hash",
        "operationId": "rawScriptByHash",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "script content",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/scripts/deployment_status/h/{hash}": {
      "get": {
        "summary": "get script deployment status",
        "operationId": "getScriptDeploymentStatus",
        "tags": [
          "script"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptHash"
          }
        ],
        "responses": {
          "200": {
            "description": "script details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lock": {
                      "type": "string"
                    },
                    "lock_error_logs": {
                      "type": "string"
                    },
                    "job_id": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/list_selected_job_groups": {
      "post": {
        "summary": "list selected jobs script/flow schemas grouped by (kind, path)",
        "operationId": "listSelectedJobGroups",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "result",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "enum": [
                          "script",
                          "flow"
                        ]
                      },
                      "script_path": {
                        "type": "string"
                      },
                      "latest_schema": {
                        "type": "object"
                      },
                      "schemas": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "schema": {
                              "type": "object"
                            },
                            "script_hash": {
                              "type": "string"
                            },
                            "job_ids": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "required": [
                            "schema",
                            "script_hash",
                            "job_ids"
                          ]
                        }
                      }
                    },
                    "required": [
                      "kind",
                      "script_path",
                      "latest_schema",
                      "schemas"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/p/{path}": {
      "post": {
        "summary": "run script by path",
        "operationId": "runScriptByPath",
        "x-mcp-tool": true,
        "x-mcp-instructions": "You should first use getScriptByPath to retrieve the script's schema and understand what arguments are expected.",
        "x-mcp-tool-include-query-params": [],
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "scheduled_for",
            "description": "when to schedule this job (leave empty for immediate run)",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "scheduled_in_secs",
            "description": "schedule the script to execute in the number of seconds starting now",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "skip_preprocessor",
            "description": "skip the preprocessor",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the script owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_wait_result/p/{path}": {
      "post": {
        "summary": "run script by path",
        "operationId": "runWaitResultScriptByPath",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      },
      "get": {
        "summary": "run script by path with get",
        "operationId": "runWaitResultScriptByPathGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          }
        ],
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_wait_result/f/{path}": {
      "post": {
        "summary": "run flow by path and wait until completion",
        "operationId": "runWaitResultFlowByPath",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_wait_result/fv/{version}": {
      "post": {
        "summary": "run flow by version and wait until completion",
        "operationId": "runWaitResultFlowByVersion",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "description": "flow version ID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      },
      "get": {
        "summary": "run flow by version with GET and wait until completion",
        "operationId": "runWaitResultFlowByVersionGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "description": "flow version ID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_and_stream/f/{path}": {
      "post": {
        "summary": "run flow by path and stream updates via SSE",
        "operationId": "runAndStreamFlowByPath",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "flow args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "run flow by path with GET and stream updates via SSE",
        "operationId": "runAndStreamFlowByPathGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_and_stream/fv/{version}": {
      "post": {
        "summary": "run flow by version and stream updates via SSE",
        "operationId": "runAndStreamFlowByVersion",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "description": "flow version ID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "flow args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "run flow by version with GET and stream updates via SSE",
        "operationId": "runAndStreamFlowByVersionGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "description": "flow version ID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_and_stream/p/{path}": {
      "post": {
        "summary": "run script by path and stream updates via SSE",
        "operationId": "runAndStreamScriptByPath",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "run script by path with GET and stream updates via SSE",
        "operationId": "runAndStreamScriptByPathGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_and_stream/h/{hash}": {
      "post": {
        "summary": "run script by hash and stream updates via SSE",
        "operationId": "runAndStreamScriptByHash",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "hash",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "script args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "run script by hash with GET and stream updates via SSE",
        "operationId": "runAndStreamScriptByHashGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "hash",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "$ref": "#/components/parameters/QueueLimit"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "name": "poll_delay_ms",
            "description": "delay between polling for job updates in milliseconds",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/result_by_id/{flow_job_id}/{node_id}": {
      "get": {
        "summary": "get job result by id",
        "operationId": "resultById",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "flow_job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "node_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/list_paths": {
      "get": {
        "summary": "list all flow paths",
        "operationId": "listFlowPaths",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of flow paths",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/list_search": {
      "get": {
        "summary": "list flows for search",
        "operationId": "listSearchFlow",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "flow list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "value": {}
                    },
                    "required": [
                      "path",
                      "value"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/list": {
      "get": {
        "summary": "list all flows",
        "operationId": "listFlows",
        "x-mcp-tool": true,
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "name": "path_start",
            "description": "mask to filter matching starting path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "path_exact",
            "description": "mask to filter exact matching path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "show_archived",
            "description": "(default false)\nshow only the archived files.\nwhen multiple archived hash share the same path, only the ones with the latest create_at\nare displayed.\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "starred_only",
            "description": "(default false)\nshow only the starred items\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_draft_only",
            "description": "(default false)\ninclude items that have no deployed version\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "with_deployment_msg",
            "description": "(default false)\ninclude deployment message\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "without_description",
            "in": "query",
            "description": "(default false)\nIf true, the description field will be omitted from the response.\n",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "dedicated_worker",
            "in": "query",
            "description": "(default regardless)\nIf true, show only flows with dedicated_worker enabled.\nIf false, show only flows with dedicated_worker disabled.\n",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All flow",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/Flow"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "has_draft": {
                            "type": "boolean"
                          },
                          "draft_only": {
                            "type": "boolean"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/history/p/{path}": {
      "get": {
        "summary": "get flow history by path",
        "operationId": "getFlowHistory",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "tags": [
          "flow"
        ],
        "responses": {
          "200": {
            "description": "Flow history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlowVersion"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/get_latest_version/{path}": {
      "get": {
        "summary": "get flow's latest version",
        "operationId": "getFlowLatestVersion",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "tags": [
          "flow"
        ],
        "responses": {
          "200": {
            "description": "Flow version",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowVersion"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/list_paths_from_workspace_runnable/{runnable_kind}/{path}": {
      "get": {
        "summary": "list flow paths from workspace runnable",
        "operationId": "listFlowPathsFromWorkspaceRunnable",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableKind"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "match_path_start",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "list of flow paths",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/get/v/{version}": {
      "get": {
        "summary": "get flow version",
        "operationId": "getFlowVersion",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "tags": [
          "flow"
        ],
        "responses": {
          "200": {
            "description": "flow details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Flow"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/history_update/v/{version}": {
      "post": {
        "summary": "update flow history",
        "operationId": "updateFlowHistory",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "description": "Flow deployment message",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deployment_msg": {
                    "type": "string"
                  }
                },
                "required": [
                  "deployment_msg"
                ]
              }
            }
          }
        },
        "tags": [
          "flow"
        ],
        "responses": {
          "200": {
            "description": "success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/get/{path}": {
      "get": {
        "summary": "get flow by path",
        "operationId": "getFlowByPath",
        "x-mcp-tool": true,
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "with_starred_info",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "flow details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Flow"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/deployment_status/p/{path}": {
      "get": {
        "summary": "get flow deployment status",
        "operationId": "getFlowDeploymentStatus",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "flow status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lock_error_logs": {
                      "type": "string"
                    },
                    "job_id": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/get_triggers_count/{path}": {
      "get": {
        "summary": "get triggers count of flow",
        "operationId": "getTriggersCountOfFlow",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "triggers count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggersCount"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/list_tokens/{path}": {
      "get": {
        "summary": "get tokens with flow scope",
        "operationId": "listTokensOfFlow",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "tokens list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TruncatedToken"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/toggle_workspace_error_handler/{path}": {
      "post": {
        "summary": "Toggle ON and OFF the workspace error handler for a given flow",
        "operationId": "toggleWorkspaceErrorHandlerForFlow",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "Workspace error handler enabled",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "muted": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "error handler toggled",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/get/draft/{path}": {
      "get": {
        "summary": "get flow by path with draft",
        "operationId": "getFlowByPathWithDraft",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "flow details with draft",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Flow"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "draft": {
                          "$ref": "#/components/schemas/Flow"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/exists/{path}": {
      "get": {
        "summary": "exists flow by path",
        "operationId": "existsFlowByPath",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "flow details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/create": {
      "post": {
        "summary": "create flow",
        "operationId": "createFlow",
        "x-mcp-tool": true,
        "x-mcp-tool-include-fields": [
          "path",
          "summary",
          "description",
          "value",
          "schema",
          "tag",
          "deployment_message"
        ],
        "x-mcp-tool-opaque-fields": [
          "value",
          "schema"
        ],
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Partially filled flow",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OpenFlowWPath"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "draft_only": {
                        "type": "boolean"
                      },
                      "deployment_message": {
                        "type": "string"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "flow created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/update/{path}": {
      "post": {
        "summary": "update flow",
        "operationId": "updateFlow",
        "x-mcp-tool": true,
        "x-mcp-tool-include-fields": [
          "path",
          "summary",
          "description",
          "value",
          "schema",
          "tag",
          "deployment_message"
        ],
        "x-mcp-tool-opaque-fields": [
          "value",
          "schema"
        ],
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "Partially filled flow",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OpenFlowWPath"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "deployment_message": {
                        "type": "string"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "flow updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/archive/{path}": {
      "post": {
        "summary": "archive flow by path",
        "operationId": "archiveFlowByPath",
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "archiveFlow",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "archived": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "flow archived",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flows/delete/{path}": {
      "delete": {
        "summary": "delete flow by path",
        "operationId": "deleteFlowByPath",
        "x-mcp-tool": true,
        "tags": [
          "flow"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "keep_captures",
            "description": "keep captures",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "flow delete",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flow_conversations/list": {
      "get": {
        "summary": "list flow conversations",
        "operationId": "listFlowConversations",
        "tags": [
          "flow_conversation"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "flow_path",
            "description": "filter conversations by flow path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "flow conversations list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlowConversation"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flow_conversations/delete/{conversation_id}": {
      "delete": {
        "summary": "delete flow conversation",
        "operationId": "deleteFlowConversation",
        "tags": [
          "flow_conversation"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "conversation_id",
            "description": "conversation id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "flow conversation deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/flow_conversations/{conversation_id}/messages": {
      "get": {
        "summary": "list conversation messages",
        "operationId": "listConversationMessages",
        "tags": [
          "flow_conversation"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "conversation_id",
            "description": "conversation id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "after_id",
            "description": "id to fetch only the messages after that id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "conversation messages",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlowConversationMessage"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/raw_apps/list": {
      "get": {
        "summary": "list all raw apps",
        "operationId": "listRawApps",
        "tags": [
          "raw_app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "name": "path_start",
            "description": "mask to filter matching starting path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "path_exact",
            "description": "mask to filter exact matching path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "starred_only",
            "description": "(default false)\nshow only the starred items\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All raw apps",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ListableRawApp"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/get_data/v/{secretWithExtension}": {
      "get": {
        "summary": "get raw app data by",
        "operationId": "getRawAppData",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "secretWithExtension",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "app details",
            "content": {
              "text/javascript": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/list_search": {
      "get": {
        "summary": "list apps for search",
        "operationId": "listSearchApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "app list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "value": {}
                    },
                    "required": [
                      "path",
                      "value"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/list": {
      "get": {
        "summary": "list all apps",
        "operationId": "listApps",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "name": "path_start",
            "description": "mask to filter matching starting path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "path_exact",
            "description": "mask to filter exact matching path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "starred_only",
            "description": "(default false)\nshow only the starred items\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include_draft_only",
            "description": "(default false)\ninclude items that have no deployed version\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "with_deployment_msg",
            "description": "(default false)\ninclude deployment message\n",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All apps",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ListableApp"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/create": {
      "post": {
        "summary": "create app",
        "operationId": "createApp",
        "x-mcp-tool": true,
        "x-mcp-tool-include-fields": [
          "path",
          "value",
          "summary",
          "policy",
          "deployment_message"
        ],
        "x-mcp-tool-opaque-fields": [
          "value",
          "policy"
        ],
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new app",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  },
                  "value": {},
                  "summary": {
                    "type": "string"
                  },
                  "policy": {
                    "$ref": "#/components/schemas/Policy"
                  },
                  "draft_only": {
                    "type": "boolean"
                  },
                  "deployment_message": {
                    "type": "string"
                  },
                  "custom_path": {
                    "type": "string"
                  }
                },
                "required": [
                  "path",
                  "value",
                  "summary",
                  "policy"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "app created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/create_raw": {
      "post": {
        "summary": "create app raw",
        "operationId": "createAppRaw",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new app",
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "app": {
                    "type": "object",
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "value": {},
                      "summary": {
                        "type": "string"
                      },
                      "policy": {
                        "$ref": "#/components/schemas/Policy"
                      },
                      "draft_only": {
                        "type": "boolean"
                      },
                      "deployment_message": {
                        "type": "string"
                      },
                      "custom_path": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "path",
                      "value",
                      "summary",
                      "policy"
                    ]
                  },
                  "js": {
                    "type": "string"
                  },
                  "css": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "app created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/exists/{path}": {
      "get": {
        "summary": "does an app exisst at path",
        "operationId": "existsApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "app exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/get/p/{path}": {
      "get": {
        "summary": "get app by path",
        "operationId": "getAppByPath",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "with_starred_info",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "app details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppWithLastVersion"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/get/lite/{path}": {
      "get": {
        "summary": "get app lite by path",
        "operationId": "getAppLiteByPath",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "app lite details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppWithLastVersion"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/get/draft/{path}": {
      "get": {
        "summary": "get app by path with draft",
        "operationId": "getAppByPathWithDraft",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "app details with draft",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppWithLastVersionWDraft"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/history/p/{path}": {
      "get": {
        "summary": "get app history by path",
        "operationId": "getAppHistoryByPath",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "app history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AppHistory"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/get_latest_version/{path}": {
      "get": {
        "summary": "get apps's latest version",
        "operationId": "getAppLatestVersion",
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "tags": [
          "app"
        ],
        "responses": {
          "200": {
            "description": "App version",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppHistory"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/list_paths_from_workspace_runnable/{runnable_kind}/{path}": {
      "get": {
        "summary": "list app paths from workspace runnable",
        "operationId": "listAppPathsFromWorkspaceRunnable",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableKind"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "responses": {
          "200": {
            "description": "list of app paths",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/history_update/a/{id}/v/{version}": {
      "post": {
        "summary": "update app history",
        "operationId": "updateAppHistory",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/PathId"
          },
          {
            "$ref": "#/components/parameters/PathVersion"
          }
        ],
        "requestBody": {
          "description": "App deployment message",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deployment_msg": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps_u/public_app/{path}": {
      "get": {
        "summary": "get public app by secret",
        "operationId": "getPublicAppBySecret",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "app details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppWithLastVersion"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps_u/public_resource/{path}": {
      "get": {
        "summary": "get public resource",
        "operationId": "get public resource",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "resource value",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/secret_of/{path}": {
      "get": {
        "summary": "get public secret of app",
        "operationId": "getPublicSecretOfApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "app secret",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/secret_of_latest_version/{path}": {
      "get": {
        "summary": "get public secret of latest version of an app bundle",
        "operationId": "getPublicSecretOfLatestVersionOfApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "app secret",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/get/v/{id}": {
      "get": {
        "summary": "get app by version",
        "operationId": "getAppByVersion",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/PathId"
          }
        ],
        "responses": {
          "200": {
            "description": "app details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppWithLastVersion"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/delete/{path}": {
      "delete": {
        "summary": "delete app",
        "operationId": "deleteApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "app deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/update/{path}": {
      "post": {
        "summary": "update app",
        "operationId": "updateApp",
        "x-mcp-tool": true,
        "x-mcp-tool-include-fields": [
          "path",
          "value",
          "summary",
          "policy",
          "deployment_message"
        ],
        "x-mcp-tool-opaque-fields": [
          "value",
          "policy"
        ],
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "update app",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  },
                  "summary": {
                    "type": "string"
                  },
                  "value": {},
                  "policy": {
                    "$ref": "#/components/schemas/Policy"
                  },
                  "deployment_message": {
                    "type": "string"
                  },
                  "custom_path": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "app updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/update_raw/{path}": {
      "post": {
        "summary": "update app",
        "operationId": "updateAppRaw",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "update app",
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "app": {
                    "type": "object",
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "summary": {
                        "type": "string"
                      },
                      "value": {},
                      "policy": {
                        "$ref": "#/components/schemas/Policy"
                      },
                      "deployment_message": {
                        "type": "string"
                      },
                      "custom_path": {
                        "type": "string"
                      }
                    }
                  },
                  "js": {
                    "type": "string"
                  },
                  "css": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "app updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/custom_path_exists/{custom_path}": {
      "get": {
        "summary": "check if custom path exists",
        "operationId": "customPathExists",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/CustomPath"
          }
        ],
        "responses": {
          "200": {
            "description": "custom path exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps/sign_s3_objects": {
      "post": {
        "summary": "sign s3 objects, to be used by anonymous users in public apps",
        "operationId": "signS3Objects",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "s3 objects to sign",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "s3_objects": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/S3Object"
                    }
                  }
                },
                "required": [
                  "s3_objects"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "signed s3 objects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/S3Object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps_u/execute_component/{path}": {
      "post": {
        "summary": "executeComponent",
        "operationId": "executeComponent",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          }
        ],
        "requestBody": {
          "description": "update app",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "component": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  },
                  "version": {
                    "type": "integer"
                  },
                  "args": {},
                  "raw_code": {
                    "type": "object",
                    "properties": {
                      "content": {
                        "type": "string"
                      },
                      "language": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string"
                      },
                      "lock": {
                        "type": "string"
                      },
                      "cache_ttl": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "content",
                      "language"
                    ]
                  },
                  "id": {
                    "type": "integer"
                  },
                  "force_viewer_static_fields": {
                    "type": "object"
                  },
                  "force_viewer_one_of_fields": {
                    "type": "object"
                  },
                  "force_viewer_allow_user_resources": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "run_query_params": {
                    "type": "object",
                    "description": "Runnable query parameters"
                  }
                },
                "required": [
                  "args",
                  "component"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job uuid",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps_u/upload_s3_file/{path}": {
      "post": {
        "summary": "upload s3 file from app",
        "operationId": "uploadS3FileFromApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "file_extension",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "s3_resource_path",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "content_type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "content_disposition",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "File content",
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "file uploaded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "file_key": {
                      "type": "string"
                    },
                    "delete_token": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "file_key",
                    "delete_token"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/apps_u/delete_s3_file": {
      "delete": {
        "summary": "delete s3 file from app",
        "operationId": "deleteS3FileFromApp",
        "tags": [
          "app"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "delete_token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "file deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/f/{path}": {
      "post": {
        "summary": "run flow by path",
        "operationId": "runFlowByPath",
        "x-mcp-tool": true,
        "x-mcp-instructions": "You should first use getFlowByPath to retrieve the flow's schema and understand what arguments are expected.",
        "x-mcp-tool-include-query-params": [],
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptPath"
          },
          {
            "name": "scheduled_for",
            "description": "when to schedule this job (leave empty for immediate run)",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "scheduled_in_secs",
            "description": "schedule the script to execute in the number of seconds starting now",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the flow owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "flow args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/fv/{version}": {
      "post": {
        "summary": "run flow by version",
        "operationId": "runFlowByVersion",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "version",
            "description": "flow version ID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "scheduled_for",
            "description": "when to schedule this job (leave empty for immediate run)",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "scheduled_in_secs",
            "description": "schedule the script to execute in the number of seconds starting now",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the flow owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "flow args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScriptArgs"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/batch_rerun_jobs": {
      "post": {
        "summary": "re-run multiple jobs",
        "operationId": "batchReRunJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "list of job ids to re run and arg tranforms",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "job_ids",
                  "script_options_by_path",
                  "flow_options_by_path"
                ],
                "properties": {
                  "job_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "script_options_by_path": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "input_transforms": {
                          "type": "object",
                          "additionalProperties": {
                            "$ref": "#/components/schemas/InputTransform"
                          }
                        },
                        "use_latest_version": {
                          "type": "boolean"
                        }
                      }
                    }
                  },
                  "flow_options_by_path": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "input_transforms": {
                          "type": "object",
                          "additionalProperties": {
                            "$ref": "#/components/schemas/InputTransform"
                          }
                        },
                        "use_latest_version": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "stream of created job uuids separated by \\n. Lines may start with 'Error:'",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/restart/f/{id}": {
      "post": {
        "summary": "restart a completed flow at a given step",
        "operationId": "restartFlowAtStep",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "scheduled_for",
            "description": "when to schedule this job (leave empty for immediate run)",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "scheduled_in_secs",
            "description": "schedule the script to execute in the number of seconds starting now",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the flow owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "restart flow parameters",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "step_id"
                ],
                "properties": {
                  "step_id": {
                    "type": "string",
                    "description": "step id to restart the flow from"
                  },
                  "branch_or_iteration_n": {
                    "type": "integer",
                    "description": "for branchall or loop, the iteration at which the flow should restart (optional)"
                  },
                  "flow_version": {
                    "type": "integer",
                    "description": "specific flow version to use for restart (optional, uses current version if not specified)"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/h/{hash}": {
      "post": {
        "summary": "run script by hash",
        "operationId": "runScriptByHash",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/ScriptHash"
          },
          {
            "name": "scheduled_for",
            "description": "when to schedule this job (leave empty for immediate run)",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "scheduled_in_secs",
            "description": "schedule the script to execute in the number of seconds starting now",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "$ref": "#/components/parameters/SkipPreprocessor"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/WorkerTag"
          },
          {
            "$ref": "#/components/parameters/CacheTtl"
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the script owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "Partially filled args",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/preview": {
      "post": {
        "summary": "run script preview",
        "operationId": "runScriptPreview",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the script owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          }
        ],
        "requestBody": {
          "description": "preview",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Preview"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_inline/preview": {
      "post": {
        "summary": "run script preview without starting a new job",
        "operationId": "runScriptPreviewInline",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "preview",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreviewInline"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "script result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_wait_result/preview": {
      "post": {
        "summary": "run script preview and wait for result",
        "operationId": "runScriptPreviewAndWaitResult",
        "x-mcp-tool": true,
        "x-mcp-instructions": "Allows testing a script before deploying it. For typescript code, the language to send is either bun or deno. By default, send bun if no deno specific code is detected.",
        "x-mcp-required-fields": [
          "content",
          "language",
          "args"
        ],
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "preview",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Preview"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/workflow_as_code/{job_id}/{entrypoint}": {
      "post": {
        "summary": "run code-workflow task",
        "operationId": "runCodeWorkflowTask",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entrypoint",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "preview",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowTask"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/dependencies": {
      "post": {
        "summary": "run a one-off dependencies job",
        "operationId": "runRawScriptDependencies",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "raw script content",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "raw_scripts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/RawScriptForDependencies"
                    }
                  },
                  "entrypoint": {
                    "type": "string"
                  }
                },
                "required": [
                  "entrypoint",
                  "raw_scripts"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "dependency job result",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lock": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "lock"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/preview_flow": {
      "post": {
        "summary": "run flow preview",
        "operationId": "runFlowPreview",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/IncludeHeader"
          },
          {
            "name": "invisible_to_owner",
            "description": "make the run invisible to the the script owner (default false)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "$ref": "#/components/parameters/NewJobId"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "preview",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlowPreview"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run_wait_result/preview_flow": {
      "post": {
        "summary": "run flow preview and wait for result",
        "operationId": "runFlowPreviewAndWaitResult",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "memory_id",
            "description": "memory ID for chat-enabled flows",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "preview",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlowPreview"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/run/dynamic_select": {
      "post": {
        "summary": "run dynamic select helper function",
        "operationId": "runDynamicSelect",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "dynamic select request",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DynamicInputData"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "dynamic select job created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/list": {
      "get": {
        "summary": "list all queued jobs",
        "operationId": "listQueue",
        "x-mcp-tool": true,
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/Worker"
          },
          {
            "$ref": "#/components/parameters/ScriptExactPath"
          },
          {
            "$ref": "#/components/parameters/ScriptStartPath"
          },
          {
            "$ref": "#/components/parameters/SchedulePath"
          },
          {
            "$ref": "#/components/parameters/TriggerPath"
          },
          {
            "$ref": "#/components/parameters/JobTriggerKind"
          },
          {
            "$ref": "#/components/parameters/ScriptExactHash"
          },
          {
            "$ref": "#/components/parameters/StartedBefore"
          },
          {
            "$ref": "#/components/parameters/StartedAfter"
          },
          {
            "$ref": "#/components/parameters/Success"
          },
          {
            "$ref": "#/components/parameters/ScheduledForBeforeNow"
          },
          {
            "$ref": "#/components/parameters/JobKinds"
          },
          {
            "$ref": "#/components/parameters/Suspended"
          },
          {
            "$ref": "#/components/parameters/Running"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "$ref": "#/components/parameters/ResultFilter"
          },
          {
            "$ref": "#/components/parameters/AllowWildcards"
          },
          {
            "$ref": "#/components/parameters/Tag"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "all_workspaces",
            "description": "get jobs from all workspaces (only valid if request come from the `admins` workspace)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_not_schedule",
            "description": "is not a scheduled job",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All queued jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QueuedJob"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/count": {
      "get": {
        "summary": "get queue count",
        "operationId": "getQueueCount",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "all_workspaces",
            "description": "get jobs from all workspaces (only valid if request come from the `admins` workspace)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "queue count",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "database_length": {
                      "type": "integer"
                    },
                    "suspended": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "database_length"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/completed/count": {
      "get": {
        "summary": "get completed count",
        "operationId": "getCompletedCount",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "completed count",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "database_length": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "database_length"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/completed/count_jobs": {
      "get": {
        "summary": "count number of completed jobs with filter",
        "operationId": "countCompletedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "completed_after_s_ago",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "success",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "all_workspaces",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Count of completed jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/list_filtered_uuids": {
      "get": {
        "summary": "get the ids of all jobs matching the given filters",
        "operationId": "listFilteredJobsUuids",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "$ref": "#/components/parameters/Label"
          },
          {
            "$ref": "#/components/parameters/Worker"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/ScriptExactPath"
          },
          {
            "$ref": "#/components/parameters/ScriptStartPath"
          },
          {
            "$ref": "#/components/parameters/SchedulePath"
          },
          {
            "$ref": "#/components/parameters/ScriptExactHash"
          },
          {
            "$ref": "#/components/parameters/StartedBefore"
          },
          {
            "$ref": "#/components/parameters/StartedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBefore"
          },
          {
            "$ref": "#/components/parameters/CreatedAfter"
          },
          {
            "$ref": "#/components/parameters/CompletedBefore"
          },
          {
            "$ref": "#/components/parameters/CompletedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBeforeQueue"
          },
          {
            "$ref": "#/components/parameters/CreatedAfterQueue"
          },
          {
            "$ref": "#/components/parameters/Running"
          },
          {
            "$ref": "#/components/parameters/ScheduledForBeforeNow"
          },
          {
            "$ref": "#/components/parameters/JobKinds"
          },
          {
            "$ref": "#/components/parameters/Suspended"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "$ref": "#/components/parameters/Tag"
          },
          {
            "$ref": "#/components/parameters/ResultFilter"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "is_skipped",
            "description": "is the job skipped",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_flow_step",
            "description": "is the job a flow step",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_null_parent",
            "description": "has null parent",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "success",
            "description": "filter on successful jobs",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "all_workspaces",
            "description": "get jobs from all workspaces (only valid if request come from the `admins` workspace)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_not_schedule",
            "description": "is not a scheduled job",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "uuids of jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/list_filtered_uuids": {
      "get": {
        "summary": "get the ids of all queued jobs matching the given filters",
        "operationId": "listFilteredQueueUuids",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/ScriptExactPath"
          },
          {
            "$ref": "#/components/parameters/ScriptStartPath"
          },
          {
            "$ref": "#/components/parameters/SchedulePath"
          },
          {
            "$ref": "#/components/parameters/ScriptExactHash"
          },
          {
            "$ref": "#/components/parameters/StartedBefore"
          },
          {
            "$ref": "#/components/parameters/StartedAfter"
          },
          {
            "$ref": "#/components/parameters/Success"
          },
          {
            "$ref": "#/components/parameters/ScheduledForBeforeNow"
          },
          {
            "$ref": "#/components/parameters/JobKinds"
          },
          {
            "$ref": "#/components/parameters/Suspended"
          },
          {
            "$ref": "#/components/parameters/Running"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "$ref": "#/components/parameters/ResultFilter"
          },
          {
            "$ref": "#/components/parameters/AllowWildcards"
          },
          {
            "$ref": "#/components/parameters/Tag"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "concurrency_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "all_workspaces",
            "description": "get jobs from all workspaces (only valid if request come from the `admins` workspace)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_not_schedule",
            "description": "is not a scheduled job",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "uuids of jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/cancel_selection": {
      "post": {
        "summary": "cancel jobs based on the given uuids",
        "operationId": "cancelSelection",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "force_cancel",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "uuids of the jobs to cancel",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "uuids of canceled jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/get_otel_traces/{id}": {
      "get": {
        "summary": "get OpenTelemetry traces for a job",
        "operationId": "getJobOtelTraces",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of OTEL Span objects (compatible with OpenTelemetry Span proto)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/trigger/{trigger_kind}/resume_suspended_trigger_jobs/{trigger_path}": {
      "post": {
        "summary": "resume all suspended jobs for a specific trigger",
        "operationId": "resumeSuspendedTriggerJobs",
        "tags": [
          "trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "trigger_kind",
            "description": "The kind of trigger",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/JobTriggerKind"
            }
          },
          {
            "name": "trigger_path",
            "description": "The path of the trigger (can contain forward slashes)",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple",
            "explode": false
          }
        ],
        "requestBody": {
          "description": "Optional list of job IDs to reassign",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "job_ids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "description": "Optional list of specific job UUIDs to reassign. If not provided, all suspended jobs for the trigger will be reassigned."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "confirmation message",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/trigger/{trigger_kind}/cancel_suspended_trigger_jobs/{trigger_path}": {
      "post": {
        "summary": "cancel all suspended jobs for a specific trigger",
        "operationId": "cancelSuspendedTriggerJobs",
        "tags": [
          "trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "trigger_kind",
            "description": "The kind of trigger",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/JobTriggerKind"
            }
          },
          {
            "name": "trigger_path",
            "description": "The path of the trigger (can contain forward slashes)",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "style": "simple",
            "explode": false
          }
        ],
        "requestBody": {
          "description": "Optional list of job IDs to cancel",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "job_ids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "description": "Optional list of specific job UUIDs to cancel. If not provided, all suspended jobs for the trigger will be canceled."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "confirmation message",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/completed/list": {
      "get": {
        "summary": "list all completed jobs",
        "operationId": "listCompletedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/OrderDesc"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "$ref": "#/components/parameters/Label"
          },
          {
            "$ref": "#/components/parameters/Worker"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/ScriptExactPath"
          },
          {
            "$ref": "#/components/parameters/ScriptStartPath"
          },
          {
            "$ref": "#/components/parameters/SchedulePath"
          },
          {
            "$ref": "#/components/parameters/ScriptExactHash"
          },
          {
            "$ref": "#/components/parameters/StartedBefore"
          },
          {
            "$ref": "#/components/parameters/StartedAfter"
          },
          {
            "$ref": "#/components/parameters/Success"
          },
          {
            "$ref": "#/components/parameters/JobKinds"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "$ref": "#/components/parameters/ResultFilter"
          },
          {
            "$ref": "#/components/parameters/AllowWildcards"
          },
          {
            "$ref": "#/components/parameters/Tag"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "is_skipped",
            "description": "is the job skipped",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_flow_step",
            "description": "is the job a flow step",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_null_parent",
            "description": "has null parent",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_not_schedule",
            "description": "is not a scheduled job",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All completed jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompletedJob"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/completed/export": {
      "get": {
        "summary": "export all completed jobs for backup/migration",
        "operationId": "exportCompletedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "All completed jobs exported",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExportableCompletedJob"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/completed/import": {
      "post": {
        "summary": "import completed jobs from backup/migration",
        "operationId": "importCompletedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExportableCompletedJob"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully imported completed jobs",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/export": {
      "get": {
        "summary": "export all queued jobs for backup/migration",
        "operationId": "exportQueuedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "All queued jobs exported",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExportableQueuedJob"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/import": {
      "post": {
        "summary": "import queued jobs from backup/migration",
        "operationId": "importQueuedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExportableQueuedJob"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully imported queued jobs",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/delete": {
      "post": {
        "summary": "delete jobs by IDs from all related tables",
        "operationId": "deleteJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                },
                "description": "Array of job IDs to delete"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully deleted jobs",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "description": "Summary of deleted jobs and rows"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/list": {
      "get": {
        "summary": "list all jobs",
        "operationId": "listJobs",
        "x-mcp-tool": true,
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "$ref": "#/components/parameters/Label"
          },
          {
            "$ref": "#/components/parameters/Worker"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/ScriptExactPath"
          },
          {
            "$ref": "#/components/parameters/ScriptStartPath"
          },
          {
            "$ref": "#/components/parameters/SchedulePath"
          },
          {
            "$ref": "#/components/parameters/ScriptExactHash"
          },
          {
            "$ref": "#/components/parameters/StartedBefore"
          },
          {
            "$ref": "#/components/parameters/StartedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBefore"
          },
          {
            "$ref": "#/components/parameters/CreatedAfter"
          },
          {
            "$ref": "#/components/parameters/CompletedBefore"
          },
          {
            "$ref": "#/components/parameters/CompletedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBeforeQueue"
          },
          {
            "$ref": "#/components/parameters/CreatedAfterQueue"
          },
          {
            "$ref": "#/components/parameters/Running"
          },
          {
            "$ref": "#/components/parameters/ScheduledForBeforeNow"
          },
          {
            "$ref": "#/components/parameters/JobKinds"
          },
          {
            "$ref": "#/components/parameters/Suspended"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "$ref": "#/components/parameters/Tag"
          },
          {
            "$ref": "#/components/parameters/ResultFilter"
          },
          {
            "$ref": "#/components/parameters/AllowWildcards"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/JobTriggerKind"
          },
          {
            "name": "is_skipped",
            "description": "is the job skipped",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_flow_step",
            "description": "is the job a flow step",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_null_parent",
            "description": "has null parent",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "success",
            "description": "filter on successful jobs",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "all_workspaces",
            "description": "get jobs from all workspaces (only valid if request come from the `admins` workspace)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_not_schedule",
            "description": "is not a scheduled job",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Job"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/jobs/db_clock": {
      "get": {
        "summary": "get db clock",
        "operationId": "getDbClock",
        "tags": [
          "job"
        ],
        "responses": {
          "200": {
            "description": "the timestamp of the db that can be used to compute the drift",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/jobs/completed/count_by_tag": {
      "get": {
        "summary": "Count jobs by tag",
        "operationId": "countJobsByTag",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "name": "horizon_secs",
            "in": "query",
            "description": "Past Time horizon in seconds (when to start the count = now - horizon) (default is 3600)",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "workspace_id",
            "in": "query",
            "description": "Specific workspace ID to filter results (optional)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Job counts by tag",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "tag": {
                        "type": "string"
                      },
                      "count": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "tag",
                      "count"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get/{id}": {
      "get": {
        "summary": "get job",
        "operationId": "getJob",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "no_logs",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "no_code",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_root_job_id/{id}": {
      "get": {
        "summary": "get root job id",
        "operationId": "getRootJobId",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "get root job id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_logs/{id}": {
      "get": {
        "summary": "get job logs",
        "operationId": "getJob logs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "remove_ansi_warnings",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job details",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_completed_logs_tail/{id}": {
      "get": {
        "summary": "get completed job logs tail",
        "operationId": "getCompletedJobLogsTail",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "completed job logs tail",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_args/{id}": {
      "get": {
        "summary": "get job args",
        "operationId": "getJobArgs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "job args",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/queue/get_started_at_by_ids": {
      "post": {
        "summary": "get started at by ids",
        "operationId": "getStartedAtByIds",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "ids",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "started at by ids",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/getupdate/{id}": {
      "get": {
        "summary": "get job updates",
        "operationId": "getJobUpdates",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "running",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "log_offset",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "stream_offset",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "get_progress",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "no_logs",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "running": {
                      "type": "boolean"
                    },
                    "completed": {
                      "type": "boolean"
                    },
                    "new_logs": {
                      "type": "string"
                    },
                    "log_offset": {
                      "type": "integer"
                    },
                    "mem_peak": {
                      "type": "integer"
                    },
                    "progress": {
                      "type": "integer"
                    },
                    "stream_offset": {
                      "type": "integer"
                    },
                    "new_result_stream": {
                      "type": "string"
                    },
                    "flow_status": {
                      "$ref": "#/components/schemas/FlowStatus"
                    },
                    "workflow_as_code_status": {
                      "$ref": "#/components/schemas/WorkflowStatus"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/getupdate_sse/{id}": {
      "get": {
        "summary": "get job updates via server-sent events",
        "operationId": "getJobUpdatesSSE",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "running",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "log_offset",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "stream_offset",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "get_progress",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "only_result",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "no_logs",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "server-sent events stream of job updates",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_log_file/{path}": {
      "get": {
        "summary": "get log file from object store",
        "operationId": "getLogFileFromStore",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "path",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job log",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_flow_debug_info/{id}": {
      "get": {
        "summary": "get flow debug info",
        "operationId": "getFlowDebugInfo",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "flow debug info details",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/completed/get/{id}": {
      "get": {
        "summary": "get completed job",
        "operationId": "getCompletedJob",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "job details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompletedJob"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/completed/get_result/{id}": {
      "get": {
        "summary": "get completed job result",
        "operationId": "getCompletedJobResult",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "suspended_job",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resume_id",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "secret",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "result",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/completed/get_result_maybe/{id}": {
      "get": {
        "summary": "get completed job result if job is completed",
        "operationId": "getCompletedJobResultMaybe",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "$ref": "#/components/parameters/GetStarted"
          }
        ],
        "responses": {
          "200": {
            "description": "result",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "completed": {
                      "type": "boolean"
                    },
                    "result": {},
                    "success": {
                      "type": "boolean"
                    },
                    "started": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "completed",
                    "result"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/completed/get_timing/{id}": {
      "get": {
        "summary": "get completed job timing",
        "operationId": "getCompletedJobTiming",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "job timing details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "started_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "duration_ms": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "created_at"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/completed/delete/{id}": {
      "post": {
        "summary": "delete completed job (erase content but keep run id)",
        "operationId": "deleteCompletedJob",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "job details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompletedJob"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/queue/cancel/{id}": {
      "post": {
        "summary": "cancel queued or running job",
        "operationId": "cancelQueuedJob",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "requestBody": {
          "description": "reason",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job canceled",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/queue/cancel_persistent/{path}": {
      "post": {
        "summary": "cancel all queued jobs for persistent script",
        "operationId": "cancelPersistentQueuedJobs",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "reason",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "persistent job scaled down to zero",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/queue/force_cancel/{id}": {
      "post": {
        "summary": "force cancel queued job",
        "operationId": "forceCancelQueuedJob",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "requestBody": {
          "description": "reason",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job canceled",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/position/{scheduled_for}": {
      "get": {
        "summary": "get queue position for a job",
        "operationId": "getQueuePosition",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "scheduled_for",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "description": "The scheduled for timestamp in milliseconds"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "queue position information",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "position": {
                      "type": "integer",
                      "description": "The position in queue (1-based), null if not in queue or already running"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/queue/scheduled_for/{id}": {
      "get": {
        "summary": "get scheduled for timestamp for a job",
        "operationId": "getScheduledFor",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "scheduled for timestamp",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/job_signature/{id}/{resume_id}": {
      "get": {
        "summary": "create an HMac signature given a job id and a resume id",
        "operationId": "createJobSignature",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "job signature",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/resume_urls/{id}/{resume_id}": {
      "get": {
        "summary": "get resume urls given a job_id, resume_id and a nonce to resume a flow",
        "operationId": "getResumeUrls",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flow_level",
            "in": "query",
            "description": "If true, generate resume URLs for the parent flow instead of the specific step. This allows pre-approvals that can be consumed by any later suspend step in the same flow.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "url endpoints",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "approvalPage": {
                      "type": "string"
                    },
                    "resume": {
                      "type": "string"
                    },
                    "cancel": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "approvalPage",
                    "resume",
                    "cancel"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/slack_approval/{id}": {
      "get": {
        "summary": "generate interactive slack approval for suspended job",
        "operationId": "getSlackApprovalPayload",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "message",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slack_resource_path",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channel_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flow_step_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "default_args_json",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dynamic_enums_json",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Interactive slack approval message sent successfully"
          }
        }
      }
    },
    "/w/{workspace}/jobs/teams_approval/{id}": {
      "get": {
        "summary": "generate interactive teams approval for suspended job",
        "operationId": "getTeamsApprovalPayload",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "message",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "team_name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channel_name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "flow_step_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "default_args_json",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dynamic_enums_json",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Interactive slack approval message sent successfully"
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/resume/{id}/{resume_id}/{signature}": {
      "get": {
        "summary": "resume a job for a suspended flow",
        "operationId": "resumeSuspendedJobGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "$ref": "#/components/parameters/Payload"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "signature",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "job resumed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "resume a job for a suspended flow",
        "operationId": "resumeSuspendedJobPost",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "signature",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job resumed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/flow/user_states/{id}/{key}": {
      "post": {
        "summary": "set flow user state at a given key",
        "operationId": "setFlowUserState",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "new value",
          "required": true,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "flow user state updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "get flow user state at a given key",
        "operationId": "getFlowUserState",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "flow user state updated",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs/flow/resume/{id}": {
      "post": {
        "summary": "resume a job for a suspended flow as an owner",
        "operationId": "resumeSuspendedFlowAsOwner",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job resumed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/cancel/{id}/{resume_id}/{signature}": {
      "get": {
        "summary": "cancel a job for a suspended flow",
        "operationId": "cancelSuspendedJobGet",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "signature",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "job canceled",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "cancel a job for a suspended flow",
        "operationId": "cancelSuspendedJobPost",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "signature",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "job canceled",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/jobs_u/get_flow/{id}/{resume_id}/{signature}": {
      "get": {
        "summary": "get parent flow job of suspended job",
        "operationId": "getSuspendedJobFlow",
        "tags": [
          "job"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          },
          {
            "name": "resume_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "signature",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "approver",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "parent flow details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "job": {
                      "$ref": "#/components/schemas/Job"
                    },
                    "approvers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "resume_id": {
                            "type": "integer"
                          },
                          "approver": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "resume_id",
                          "approver"
                        ]
                      }
                    }
                  },
                  "required": [
                    "job",
                    "approvers"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/schedules/preview": {
      "post": {
        "summary": "preview schedule",
        "operationId": "previewSchedule",
        "tags": [
          "schedule"
        ],
        "requestBody": {
          "description": "schedule",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "schedule": {
                    "type": "string"
                  },
                  "timezone": {
                    "type": "string"
                  },
                  "cron_version": {
                    "type": "string"
                  }
                },
                "required": [
                  "schedule",
                  "timezone"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of 5 estimated upcoming execution events (in UTC)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/create": {
      "post": {
        "summary": "create schedule",
        "operationId": "createSchedule",
        "x-mcp-tool": true,
        "x-mcp-instructions": "Creates a new schedule.\nThe schedule should include seconds.\nYou should get the schema of the script or flow before creating the schedule to correctly specify the arguments needed.\n",
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new schedule",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewSchedule"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "schedule created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/update/{path}": {
      "post": {
        "summary": "update schedule",
        "operationId": "updateSchedule",
        "x-mcp-tool": true,
        "x-mcp-instructions": "Updates a schedule.\nThe schedule should include seconds.\nYou should get the schema of the script or flow before updating the schedule to correctly specify the arguments needed.\n",
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated schedule",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditSchedule"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "schedule updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/setenabled/{path}": {
      "post": {
        "summary": "set enabled schedule",
        "operationId": "setScheduleEnabled",
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated schedule enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "enabled"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "schedule enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/delete/{path}": {
      "delete": {
        "summary": "delete schedule",
        "operationId": "deleteSchedule",
        "x-mcp-tool": true,
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "schedule deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/get/{path}": {
      "get": {
        "summary": "get schedule",
        "operationId": "getSchedule",
        "x-mcp-tool": true,
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "schedule deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Schedule"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/exists/{path}": {
      "get": {
        "summary": "does schedule exists",
        "operationId": "existsSchedule",
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "schedule exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/list": {
      "get": {
        "summary": "list schedules",
        "operationId": "listSchedules",
        "x-mcp-tool": true,
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "description": "filter schedules by whether they target a flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "description": "filter schedules by path prefix",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "schedule list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Schedule"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/list_with_jobs": {
      "get": {
        "summary": "list schedules with last 20 jobs",
        "operationId": "listSchedulesWithJobs",
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "schedule list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScheduleWJobs"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/schedules/setdefaulthandler": {
      "post": {
        "summary": "Set default error or recoevery handler",
        "operationId": "setDefaultErrorOrRecoveryHandler",
        "tags": [
          "schedule"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "Handler description",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "handler_type": {
                    "type": "string",
                    "enum": [
                      "error",
                      "recovery",
                      "success"
                    ]
                  },
                  "override_existing": {
                    "type": "boolean"
                  },
                  "path": {
                    "type": "string"
                  },
                  "extra_args": {
                    "type": "object"
                  },
                  "number_of_occurence": {
                    "type": "integer"
                  },
                  "number_of_occurence_exact": {
                    "type": "boolean"
                  },
                  "workspace_handler_muted": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "handler_type",
                  "override_existing"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "default error handler set"
          }
        }
      }
    },
    "/w/{workspace}/openapi/generate": {
      "post": {
        "summary": "generate openapi spec from http routes/webhook",
        "operationId": "generateOpenapiSpec",
        "tags": [
          "openapi"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "openapi spec info and url",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateOpenapiSpec"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "openapi spec",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/openapi/download": {
      "post": {
        "summary": "Download the OpenAPI v3.1 spec as a file",
        "operationId": "DownloadOpenapiSpec",
        "tags": [
          "openapi"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "openapi spec info and url",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateOpenapiSpec"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Downloaded OpenAPI spec",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/create_many": {
      "post": {
        "summary": "create many HTTP triggers",
        "operationId": "createHttpTriggers",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new http trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewHttpTrigger"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "http trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/create": {
      "post": {
        "summary": "create http trigger",
        "operationId": "createHttpTrigger",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new http trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHttpTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "http trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/update/{path}": {
      "post": {
        "summary": "update http trigger",
        "operationId": "updateHttpTrigger",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditHttpTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "http trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/delete/{path}": {
      "delete": {
        "summary": "delete http trigger",
        "operationId": "deleteHttpTrigger",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "http trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/get/{path}": {
      "get": {
        "summary": "get http trigger",
        "operationId": "getHttpTrigger",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "http trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/list": {
      "get": {
        "summary": "list http triggers",
        "operationId": "listHttpTriggers",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "http trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HttpTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/exists/{path}": {
      "get": {
        "summary": "does http trigger exists",
        "operationId": "existsHttpTrigger",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "http trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/route_exists": {
      "post": {
        "summary": "does route exists",
        "operationId": "existsRoute",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "route exists request",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "route_path": {
                    "type": "string"
                  },
                  "http_method": {
                    "$ref": "#/components/schemas/HttpMethod"
                  },
                  "trigger_path": {
                    "type": "string"
                  },
                  "workspaced_route": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "route_path",
                  "http_method"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "route exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/http_triggers/setmode/{path}": {
      "post": {
        "summary": "enable/disable http trigger",
        "operationId": "setHttpTriggerMode",
        "tags": [
          "http_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "http trigger enable/disable",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/create": {
      "post": {
        "summary": "create websocket trigger",
        "operationId": "createWebsocketTrigger",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new websocket trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewWebsocketTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "websocket trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/update/{path}": {
      "post": {
        "summary": "update websocket trigger",
        "operationId": "updateWebsocketTrigger",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditWebsocketTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "websocket trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/delete/{path}": {
      "delete": {
        "summary": "delete websocket trigger",
        "operationId": "deleteWebsocketTrigger",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "websocket trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/get/{path}": {
      "get": {
        "summary": "get websocket trigger",
        "operationId": "getWebsocketTrigger",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "websocket trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsocketTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/list": {
      "get": {
        "summary": "list websocket triggers",
        "operationId": "listWebsocketTriggers",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "websocket trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebsocketTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/exists/{path}": {
      "get": {
        "summary": "does websocket trigger exists",
        "operationId": "existsWebsocketTrigger",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "websocket trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled websocket trigger",
        "operationId": "setWebsocketTriggerMode",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated websocket trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "websocket trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/websocket_triggers/test": {
      "post": {
        "summary": "test websocket connection",
        "operationId": "testWebsocketConnection",
        "tags": [
          "websocket_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test websocket connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string"
                  },
                  "url_runnable_args": {
                    "$ref": "#/components/schemas/ScriptArgs"
                  },
                  "can_return_message": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "url",
                  "can_return_message"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successfuly connected to websocket",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/create": {
      "post": {
        "summary": "create kafka trigger",
        "operationId": "createKafkaTrigger",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new kafka trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewKafkaTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "kafka trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/update/{path}": {
      "post": {
        "summary": "update kafka trigger",
        "operationId": "updateKafkaTrigger",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditKafkaTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "kafka trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/delete/{path}": {
      "delete": {
        "summary": "delete kafka trigger",
        "operationId": "deleteKafkaTrigger",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "kafka trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/get/{path}": {
      "get": {
        "summary": "get kafka trigger",
        "operationId": "getKafkaTrigger",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "kafka trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KafkaTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/list": {
      "get": {
        "summary": "list kafka triggers",
        "operationId": "listKafkaTriggers",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "kafka trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/KafkaTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/exists/{path}": {
      "get": {
        "summary": "does kafka trigger exists",
        "operationId": "existsKafkaTrigger",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "kafka trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled kafka trigger",
        "operationId": "setKafkaTriggerMode",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated kafka trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "kafka trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/kafka_triggers/test": {
      "post": {
        "summary": "test kafka connection",
        "operationId": "testKafkaConnection",
        "tags": [
          "kafka_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test kafka connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "connection": {
                    "type": "object"
                  }
                },
                "required": [
                  "connection"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successfuly connected to kafka brokers",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/create": {
      "post": {
        "summary": "create nats trigger",
        "operationId": "createNatsTrigger",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new nats trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNatsTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "nats trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/update/{path}": {
      "post": {
        "summary": "update nats trigger",
        "operationId": "updateNatsTrigger",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditNatsTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "nats trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/delete/{path}": {
      "delete": {
        "summary": "delete nats trigger",
        "operationId": "deleteNatsTrigger",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "nats trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/get/{path}": {
      "get": {
        "summary": "get nats trigger",
        "operationId": "getNatsTrigger",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "nats trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NatsTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/list": {
      "get": {
        "summary": "list nats triggers",
        "operationId": "listNatsTriggers",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "nats trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NatsTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/exists/{path}": {
      "get": {
        "summary": "does nats trigger exists",
        "operationId": "existsNatsTrigger",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "nats trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled nats trigger",
        "operationId": "setNatsTriggerMode",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated nats trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "nats trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/nats_triggers/test": {
      "post": {
        "summary": "test NATS connection",
        "operationId": "testNatsConnection",
        "tags": [
          "nats_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test nats connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "connection": {
                    "type": "object"
                  }
                },
                "required": [
                  "connection"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successfuly connected to NATS servers",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/create": {
      "post": {
        "summary": "create sqs trigger",
        "operationId": "createSqsTrigger",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new sqs trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewSqsTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "sqs trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/update/{path}": {
      "post": {
        "summary": "update sqs trigger",
        "operationId": "updateSqsTrigger",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditSqsTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "sqs trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/delete/{path}": {
      "delete": {
        "summary": "delete sqs trigger",
        "operationId": "deleteSqsTrigger",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "sqs trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/get/{path}": {
      "get": {
        "summary": "get sqs trigger",
        "operationId": "getSqsTrigger",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "sqs trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SqsTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/list": {
      "get": {
        "summary": "list sqs triggers",
        "operationId": "listSqsTriggers",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "sqs trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SqsTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/exists/{path}": {
      "get": {
        "summary": "does sqs trigger exists",
        "operationId": "existsSqsTrigger",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "sqs trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled sqs trigger",
        "operationId": "setSqsTriggerMode",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated sqs trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "sqs trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/sqs_triggers/test": {
      "post": {
        "summary": "test sqs connection",
        "operationId": "testSqsConnection",
        "tags": [
          "sqs_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test sqs connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "connection": {
                    "type": "object"
                  }
                },
                "required": [
                  "connection"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successfuly connected to sqs",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/integrations/list": {
      "get": {
        "summary": "list available native trigger services",
        "operationId": "listNativeTriggerServices",
        "tags": [
          "workspace_integration"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "native trigger services list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkspaceIntegrations"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/integrations/{service_name}/exists": {
      "get": {
        "summary": "check if integrations for a particular service exists",
        "operationId": "checkIfNativeTriggersServiceExists",
        "tags": [
          "workspace_integration"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "integration exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/integrations/{service_name}/create": {
      "post": {
        "summary": "create native trigger service",
        "operationId": "createNativeTriggerService",
        "tags": [
          "workspace_integration"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          }
        ],
        "requestBody": {
          "description": "new native trigger service",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceOAuthConfig"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "native trigger service created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/integrations/{service_name}/generate_connect_url": {
      "post": {
        "summary": "generate connect url for native trigger service",
        "operationId": "generateNativeTriggerServiceConnectUrl",
        "tags": [
          "workspace_integration"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          }
        ],
        "requestBody": {
          "description": "redirect_uri",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedirectUri"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "native trigger service connect url",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/integrations/{service_name}/delete": {
      "delete": {
        "summary": "delete native trigger service",
        "operationId": "deleteNativeTriggerService",
        "tags": [
          "workspace_integration"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "native trigger service deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/integrations/{service_name}/callback/{code}/{state}": {
      "post": {
        "summary": "native trigger service oauth callback",
        "operationId": "nativeTriggerServiceCallback",
        "tags": [
          "workspace_integration"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "redirect_uri",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedirectUri"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "native trigger service oauth completed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/create": {
      "post": {
        "summary": "create native trigger",
        "description": "Creates a new native trigger for the specified service.\nRequires write access to the script or flow that the trigger will be associated with.\n",
        "operationId": "createNativeTrigger",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          }
        ],
        "requestBody": {
          "description": "new native trigger configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NativeTriggerData"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "native trigger created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateTriggerResponse"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/update/{external_id}": {
      "post": {
        "summary": "update native trigger",
        "description": "Updates an existing native trigger.\nRequires write access to the script or flow that the trigger is associated with.\n",
        "operationId": "updateNativeTrigger",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "name": "external_id",
            "in": "path",
            "required": true,
            "description": "The external ID of the trigger from the external service",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "updated native trigger configuration",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NativeTriggerData"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "native trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/get/{external_id}": {
      "get": {
        "summary": "get native trigger",
        "description": "Retrieves a native trigger by its external ID.\nRequires write access to the script or flow that the trigger is associated with.\n",
        "operationId": "getNativeTrigger",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "name": "external_id",
            "in": "path",
            "required": true,
            "description": "The external ID of the trigger from the external service",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "native trigger with external configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NativeTriggerWithExternal"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/delete/{external_id}": {
      "delete": {
        "summary": "delete native trigger",
        "description": "Deletes a native trigger by its external ID.\nRequires write access to the script or flow that the trigger is associated with.\n",
        "operationId": "deleteNativeTrigger",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "name": "external_id",
            "in": "path",
            "required": true,
            "description": "The external ID of the trigger from the external service",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "native trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/list": {
      "get": {
        "summary": "list native triggers",
        "description": "Lists all native triggers for the specified service in the workspace.",
        "operationId": "listNativeTriggers",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by script path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "description": "filter by is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "native triggers list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NativeTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/exists/{external_id}": {
      "get": {
        "summary": "check if native trigger exists",
        "description": "Checks if a native trigger with the given external ID exists.",
        "operationId": "existsNativeTrigger",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "name": "external_id",
            "in": "path",
            "required": true,
            "description": "The external ID of the trigger from the external service",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "whether the native trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/{service_name}/sync": {
      "post": {
        "summary": "sync native triggers with external service",
        "operationId": "syncNativeTriggers",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "sync completed successfully"
          }
        }
      }
    },
    "/w/{workspace}/native_triggers/nextcloud/events": {
      "get": {
        "summary": "list available NextCloud events",
        "operationId": "listNextCloudEvents",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "list of available NextCloud events",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NextCloudEventType"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/native_triggers/{service_name}/w/{workspace_id}/webhook/{internal_id}": {
      "post": {
        "summary": "receive webhook from external native trigger service",
        "operationId": "nativeTriggerWebhook",
        "tags": [
          "native_trigger"
        ],
        "parameters": [
          {
            "name": "service_name",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/NativeServiceName"
            }
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "internal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            },
            "description": "The internal database ID of the trigger"
          }
        ],
        "requestBody": {
          "description": "webhook payload from external service",
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "text/plain": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "webhook received successfully",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/create": {
      "post": {
        "summary": "create mqtt trigger",
        "operationId": "createMqttTrigger",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new mqtt trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewMqttTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "mqtt trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/update/{path}": {
      "post": {
        "summary": "update mqtt trigger",
        "operationId": "updateMqttTrigger",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditMqttTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "mqtt trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/delete/{path}": {
      "delete": {
        "summary": "delete mqtt trigger",
        "operationId": "deleteMqttTrigger",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "mqtt trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/get/{path}": {
      "get": {
        "summary": "get mqtt trigger",
        "operationId": "getMqttTrigger",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "mqtt trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MqttTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/list": {
      "get": {
        "summary": "list mqtt triggers",
        "operationId": "listMqttTriggers",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "mqtt trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MqttTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/exists/{path}": {
      "get": {
        "summary": "does mqtt trigger exists",
        "operationId": "existsMqttTrigger",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "mqtt trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled mqtt trigger",
        "operationId": "setMqttTriggerMode",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated mqtt trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "mqtt trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/mqtt_triggers/test": {
      "post": {
        "summary": "test mqtt connection",
        "operationId": "testMqttConnection",
        "tags": [
          "mqtt_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test mqtt connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "connection": {
                    "type": "object"
                  }
                },
                "required": [
                  "connection"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successfully connected to mqtt",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/create": {
      "post": {
        "summary": "create gcp trigger",
        "operationId": "createGcpTrigger",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new gcp trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GcpTriggerData"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "gcp trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/update/{path}": {
      "post": {
        "summary": "update gcp trigger",
        "operationId": "updateGcpTrigger",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GcpTriggerData"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "gcp trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/delete/{path}": {
      "delete": {
        "summary": "delete gcp trigger",
        "operationId": "deleteGcpTrigger",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "gcp trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/get/{path}": {
      "get": {
        "summary": "get gcp trigger",
        "operationId": "getGcpTrigger",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "gcp trigger deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GcpTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/list": {
      "get": {
        "summary": "list gcp triggers",
        "operationId": "listGcpTriggers",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "gcp trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GcpTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/exists/{path}": {
      "get": {
        "summary": "does gcp trigger exists",
        "operationId": "existsGcpTrigger",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "gcp trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled gcp trigger",
        "operationId": "setGcpTriggerMode",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated gcp trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "gcp trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/test": {
      "post": {
        "summary": "test gcp connection",
        "operationId": "testGcpConnection",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test gcp connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "connection": {
                    "type": "object"
                  }
                },
                "required": [
                  "connection"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "try to connect to a gcp broker",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/subscriptions/delete/{path}": {
      "delete": {
        "summary": "delete gcp trigger",
        "operationId": "deleteGcpSubscription",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "args to delete subscription from google cloud",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteGcpSubscription"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "gcp trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/topics/list/{path}": {
      "get": {
        "summary": "list all topics of google cloud service",
        "operationId": "listGoogleTopics",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "get all google topics",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/gcp_triggers/subscriptions/list/{path}": {
      "post": {
        "summary": "list all subscription of a give topic from google cloud service",
        "operationId": "listAllTGoogleTopicSubscriptions",
        "tags": [
          "gcp_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "args to get subscription's topic from google cloud",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetAllTopicSubscription"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "get all google topic subscriptions name",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/postgres/version/{path}": {
      "get": {
        "summary": "get postgres version",
        "operationId": "getPostgresVersion",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "postgres version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/is_valid_postgres_configuration/{path}": {
      "get": {
        "summary": "check if postgres configuration is set to logical",
        "operationId": "isValidPostgresConfiguration",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "boolean that indicates if postgres is set to logical level or not",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/create_template_script": {
      "post": {
        "summary": "create template script",
        "operationId": "createTemplateScript",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "template script",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateScript"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "custom id to retrieve template script",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/get_template_script/{id}": {
      "get": {
        "summary": "get template script",
        "operationId": "getTemplateScript",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Id"
          }
        ],
        "responses": {
          "200": {
            "description": "template script",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/slot/list/{path}": {
      "get": {
        "summary": "list postgres replication slot",
        "operationId": "listPostgresReplicationSlot",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "list postgres slot",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SlotList"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/slot/create/{path}": {
      "post": {
        "summary": "create replication slot for postgres",
        "operationId": "createPostgresReplicationSlot",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "new slot for postgres",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Slot"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "slot created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/slot/delete/{path}": {
      "delete": {
        "summary": "delete postgres replication slot",
        "operationId": "deletePostgresReplicationSlot",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "replication slot of postgres",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Slot"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "postgres replication slot deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/publication/list/{path}": {
      "get": {
        "summary": "list postgres publication",
        "operationId": "listPostgresPublication",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "database publication list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/publication/get/{publication}/{path}": {
      "get": {
        "summary": "get postgres publication",
        "operationId": "getPostgresPublication",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "$ref": "#/components/parameters/PublicationName"
          }
        ],
        "responses": {
          "200": {
            "description": "postgres publication get",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicationData"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/publication/create/{publication}/{path}": {
      "post": {
        "summary": "create publication for postgres",
        "operationId": "createPostgresPublication",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "$ref": "#/components/parameters/PublicationName"
          }
        ],
        "requestBody": {
          "description": "new publication for postgres",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicationData"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "publication created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/publication/update/{publication}/{path}": {
      "post": {
        "summary": "update publication for postgres",
        "operationId": "updatePostgresPublication",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "$ref": "#/components/parameters/PublicationName"
          }
        ],
        "requestBody": {
          "description": "update publication for postgres",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicationData"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "publication updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/publication/delete/{publication}/{path}": {
      "delete": {
        "summary": "delete postgres publication",
        "operationId": "deletePostgresPublication",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "$ref": "#/components/parameters/PublicationName"
          }
        ],
        "responses": {
          "200": {
            "description": "postgres publication deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/create": {
      "post": {
        "summary": "create postgres trigger",
        "operationId": "createPostgresTrigger",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new postgres trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewPostgresTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "postgres trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/update/{path}": {
      "post": {
        "summary": "update postgres trigger",
        "operationId": "updatePostgresTrigger",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditPostgresTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "postgres trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/delete/{path}": {
      "delete": {
        "summary": "delete postgres trigger",
        "operationId": "deletePostgresTrigger",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "postgres trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/get/{path}": {
      "get": {
        "summary": "get postgres trigger",
        "operationId": "getPostgresTrigger",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "get postgres trigger",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostgresTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/list": {
      "get": {
        "summary": "list postgres triggers",
        "operationId": "listPostgresTriggers",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "postgres trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PostgresTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/exists/{path}": {
      "get": {
        "summary": "does postgres trigger exists",
        "operationId": "existsPostgresTrigger",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "postgres trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/setmode/{path}": {
      "post": {
        "summary": "set enabled postgres trigger",
        "operationId": "setPostgresTriggerMode",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated postgres trigger enable",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "postgres trigger enabled set",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/postgres_triggers/test": {
      "post": {
        "summary": "test postgres connection",
        "operationId": "testPostgresConnection",
        "tags": [
          "postgres_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "test postgres connection",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "database": {
                    "type": "string"
                  }
                },
                "required": [
                  "database"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successfuly connected to postgres",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/create": {
      "post": {
        "summary": "create email trigger",
        "operationId": "createEmailTrigger",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "new email trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewEmailTrigger"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "email trigger created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/update/{path}": {
      "post": {
        "summary": "update email trigger",
        "operationId": "updateEmailTrigger",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "updated trigger",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditEmailTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "email trigger updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/delete/{path}": {
      "delete": {
        "summary": "delete email trigger",
        "operationId": "deleteEmailTrigger",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "email trigger deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/get/{path}": {
      "get": {
        "summary": "get email trigger",
        "operationId": "getEmailTrigger",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "email trigger retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailTrigger"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/list": {
      "get": {
        "summary": "list email triggers",
        "operationId": "listEmailTriggers",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId",
            "required": true
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "path",
            "description": "filter by path",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_flow",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path_start",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "email trigger list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EmailTrigger"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/exists/{path}": {
      "get": {
        "summary": "does email trigger exists",
        "operationId": "existsEmailTrigger",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "email trigger exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/local_part_exists": {
      "post": {
        "summary": "does email local part exists",
        "operationId": "existsEmailLocalPart",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "email local part exists request",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "local_part": {
                    "type": "string"
                  },
                  "workspaced_local_part": {
                    "type": "boolean"
                  },
                  "trigger_path": {
                    "type": "string"
                  }
                },
                "required": [
                  "local_part"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "email local part exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/email_triggers/setmode/{path}": {
      "post": {
        "summary": "enable/disable email trigger",
        "operationId": "setEmailTriggerMode",
        "tags": [
          "email_trigger"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mode": {
                    "$ref": "#/components/schemas/TriggerMode"
                  }
                },
                "required": [
                  "mode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "email trigger enable/disable",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/groups/list": {
      "get": {
        "summary": "list instance groups",
        "operationId": "listInstanceGroups",
        "tags": [
          "group"
        ],
        "responses": {
          "200": {
            "description": "instance group list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InstanceGroup"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/groups/list_with_workspaces": {
      "get": {
        "summary": "list instance groups with workspace information",
        "operationId": "listInstanceGroupsWithWorkspaces",
        "tags": [
          "group"
        ],
        "responses": {
          "200": {
            "description": "instance group list with workspaces",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InstanceGroupWithWorkspaces"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/groups/get/{name}": {
      "get": {
        "summary": "get instance group",
        "operationId": "getInstanceGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "instance group",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceGroup"
                }
              }
            }
          }
        }
      }
    },
    "/groups/create": {
      "post": {
        "summary": "create instance group",
        "operationId": "createInstanceGroup",
        "tags": [
          "group"
        ],
        "requestBody": {
          "description": "create instance group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "summary": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "instance group created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/groups/update/{name}": {
      "post": {
        "summary": "update instance group",
        "operationId": "updateInstanceGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "update instance group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_summary": {
                    "type": "string"
                  }
                },
                "required": [
                  "new_summary"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "instance group updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/groups/delete/{name}": {
      "delete": {
        "summary": "delete instance group",
        "operationId": "deleteInstanceGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "instance group deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/groups/adduser/{name}": {
      "post": {
        "summary": "add user to instance group",
        "operationId": "addUserToInstanceGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "user to add to instance group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  }
                },
                "required": [
                  "email"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "user added to instance group",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/groups/removeuser/{name}": {
      "post": {
        "summary": "remove user from instance group",
        "operationId": "removeUserFromInstanceGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "user to remove from instance group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  }
                },
                "required": [
                  "email"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "user removed from instance group",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/groups/export": {
      "get": {
        "summary": "export instance groups",
        "operationId": "exportInstanceGroups",
        "tags": [
          "group"
        ],
        "responses": {
          "200": {
            "description": "exported instance groups",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExportedInstanceGroup"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/groups/overwrite": {
      "post": {
        "summary": "overwrite instance groups",
        "operationId": "overwriteInstanceGroups",
        "tags": [
          "group"
        ],
        "requestBody": {
          "description": "overwrite instance groups",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExportedInstanceGroup"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "success message",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/list": {
      "get": {
        "summary": "list groups",
        "operationId": "listGroups",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "group list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Group"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/listnames": {
      "get": {
        "summary": "list group names",
        "operationId": "listGroupNames",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "only_member_of",
            "in": "query",
            "description": "only list the groups the user is member of (default false)",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "group list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/create": {
      "post": {
        "summary": "create group",
        "operationId": "createGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "create group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "summary": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "group created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/update/{name}": {
      "post": {
        "summary": "update group",
        "operationId": "updateGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "updated group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "summary": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "group updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/delete/{name}": {
      "delete": {
        "summary": "delete group",
        "operationId": "deleteGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "group deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/get/{name}": {
      "get": {
        "summary": "get group",
        "operationId": "getGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "group",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/adduser/{name}": {
      "post": {
        "summary": "add user to group",
        "operationId": "addUserToGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "added user to group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "user added to group",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups/removeuser/{name}": {
      "post": {
        "summary": "remove user to group",
        "operationId": "removeUserToGroup",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "added user to group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "user removed from group",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/groups_history/get/{name}": {
      "get": {
        "summary": "get group permission history",
        "operationId": "getGroupPermissionHistory",
        "tags": [
          "group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "group permission history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer"
                      },
                      "changed_by": {
                        "type": "string"
                      },
                      "changed_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "change_type": {
                        "type": "string"
                      },
                      "member_affected": {
                        "type": "string",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/list": {
      "get": {
        "summary": "list folders",
        "operationId": "listFolders",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "folder list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Folder"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/listnames": {
      "get": {
        "summary": "list folder names",
        "operationId": "listFolderNames",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "only_member_of",
            "in": "query",
            "description": "only list the folders the user is member of (default false)",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "folder list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/create": {
      "post": {
        "summary": "create folder",
        "operationId": "createFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "create folder",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "summary": {
                    "type": "string"
                  },
                  "owners": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "extra_perms": {
                    "additionalProperties": {
                      "type": "boolean"
                    }
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "folder created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/update/{name}": {
      "post": {
        "summary": "update folder",
        "operationId": "updateFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "update folder",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "summary": {
                    "type": "string"
                  },
                  "owners": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "extra_perms": {
                    "additionalProperties": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "folder updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/delete/{name}": {
      "delete": {
        "summary": "delete folder",
        "operationId": "deleteFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "folder deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/get/{name}": {
      "get": {
        "summary": "get folder",
        "operationId": "getFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "folder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Folder"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/exists/{name}": {
      "get": {
        "summary": "exists folder",
        "operationId": "existsFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "folder exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/getusage/{name}": {
      "get": {
        "summary": "get folder usage",
        "operationId": "getFolderUsage",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "folder",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "scripts": {
                      "type": "number"
                    },
                    "flows": {
                      "type": "number"
                    },
                    "apps": {
                      "type": "number"
                    },
                    "resources": {
                      "type": "number"
                    },
                    "variables": {
                      "type": "number"
                    },
                    "schedules": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "scripts",
                    "flows",
                    "apps",
                    "resources",
                    "variables",
                    "schedules"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/addowner/{name}": {
      "post": {
        "summary": "add owner to folder",
        "operationId": "addOwnerToFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "owner user to folder",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "owner": {
                    "type": "string"
                  }
                },
                "required": [
                  "owner"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "owner added to folder",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders/removeowner/{name}": {
      "post": {
        "summary": "remove owner to folder",
        "operationId": "removeOwnerToFolder",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "added owner to folder",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "owner": {
                    "type": "string"
                  },
                  "write": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "owner"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "owner removed from folder",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/folders_history/get/{name}": {
      "get": {
        "summary": "get folder permission history",
        "operationId": "getFolderPermissionHistory",
        "tags": [
          "folder"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Name"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "folder permission history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer"
                      },
                      "changed_by": {
                        "type": "string"
                      },
                      "changed_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "change_type": {
                        "type": "string"
                      },
                      "affected": {
                        "type": "string",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/list": {
      "get": {
        "summary": "list workers",
        "operationId": "listWorkers",
        "x-mcp-tool": true,
        "tags": [
          "worker"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "name": "ping_since",
            "in": "query",
            "required": false,
            "description": "number of seconds the worker must have had a last ping more recent of (default to 300)",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "a list of workers",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkerPing"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/exists_workers_with_tags": {
      "get": {
        "summary": "exists workers with tags",
        "operationId": "existsWorkersWithTags",
        "tags": [
          "worker"
        ],
        "parameters": [
          {
            "name": "tags",
            "in": "query",
            "required": true,
            "description": "comma separated list of tags",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspace",
            "in": "query",
            "required": false,
            "description": "workspace to filter tags visibility (required when TAGS_ARE_SENSITIVE is enabled for non-superadmins)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "map of tags to whether at least one worker with the tag exists",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/queue_metrics": {
      "get": {
        "summary": "get queue metrics",
        "operationId": "getQueueMetrics",
        "tags": [
          "worker"
        ],
        "responses": {
          "200": {
            "description": "metrics",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "values": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "created_at": {
                              "type": "string"
                            },
                            "value": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "created_at",
                            "value"
                          ]
                        }
                      }
                    },
                    "required": [
                      "id",
                      "values"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/queue_counts": {
      "get": {
        "summary": "get counts of jobs waiting for an executor per tag",
        "operationId": "getCountsOfJobsWaitingPerTag",
        "tags": [
          "worker"
        ],
        "responses": {
          "200": {
            "description": "queue counts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/workers/queue_running_counts": {
      "get": {
        "summary": "get counts of currently running jobs per tag",
        "operationId": "getCountsOfRunningJobsPerTag",
        "tags": [
          "worker"
        ],
        "responses": {
          "200": {
            "description": "queue running counts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/configs/list_worker_groups": {
      "get": {
        "summary": "list worker groups",
        "operationId": "listWorkerGroups",
        "tags": [
          "config"
        ],
        "responses": {
          "200": {
            "description": "a list of worker group configs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "config": {}
                    },
                    "required": [
                      "name",
                      "config"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/configs/get/{name}": {
      "get": {
        "summary": "get config",
        "operationId": "get config",
        "tags": [
          "config"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "a config",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Configs"
                }
              }
            }
          }
        }
      }
    },
    "/configs/update/{name}": {
      "post": {
        "summary": "Update config",
        "operationId": "updateConfig",
        "tags": [
          "config"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "requestBody": {
          "description": "worker group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update a worker group",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete Config",
        "operationId": "deleteConfig",
        "tags": [
          "config"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Name"
          }
        ],
        "responses": {
          "200": {
            "description": "Delete config",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/configs/list": {
      "get": {
        "summary": "list configs",
        "operationId": "listConfigs",
        "tags": [
          "config"
        ],
        "responses": {
          "200": {
            "description": "list of configs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Config"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/configs/list_autoscaling_events/{worker_group}": {
      "get": {
        "summary": "List autoscaling events",
        "operationId": "listAutoscalingEvents",
        "tags": [
          "config"
        ],
        "parameters": [
          {
            "name": "worker_group",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "List of autoscaling events",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AutoscalingEvent"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/configs/native_kubernetes_autoscaling_healthcheck": {
      "get": {
        "summary": "Check Kubernetes autoscaling health for a worker group",
        "operationId": "nativeKubernetesAutoscalingHealthcheck",
        "tags": [
          "config"
        ],
        "responses": {
          "200": {
            "description": "Kubernetes autoscaling is healthy"
          },
          "400": {
            "description": "Error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/configs/list_available_python_versions": {
      "get": {
        "summary": "Get currently available python versions provided by UV.",
        "operationId": "listAvailablePythonVersions",
        "tags": [
          "config"
        ],
        "responses": {
          "200": {
            "description": "List of python versions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/agent_workers/create_agent_token": {
      "post": {
        "summary": "create agent token",
        "operationId": "createAgentToken",
        "tags": [
          "agent_workers"
        ],
        "requestBody": {
          "description": "agent token",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "worker_group": {
                    "type": "string"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "exp": {
                    "type": "integer"
                  }
                },
                "required": [
                  "worker_group",
                  "tags",
                  "exp"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "agent token created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/agent_workers/blacklist_token": {
      "post": {
        "summary": "blacklist agent token (requires super admin)",
        "operationId": "blacklistAgentToken",
        "tags": [
          "agent_workers"
        ],
        "requestBody": {
          "description": "token to blacklist",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string",
                    "description": "The agent token to blacklist"
                  },
                  "expires_at": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Optional expiration date for the blacklist entry"
                  }
                },
                "required": [
                  "token"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "token blacklisted successfully"
          }
        }
      }
    },
    "/agent_workers/remove_blacklist_token": {
      "post": {
        "summary": "remove agent token from blacklist (requires super admin)",
        "operationId": "removeBlacklistAgentToken",
        "tags": [
          "agent_workers"
        ],
        "requestBody": {
          "description": "token to remove from blacklist",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string",
                    "description": "The agent token to remove from blacklist"
                  }
                },
                "required": [
                  "token"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "token removed from blacklist successfully"
          }
        }
      }
    },
    "/agent_workers/list_blacklisted_tokens": {
      "get": {
        "summary": "list blacklisted agent tokens (requires super admin)",
        "operationId": "listBlacklistedAgentTokens",
        "tags": [
          "agent_workers"
        ],
        "parameters": [
          {
            "name": "include_expired",
            "in": "query",
            "description": "Whether to include expired blacklisted tokens",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "list of blacklisted tokens",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "token": {
                        "type": "string",
                        "description": "The blacklisted token (without prefix)"
                      },
                      "expires_at": {
                        "type": "string",
                        "format": "date-time",
                        "description": "When the blacklist entry expires"
                      },
                      "blacklisted_at": {
                        "type": "string",
                        "format": "date-time",
                        "description": "When the token was blacklisted"
                      },
                      "blacklisted_by": {
                        "type": "string",
                        "description": "Email of the user who blacklisted the token"
                      }
                    },
                    "required": [
                      "token",
                      "expires_at",
                      "blacklisted_at",
                      "blacklisted_by"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/agent_workers/get_min_version": {
      "get": {
        "summary": "get minimum worker version across all workers",
        "operationId": "getMinVersion",
        "tags": [
          "agent_workers"
        ],
        "responses": {
          "200": {
            "description": "minimum worker version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "description": "Minimum semantic version across all workers (e.g. \"1.583.0\")"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/acls/get/{kind}/{path}": {
      "get": {
        "summary": "get granular acls",
        "operationId": "getGranularAcls",
        "tags": [
          "granular_acl"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "script",
                "group_",
                "resource",
                "schedule",
                "variable",
                "flow",
                "folder",
                "app",
                "raw_app",
                "http_trigger",
                "websocket_trigger",
                "kafka_trigger",
                "nats_trigger",
                "postgres_trigger",
                "mqtt_trigger",
                "gcp_trigger",
                "sqs_trigger",
                "email_trigger"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "acls",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/acls/add/{kind}/{path}": {
      "post": {
        "summary": "add granular acls",
        "operationId": "addGranularAcls",
        "tags": [
          "granular_acl"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "script",
                "group_",
                "resource",
                "schedule",
                "variable",
                "flow",
                "folder",
                "app",
                "raw_app",
                "http_trigger",
                "websocket_trigger",
                "kafka_trigger",
                "nats_trigger",
                "postgres_trigger",
                "mqtt_trigger",
                "gcp_trigger",
                "sqs_trigger",
                "email_trigger"
              ]
            }
          }
        ],
        "requestBody": {
          "description": "acl to add",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "owner": {
                    "type": "string"
                  },
                  "write": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "owner"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "granular acl added",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/acls/remove/{kind}/{path}": {
      "post": {
        "summary": "remove granular acls",
        "operationId": "removeGranularAcls",
        "tags": [
          "granular_acl"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "script",
                "group_",
                "resource",
                "schedule",
                "variable",
                "flow",
                "folder",
                "app",
                "raw_app",
                "http_trigger",
                "websocket_trigger",
                "kafka_trigger",
                "nats_trigger",
                "postgres_trigger",
                "mqtt_trigger",
                "gcp_trigger",
                "sqs_trigger",
                "email_trigger"
              ]
            }
          }
        ],
        "requestBody": {
          "description": "acl to add",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "owner": {
                    "type": "string"
                  }
                },
                "required": [
                  "owner"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "granular acl removed",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/capture/set_config": {
      "post": {
        "summary": "set capture config",
        "operationId": "setCaptureConfig",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "capture config",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "trigger_kind": {
                    "$ref": "#/components/schemas/CaptureTriggerKind"
                  },
                  "path": {
                    "type": "string"
                  },
                  "is_flow": {
                    "type": "boolean"
                  },
                  "trigger_config": {
                    "type": "object"
                  }
                },
                "required": [
                  "trigger_kind",
                  "path",
                  "is_flow"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "capture config set",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/capture/ping_config/{trigger_kind}/{runnable_kind}/{path}": {
      "post": {
        "summary": "ping capture config",
        "operationId": "pingCaptureConfig",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "trigger_kind",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CaptureTriggerKind"
            }
          },
          {
            "$ref": "#/components/parameters/RunnableKind"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "capture config pinged"
          }
        }
      }
    },
    "/w/{workspace}/capture/get_configs/{runnable_kind}/{path}": {
      "get": {
        "summary": "get capture configs for a script or flow",
        "operationId": "getCaptureConfigs",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableKind"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "capture configs for a script or flow",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CaptureConfig"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/capture/list/{runnable_kind}/{path}": {
      "get": {
        "summary": "list captures for a script or flow",
        "operationId": "listCaptures",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableKind"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "trigger_kind",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CaptureTriggerKind"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "list of captures for a script or flow",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Capture"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/capture/move/{runnable_kind}/{path}": {
      "post": {
        "summary": "move captures and configs for a script or flow",
        "operationId": "moveCapturesAndConfigs",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableKind"
          },
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "requestBody": {
          "description": "move captures and configs to a new path",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "new_path": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "captures and configs moved",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/capture/{id}": {
      "get": {
        "summary": "get a capture",
        "operationId": "getCapture",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "capture",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Capture"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "delete a capture",
        "operationId": "deleteCapture",
        "tags": [
          "capture"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "capture deleted"
          }
        }
      }
    },
    "/w/{workspace}/favorites/star": {
      "post": {
        "summary": "star item",
        "operationId": "star",
        "tags": [
          "favorite"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  },
                  "favorite_kind": {
                    "type": "string",
                    "enum": [
                      "flow",
                      "app",
                      "script",
                      "raw_app",
                      "asset"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "star item"
          }
        }
      }
    },
    "/w/{workspace}/favorites/unstar": {
      "post": {
        "summary": "unstar item",
        "operationId": "unstar",
        "tags": [
          "favorite"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  },
                  "favorite_kind": {
                    "type": "string",
                    "enum": [
                      "flow",
                      "app",
                      "script",
                      "raw_app",
                      "asset"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "unstar item"
          }
        }
      }
    },
    "/w/{workspace}/inputs/history": {
      "get": {
        "summary": "List Inputs used in previously completed jobs",
        "operationId": "getInputHistory",
        "tags": [
          "input"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableId"
          },
          {
            "$ref": "#/components/parameters/RunnableTypeQuery"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "name": "include_preview",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Input history for completed jobs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Input"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/inputs/{jobOrInputId}/args": {
      "get": {
        "summary": "Get args from history or saved input",
        "operationId": "getArgsFromHistoryOrSavedInput",
        "tags": [
          "input"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "jobOrInputId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "input",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "allow_large",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "args",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/inputs/list": {
      "get": {
        "summary": "List saved Inputs for a Runnable",
        "operationId": "listInputs",
        "tags": [
          "input"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableId"
          },
          {
            "$ref": "#/components/parameters/RunnableTypeQuery"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Saved Inputs for a Runnable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Input"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/inputs/create": {
      "post": {
        "summary": "Create an Input for future use in a script or flow",
        "operationId": "createInput",
        "tags": [
          "input"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/RunnableId"
          },
          {
            "$ref": "#/components/parameters/RunnableTypeQuery"
          }
        ],
        "requestBody": {
          "description": "Input",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Input created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/inputs/update": {
      "post": {
        "summary": "Update an Input",
        "operationId": "updateInput",
        "tags": [
          "input"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "UpdateInput",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Input updated",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/inputs/delete/{input}": {
      "post": {
        "summary": "Delete a Saved Input",
        "operationId": "deleteInput",
        "tags": [
          "input"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/InputId"
          }
        ],
        "responses": {
          "200": {
            "description": "Input deleted",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/duckdb_connection_settings": {
      "post": {
        "summary": "Converts an S3 resource to the set of instructions necessary to connect DuckDB to an S3 bucket",
        "operationId": "duckdbConnectionSettings",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "S3 resource to connect to",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "s3_resource": {
                    "$ref": "#/components/schemas/S3Resource"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Connection settings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "connection_settings_str": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/v2/duckdb_connection_settings": {
      "post": {
        "summary": "Converts an S3 resource to the set of instructions necessary to connect DuckDB to an S3 bucket",
        "operationId": "duckdbConnectionSettingsV2",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "S3 resource path to use to generate the connection settings. If empty, the S3 resource defined in the workspace settings will be used",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "s3_resource_path": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Connection settings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "connection_settings_str": {
                      "type": "string"
                    },
                    "azure_container_path": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "connection_settings_str"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/polars_connection_settings": {
      "post": {
        "summary": "Converts an S3 resource to the set of arguments necessary to connect Polars to an S3 bucket",
        "operationId": "polarsConnectionSettings",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "S3 resource to connect to",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "s3_resource": {
                    "$ref": "#/components/schemas/S3Resource"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Connection settings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "endpoint_url": {
                      "type": "string"
                    },
                    "key": {
                      "type": "string"
                    },
                    "secret": {
                      "type": "string"
                    },
                    "use_ssl": {
                      "type": "boolean"
                    },
                    "cache_regions": {
                      "type": "boolean"
                    },
                    "client_kwargs": {
                      "$ref": "#/components/schemas/PolarsClientKwargs"
                    }
                  },
                  "required": [
                    "endpoint_url",
                    "use_ssl",
                    "cache_regions",
                    "client_kwargs"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/v2/polars_connection_settings": {
      "post": {
        "summary": "Converts an S3 resource to the set of arguments necessary to connect Polars to an S3 bucket",
        "operationId": "polarsConnectionSettingsV2",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "S3 resource path to use to generate the connection settings. If empty, the S3 resource defined in the workspace settings will be used",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "s3_resource_path": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Connection settings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "s3fs_args": {
                      "type": "object",
                      "properties": {
                        "endpoint_url": {
                          "type": "string"
                        },
                        "key": {
                          "type": "string"
                        },
                        "secret": {
                          "type": "string"
                        },
                        "use_ssl": {
                          "type": "boolean"
                        },
                        "cache_regions": {
                          "type": "boolean"
                        },
                        "client_kwargs": {
                          "$ref": "#/components/schemas/PolarsClientKwargs"
                        }
                      },
                      "required": [
                        "endpoint_url",
                        "use_ssl",
                        "cache_regions",
                        "client_kwargs"
                      ]
                    },
                    "storage_options": {
                      "type": "object",
                      "properties": {
                        "aws_endpoint_url": {
                          "type": "string"
                        },
                        "aws_access_key_id": {
                          "type": "string"
                        },
                        "aws_secret_access_key": {
                          "type": "string"
                        },
                        "aws_region": {
                          "type": "string"
                        },
                        "aws_allow_http": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "aws_endpoint_url",
                        "aws_region",
                        "aws_allow_http"
                      ]
                    }
                  },
                  "required": [
                    "s3fs_args",
                    "storage_options"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/v2/s3_resource_info": {
      "post": {
        "summary": "Returns the s3 resource associated to the provided path, or the workspace default S3 resource",
        "operationId": "s3ResourceInfo",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "S3 resource path to use. If empty, the S3 resource defined in the workspace settings will be used",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "s3_resource_path": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Connection settings",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/S3Resource"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/test_connection": {
      "get": {
        "summary": "Test connection to the workspace object storage",
        "operationId": "datasetStorageTestConnection",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Connection settings",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/list_stored_files": {
      "get": {
        "summary": "List the file keys available in a workspace object storage",
        "operationId": "listStoredFiles",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "max_keys",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "marker",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "prefix",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of file keys",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "next_marker": {
                      "type": "string"
                    },
                    "windmill_large_files": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WindmillLargeFile"
                      }
                    },
                    "restricted_access": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "windmill_large_files"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_file_metadata": {
      "get": {
        "summary": "Load metadata of the file",
        "operationId": "loadFileMetadata",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "FileMetadata",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WindmillFileMetadata"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_file_preview": {
      "get": {
        "summary": "Load a preview of the file",
        "operationId": "loadFilePreview",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "file_size_in_bytes",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "file_mime_type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "csv_separator",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "csv_has_header",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "read_bytes_from",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "read_bytes_length",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "FilePreview",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WindmillFilePreview"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/list_git_repo_files": {
      "get": {
        "summary": "List the file keys available in instance object storage with resource-based access control",
        "operationId": "listGitRepoFiles",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "max_keys",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "marker",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "prefix",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Must follow format gitrepos/{workspace_id}/{resource_path}/..."
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of file keys",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "next_marker": {
                      "type": "string"
                    },
                    "windmill_large_files": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WindmillLargeFile"
                      }
                    },
                    "restricted_access": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "windmill_large_files"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_git_repo_file_preview": {
      "get": {
        "summary": "Load a preview of a file from instance storage with resource-based access control",
        "operationId": "loadGitRepoFilePreview",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Must follow format gitrepos/{workspace_id}/{resource_path}/..."
            }
          },
          {
            "name": "file_size_in_bytes",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "file_mime_type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "csv_separator",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "csv_has_header",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "read_bytes_from",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "read_bytes_length",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "FilePreview",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WindmillFilePreview"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_git_repo_file_metadata": {
      "get": {
        "summary": "Load file metadata from instance storage with resource-based access control",
        "operationId": "loadGitRepoFileMetadata",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Must follow format gitrepos/{workspace_id}/{resource_path}/..."
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "FileMetadata",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WindmillFileMetadata"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/check_s3_folder_exists": {
      "get": {
        "summary": "Check if S3 path exists and is a folder",
        "operationId": "checkS3FolderExists",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "description": "S3 file key to check (e.g., gitrepos/{workspace_id}/u/user/resource/{commit_hash})",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "S3 folder existence check result",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "exists": {
                      "type": "boolean",
                      "description": "Whether the path exists"
                    },
                    "is_folder": {
                      "type": "boolean",
                      "description": "Whether the path is a folder (true) or file (false)"
                    }
                  },
                  "required": [
                    "exists",
                    "is_folder"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_parquet_preview/{path}": {
      "get": {
        "summary": "Load a preview of a parquet file",
        "operationId": "loadParquetPreview",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sort_col",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort_desc",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "search_col",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search_term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Parquet Preview",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_table_count/{path}": {
      "get": {
        "summary": "Load the table row count",
        "operationId": "loadTableRowCount",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "search_col",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search_term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Table count",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/load_csv_preview/{path}": {
      "get": {
        "summary": "Load a preview of a csv file",
        "operationId": "loadCsvPreview",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/Path"
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sort_col",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort_desc",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "search_col",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search_term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "csv_separator",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Csv Preview",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/delete_s3_file": {
      "delete": {
        "summary": "Permanently delete file from S3",
        "operationId": "deleteS3File",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirmation",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/move_s3_file": {
      "get": {
        "summary": "Move a S3 file from one path to the other within the same bucket",
        "operationId": "moveS3File",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "src_file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dest_file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirmation",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/upload_s3_file": {
      "post": {
        "summary": "Upload file to S3 bucket",
        "operationId": "fileUpload",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "file_extension",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "s3_resource_path",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "content_type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "content_disposition",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "File content",
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "File upload status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "file_key": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "file_key"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/upload_git_repo_file_to_instance_storage": {
      "post": {
        "summary": "Upload a file to the instance storage gitrepos section for viewing",
        "operationId": "gitRepoViewerFileUpload",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "file_extension",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "s3_resource_path",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "content_type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "content_disposition",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "File content",
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "File upload status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "file_key": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "file_key"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/download_s3_file": {
      "get": {
        "summary": "Download file from S3 bucket",
        "operationId": "fileDownload",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "s3_resource_path",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "storage",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Chunk of the downloaded file",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_helpers/download_s3_parquet_file_as_csv": {
      "get": {
        "summary": "Download file to S3 bucket",
        "operationId": "fileDownloadParquetAsCsv",
        "tags": [
          "helpers"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "file_key",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "s3_resource_path",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The downloaded file",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_metrics/get/{id}": {
      "post": {
        "summary": "get job metrics",
        "operationId": "getJobMetrics",
        "tags": [
          "metrics"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "requestBody": {
          "description": "parameters for statistics retrieval",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "timeseries_max_datapoints": {
                    "type": "integer"
                  },
                  "from_timestamp": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "to_timestamp": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job details",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "metrics_metadata": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MetricMetadata"
                      }
                    },
                    "scalar_metrics": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ScalarMetric"
                      }
                    },
                    "timeseries_metrics": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TimeseriesMetric"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_metrics/set_progress/{id}": {
      "post": {
        "summary": "set job metrics",
        "operationId": "setJobProgress",
        "tags": [
          "metrics"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "requestBody": {
          "description": "parameters for statistics retrieval",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "percent": {
                    "type": "integer"
                  },
                  "flow_job_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Job progress updated",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/job_metrics/get_progress/{id}": {
      "get": {
        "summary": "get job progress",
        "operationId": "getJobProgress",
        "tags": [
          "metrics"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "job progress between 0 and 99",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/service_logs/list_files": {
      "get": {
        "summary": "list log files ordered by timestamp",
        "operationId": "listLogFiles",
        "tags": [
          "service_logs"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "name": "with_error",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "time",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "hostname": {
                        "type": "string"
                      },
                      "mode": {
                        "type": "string"
                      },
                      "worker_group": {
                        "type": "string"
                      },
                      "log_ts": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "file_path": {
                        "type": "string"
                      },
                      "ok_lines": {
                        "type": "integer"
                      },
                      "err_lines": {
                        "type": "integer"
                      },
                      "json_fmt": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "hostname",
                      "mode",
                      "log_ts",
                      "file_path",
                      "json_fmt"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/service_logs/get_log_file/{path}": {
      "get": {
        "summary": "get log file by path",
        "operationId": "getLogFile",
        "tags": [
          "service_logs"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Path"
          }
        ],
        "responses": {
          "200": {
            "description": "log stream",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/concurrency_groups/list": {
      "get": {
        "summary": "List all concurrency groups",
        "operationId": "listConcurrencyGroups",
        "tags": [
          "concurrencyGroups"
        ],
        "responses": {
          "200": {
            "description": "all concurrency groups",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ConcurrencyGroup"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/concurrency_groups/prune/{concurrency_id}": {
      "delete": {
        "summary": "Delete concurrency group",
        "operationId": "deleteConcurrencyGroup",
        "tags": [
          "concurrencyGroups"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ConcurrencyId"
          }
        ],
        "responses": {
          "200": {
            "description": "concurrency group removed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          }
        }
      }
    },
    "/concurrency_groups/{id}/key": {
      "get": {
        "summary": "Get the concurrency key for a job that has concurrency limits enabled",
        "operationId": "getConcurrencyKey",
        "tags": [
          "concurrencyGroups"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/JobId"
          }
        ],
        "responses": {
          "200": {
            "description": "concurrency key for given job",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/concurrency_groups/list_jobs": {
      "get": {
        "summary": "Get intervals of job runtime concurrency",
        "operationId": "listExtendedJobs",
        "tags": [
          "concurrencyGroups",
          "job"
        ],
        "parameters": [
          {
            "name": "concurrency_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "row_limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "$ref": "#/components/parameters/CreatedBy"
          },
          {
            "$ref": "#/components/parameters/Label"
          },
          {
            "$ref": "#/components/parameters/ParentJob"
          },
          {
            "$ref": "#/components/parameters/ScriptExactPath"
          },
          {
            "$ref": "#/components/parameters/ScriptStartPath"
          },
          {
            "$ref": "#/components/parameters/SchedulePath"
          },
          {
            "$ref": "#/components/parameters/ScriptExactHash"
          },
          {
            "$ref": "#/components/parameters/StartedBefore"
          },
          {
            "$ref": "#/components/parameters/StartedAfter"
          },
          {
            "$ref": "#/components/parameters/Running"
          },
          {
            "$ref": "#/components/parameters/ScheduledForBeforeNow"
          },
          {
            "$ref": "#/components/parameters/CompletedBefore"
          },
          {
            "$ref": "#/components/parameters/CompletedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBeforeQueue"
          },
          {
            "$ref": "#/components/parameters/CreatedAfterQueue"
          },
          {
            "$ref": "#/components/parameters/JobKinds"
          },
          {
            "$ref": "#/components/parameters/ArgsFilter"
          },
          {
            "$ref": "#/components/parameters/Tag"
          },
          {
            "$ref": "#/components/parameters/ResultFilter"
          },
          {
            "$ref": "#/components/parameters/AllowWildcards"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/JobTriggerKind"
          },
          {
            "name": "is_skipped",
            "description": "is the job skipped",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_flow_step",
            "description": "is the job a flow step",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_null_parent",
            "description": "has null parent",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "success",
            "description": "filter on successful jobs",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "all_workspaces",
            "description": "get jobs from all workspaces (only valid if request come from the `admins` workspace)",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_not_schedule",
            "description": "is not a scheduled job",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "time",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtendedJobs"
                }
              }
            }
          }
        }
      }
    },
    "/srch/w/{workspace}/index/search/job": {
      "get": {
        "summary": "Search through jobs with a string query",
        "operationId": "searchJobsIndex",
        "tags": [
          "indexSearch"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "search_query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagination_offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "search results",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "query_parse_errors": {
                      "description": "a list of the terms that couldn't be parsed (and thus ignored)",
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "hits": {
                      "description": "the jobs that matched the query",
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/JobSearchHit"
                      }
                    },
                    "hit_count": {
                      "description": "how many jobs matched in total",
                      "type": "number"
                    },
                    "index_metadata": {
                      "description": "Metadata about the index current state",
                      "type": "object",
                      "properties": {
                        "indexed_until": {
                          "description": "Datetime of the most recently indexed job",
                          "type": "string",
                          "format": "date-time"
                        },
                        "lost_lock_ownership": {
                          "description": "Is the current indexer service being replaced",
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/srch/index/search/service_logs": {
      "get": {
        "summary": "Search through service logs with a string query",
        "operationId": "searchLogsIndex",
        "tags": [
          "indexSearch"
        ],
        "parameters": [
          {
            "name": "search_query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mode",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "worker_group",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hostname",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_ts",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "max_ts",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "search results",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "query_parse_errors": {
                      "description": "a list of the terms that couldn't be parsed (and thus ignored)",
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "hits": {
                      "description": "log files that matched the query",
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/LogSearchHit"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/srch/index/search/count_service_logs": {
      "get": {
        "summary": "Search and count the log line hits on every provided host",
        "operationId": "countSearchLogsIndex",
        "tags": [
          "indexSearch"
        ],
        "parameters": [
          {
            "name": "search_query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_ts",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "max_ts",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "search results",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "query_parse_errors": {
                      "description": "a list of the terms that couldn't be parsed (and thus ignored)",
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "count_per_host": {
                      "description": "count of log lines that matched the query per hostname",
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/srch/index/delete/{idx_name}": {
      "delete": {
        "summary": "Restart container and delete the index to recreate it.",
        "operationId": "clearIndex",
        "tags": [
          "indexSearch"
        ],
        "parameters": [
          {
            "name": "idx_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "JobIndex",
                "ServiceLogIndex"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "idx to be deleted and container restarting",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/assets/list": {
      "get": {
        "summary": "List all assets in the workspace with cursor pagination",
        "operationId": "listAssets",
        "tags": [
          "asset"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items per page (max 1000, default 50)",
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 1000
            }
          },
          {
            "name": "cursor_created_at",
            "in": "query",
            "description": "Cursor timestamp for pagination (created_at of last item from previous page)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "cursor_id",
            "in": "query",
            "description": "Cursor ID for pagination (id of last item from previous page)",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "asset_path",
            "in": "query",
            "description": "Filter by asset path (case-insensitive partial match)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "usage_path",
            "in": "query",
            "description": "Filter by usage path (case-insensitive partial match)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "asset_kinds",
            "in": "query",
            "description": "Filter by asset kinds (multiple values allowed)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "paginated assets in the workspace",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "assets"
                  ],
                  "properties": {
                    "assets": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "path",
                          "kind",
                          "usages"
                        ],
                        "properties": {
                          "path": {
                            "type": "string"
                          },
                          "kind": {
                            "$ref": "#/components/schemas/AssetKind"
                          },
                          "usages": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "path",
                                "kind"
                              ],
                              "properties": {
                                "path": {
                                  "type": "string"
                                },
                                "kind": {
                                  "$ref": "#/components/schemas/AssetUsageKind"
                                },
                                "access_type": {
                                  "$ref": "#/components/schemas/AssetUsageAccessType"
                                },
                                "columns": {
                                  "type": "object",
                                  "description": "The columns used (for tables)",
                                  "additionalProperties": {
                                    "$ref": "#/components/schemas/AssetUsageAccessType"
                                  }
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "description": "When the asset was detected"
                                },
                                "metadata": {
                                  "type": "object",
                                  "properties": {
                                    "runnable_path": {
                                      "type": "string",
                                      "description": "The path of the script/flow that was run (only present when kind is 'job')"
                                    },
                                    "job_kind": {
                                      "type": "string",
                                      "description": "The kind of job (script, flow, preview, etc.) (only present when kind is 'job')"
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "metadata": {
                            "type": "object",
                            "properties": {
                              "resource_type": {
                                "type": "string",
                                "description": "The type of the resource (only present when kind is 'resource')"
                              }
                            }
                          }
                        }
                      }
                    },
                    "next_cursor": {
                      "type": "object",
                      "description": "Cursor for the next page (null if no more pages)",
                      "nullable": true,
                      "properties": {
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Timestamp to use for next page"
                        },
                        "id": {
                          "type": "integer",
                          "format": "int64",
                          "description": "ID to use for next page"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/assets/list_by_usages": {
      "post": {
        "summary": "List all assets used by given usages paths",
        "operationId": "listAssetsByUsage",
        "tags": [
          "asset"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "requestBody": {
          "description": "list assets by usages",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "usages"
                ],
                "properties": {
                  "usages": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "path",
                        "kind"
                      ],
                      "properties": {
                        "path": {
                          "type": "string"
                        },
                        "kind": {
                          "$ref": "#/components/schemas/AssetUsageKind"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "all assets used by the given usage paths, in the same order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "path",
                        "kind"
                      ],
                      "properties": {
                        "path": {
                          "type": "string"
                        },
                        "kind": {
                          "$ref": "#/components/schemas/AssetKind"
                        },
                        "access_type": {
                          "$ref": "#/components/schemas/AssetUsageAccessType"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/w/{workspace}/assets/list_favorites": {
      "get": {
        "summary": "List all favorite assets for the authenticated user",
        "operationId": "listFavoriteAssets",
        "tags": [
          "asset"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of favorite assets",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "path"
                    ],
                    "properties": {
                      "path": {
                        "type": "string",
                        "description": "The asset path"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/mcp/w/{workspace}/list_tools": {
      "get": {
        "summary": "list available MCP tools",
        "operationId": "listMcpTools",
        "tags": [
          "mcp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceId"
          }
        ],
        "responses": {
          "200": {
            "description": "list of MCP tools available for the workspace",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EndpointTool"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/mcp/oauth/discover": {
      "post": {
        "summary": "discover MCP server OAuth metadata",
        "operationId": "discoverMcpOAuth",
        "tags": [
          "mcp_oauth"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "mcp_server_url"
                ],
                "properties": {
                  "mcp_server_url": {
                    "type": "string",
                    "description": "URL of the MCP server to discover OAuth metadata from"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OAuth metadata from MCP server",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "scopes_supported": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "authorization_endpoint": {
                      "type": "string"
                    },
                    "token_endpoint": {
                      "type": "string"
                    },
                    "registration_endpoint": {
                      "type": "string"
                    },
                    "supports_dynamic_registration": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/mcp/oauth/start": {
      "get": {
        "summary": "start MCP OAuth popup flow",
        "description": "Opens in a popup, discovers OAuth metadata, registers client, and redirects to OAuth provider",
        "operationId": "startMcpOAuthPopup",
        "tags": [
          "mcp_oauth"
        ],
        "parameters": [
          {
            "name": "mcp_server_url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "URL of the MCP server to connect to"
          },
          {
            "name": "scopes",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of OAuth scopes to request"
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to OAuth provider authorization URL"
          }
        }
      }
    },
    "/mcp/oauth/callback": {
      "get": {
        "security": [],
        "summary": "MCP OAuth callback",
        "description": "Handles OAuth callback, exchanges code for tokens, returns HTML that posts message to opener",
        "operationId": "mcpOAuthCallback",
        "tags": [
          "mcp_oauth"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "OAuth authorization code"
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "CSRF state token"
          }
        ],
        "responses": {
          "200": {
            "description": "HTML page with JavaScript that posts tokens to opener window and closes",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      },
      "cookieAuth": {
        "type": "apiKey",
        "in": "cookie",
        "name": "token"
      }
    },
    "parameters": {
      "Id": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Key": {
        "name": "key",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "WorkspaceId": {
        "name": "workspace",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "PublicationName": {
        "name": "publication",
        "in": "path",
        "required": true,
        "description": "The name of the publication",
        "schema": {
          "type": "string"
        }
      },
      "VersionId": {
        "name": "version",
        "in": "path",
        "required": true,
        "schema": {
          "type": "number"
        }
      },
      "Token": {
        "name": "token",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "AccountId": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer"
        }
      },
      "ClientName": {
        "name": "client_name",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "ScriptPath": {
        "name": "path",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "ScriptHash": {
        "name": "hash",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "JobId": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "Path": {
        "name": "path",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "CustomPath": {
        "name": "custom_path",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "PathId": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer"
        }
      },
      "PathVersion": {
        "name": "version",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer"
        }
      },
      "Name": {
        "name": "name",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Page": {
        "name": "page",
        "description": "which page to return (start at 1, default 1)",
        "in": "query",
        "schema": {
          "type": "integer"
        }
      },
      "PerPage": {
        "name": "per_page",
        "description": "number of items to return for a given page (default 30, max 100)",
        "in": "query",
        "schema": {
          "type": "integer"
        }
      },
      "JobTriggerKind": {
        "name": "trigger_kind",
        "description": "trigger kind (schedule, http, websocket...)",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/JobTriggerKind"
        }
      },
      "OrderDesc": {
        "name": "order_desc",
        "description": "order by desc order (default true)",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "CreatedBy": {
        "name": "created_by",
        "description": "mask to filter exact matching user creator",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "Label": {
        "name": "label",
        "description": "mask to filter exact matching job's label (job labels are completed jobs with as a result an object containing a string in the array at key 'wm_labels')",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "Worker": {
        "name": "worker",
        "description": "worker this job was ran on",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ParentJob": {
        "name": "parent_job",
        "description": "The parent job that is at the origin and responsible for the execution of this script if any",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "WorkerTag": {
        "name": "tag",
        "description": "Override the tag to use",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "CacheTtl": {
        "name": "cache_ttl",
        "description": "Override the cache time to live (in seconds). Can not be used to disable caching, only override with a new cache ttl",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "NewJobId": {
        "name": "job_id",
        "description": "The job id to assign to the created job. if missing, job is chosen randomly using the ULID scheme. If a job id already exists in the queue or as a completed job, the request to create one will fail (Bad Request)",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "IncludeHeader": {
        "name": "include_header",
        "description": "List of headers's keys (separated with ',') whove value are added to the args\nHeader's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key\n",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "QueueLimit": {
        "name": "queue_limit",
        "description": "The maximum size of the queue for which the request would get rejected if that job would push it above that limit\n",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "SkipPreprocessor": {
        "name": "skip_preprocessor",
        "description": "skip the preprocessor",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "Payload": {
        "name": "payload",
        "description": "The base64 encoded payload that has been encoded as a JSON. e.g how to encode such payload encodeURIComponent\n`encodeURIComponent(btoa(JSON.stringify({a: 2})))`\n",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ScriptStartPath": {
        "name": "script_path_start",
        "description": "mask to filter matching starting path",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "SchedulePath": {
        "name": "schedule_path",
        "description": "mask to filter by schedule path",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "TriggerPath": {
        "name": "trigger_path",
        "description": "mask to filter by trigger path",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ScriptExactPath": {
        "name": "script_path_exact",
        "description": "mask to filter exact matching path",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ScriptExactHash": {
        "name": "script_hash",
        "description": "mask to filter exact matching path",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "CreatedBefore": {
        "name": "created_before",
        "description": "filter on created before (inclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "CreatedAfter": {
        "name": "created_after",
        "description": "filter on created after (exclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "StartedBefore": {
        "name": "started_before",
        "description": "filter on started before (inclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "StartedAfter": {
        "name": "started_after",
        "description": "filter on started after (exclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "Before": {
        "name": "before",
        "description": "filter on started before (inclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "CompletedBefore": {
        "name": "completed_before",
        "description": "filter on started before (inclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "CompletedAfter": {
        "name": "completed_after",
        "description": "filter on started after (exclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "CreatedAfterQueue": {
        "name": "created_after_queue",
        "description": "filter on jobs created after X for jobs in the queue only",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "CreatedBeforeQueue": {
        "name": "created_before_queue",
        "description": "filter on jobs created before X for jobs in the queue only",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "Success": {
        "name": "success",
        "description": "filter on successful jobs",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "ScheduledForBeforeNow": {
        "name": "scheduled_for_before_now",
        "description": "filter on jobs scheduled_for before now (hence waitinf for a worker)",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "Suspended": {
        "name": "suspended",
        "description": "filter on suspended jobs",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "Running": {
        "name": "running",
        "description": "filter on running jobs",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "AllowWildcards": {
        "name": "allow_wildcards",
        "description": "allow wildcards (*) in the filter of label, tag, worker",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "ArgsFilter": {
        "name": "args",
        "description": "filter on jobs containing those args as a json subset (@> in postgres)",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "Tag": {
        "name": "tag",
        "description": "filter on jobs with a given tag/worker group",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ResultFilter": {
        "name": "result",
        "description": "filter on jobs containing those result as a json subset (@> in postgres)",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "After": {
        "name": "after",
        "description": "filter on created after (exclusive) timestamp",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "Username": {
        "name": "username",
        "description": "filter on exact username of user",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "Operation": {
        "name": "operation",
        "description": "filter on exact or prefix name of operation",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ResourceName": {
        "name": "resource",
        "description": "filter on exact or prefix name of resource",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "ActionKind": {
        "name": "action_kind",
        "description": "filter on type of operation",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "Create",
            "Update",
            "Delete",
            "Execute"
          ]
        }
      },
      "JobKinds": {
        "name": "job_kinds",
        "description": "filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by,",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "RunnableId": {
        "name": "runnable_id",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "RunnableTypeQuery": {
        "name": "runnable_type",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/RunnableType"
        }
      },
      "InputId": {
        "name": "input",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "GetStarted": {
        "name": "get_started",
        "in": "query",
        "schema": {
          "type": "boolean"
        }
      },
      "ConcurrencyId": {
        "name": "concurrency_id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "RunnableKind": {
        "name": "runnable_kind",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "script",
            "flow"
          ]
        }
      }
    },
    "schemas": {
      "OpenFlow": {
        "type": "object",
        "description": "Top-level flow definition containing metadata, configuration, and the flow structure",
        "properties": {
          "summary": {
            "type": "string",
            "description": "Short description of what this flow does"
          },
          "description": {
            "type": "string",
            "description": "Detailed documentation for this flow"
          },
          "value": {
            "$ref": "#/components/schemas/schemas-FlowValue"
          },
          "schema": {
            "type": "object",
            "description": "JSON Schema for flow inputs. Use this to define input parameters, their types, defaults, and validation. For resource inputs, set type to 'object' and format to 'resource-<type>' (e.g., 'resource-stripe')"
          },
          "on_behalf_of_email": {
            "type": "string",
            "description": "The flow will be run with the permissions of the user with this email."
          }
        },
        "required": [
          "summary",
          "value"
        ]
      },
      "FlowValue": {
        "type": "object",
        "description": "The flow structure containing modules and optional preprocessor/failure handlers",
        "properties": {
          "modules": {
            "type": "array",
            "description": "Array of steps that execute in sequence. Each step can be a script, subflow, loop, or branch",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "failure_module": {
            "description": "Special module that executes when the flow fails. Receives error object with message, name, stack, and step_id. Must have id 'failure'. Only supports script/rawscript types",
            "$ref": "#/components/schemas/schemas-FlowModule"
          },
          "preprocessor_module": {
            "description": "Special module that runs before the first step on external triggers. Must have id 'preprocessor'. Only supports script/rawscript types. Cannot reference other step results",
            "$ref": "#/components/schemas/schemas-FlowModule"
          },
          "same_worker": {
            "type": "boolean",
            "description": "If true, all steps run on the same worker for better performance"
          },
          "concurrent_limit": {
            "type": "number",
            "description": "Maximum number of concurrent executions of this flow"
          },
          "concurrency_key": {
            "type": "string",
            "description": "Expression to group concurrent executions (e.g., by user ID)"
          },
          "concurrency_time_window_s": {
            "type": "number",
            "description": "Time window in seconds for concurrent_limit"
          },
          "debounce_delay_s": {
            "type": "number",
            "description": "Delay in seconds to debounce flow executions"
          },
          "debounce_key": {
            "type": "string",
            "description": "Expression to group debounced executions"
          },
          "debounce_args_to_accumulate": {
            "type": "array",
            "description": "Arguments to accumulate across debounced executions",
            "items": {
              "type": "string"
            }
          },
          "max_total_debouncing_time": {
            "type": "number",
            "description": "Maximum total time in seconds that a job can be debounced"
          },
          "max_total_debounces_amount": {
            "type": "number",
            "description": "Maximum number of times a job can be debounced"
          },
          "skip_expr": {
            "type": "string",
            "description": "JavaScript expression to conditionally skip the entire flow"
          },
          "cache_ttl": {
            "type": "number",
            "description": "Cache duration in seconds for flow results"
          },
          "cache_ignore_s3_path": {
            "type": "boolean"
          },
          "flow_env": {
            "type": "object",
            "description": "Environment variables available to all steps",
            "additionalProperties": {
              "type": "string"
            }
          },
          "priority": {
            "type": "number",
            "description": "Execution priority (higher numbers run first)"
          },
          "early_return": {
            "type": "string",
            "description": "JavaScript expression to return early from the flow"
          },
          "chat_input_enabled": {
            "type": "boolean",
            "description": "Whether this flow accepts chat-style input"
          },
          "notes": {
            "type": "array",
            "description": "Sticky notes attached to the flow",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowNote"
            }
          }
        },
        "required": [
          "modules"
        ]
      },
      "Retry": {
        "type": "object",
        "description": "Retry configuration for failed module executions",
        "properties": {
          "constant": {
            "type": "object",
            "description": "Retry with constant delay between attempts",
            "properties": {
              "attempts": {
                "type": "integer",
                "description": "Number of retry attempts"
              },
              "seconds": {
                "type": "integer",
                "description": "Seconds to wait between retries"
              }
            }
          },
          "exponential": {
            "type": "object",
            "description": "Retry with exponential backoff (delay doubles each time)",
            "properties": {
              "attempts": {
                "type": "integer",
                "description": "Number of retry attempts"
              },
              "multiplier": {
                "type": "integer",
                "description": "Multiplier for exponential backoff"
              },
              "seconds": {
                "type": "integer",
                "minimum": 1,
                "description": "Initial delay in seconds"
              },
              "random_factor": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Random jitter percentage (0-100) to avoid thundering herd"
              }
            }
          },
          "retry_if": {
            "$ref": "#/components/schemas/RetryIf"
          }
        }
      },
      "StopAfterIf": {
        "type": "object",
        "description": "Early termination condition for a module",
        "properties": {
          "skip_if_stopped": {
            "type": "boolean",
            "description": "If true, following steps are skipped when this condition triggers"
          },
          "expr": {
            "type": "string",
            "description": "JavaScript expression evaluated after the module runs. Can use 'result' (step's result) or 'flow_input'. Return true to stop"
          },
          "error_message": {
            "type": "string",
            "description": "Custom error message shown when stopping"
          }
        },
        "required": [
          "expr"
        ]
      },
      "FlowModule": {
        "type": "object",
        "description": "A single step in a flow. Can be a script, subflow, loop, or branch",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for this step. Used to reference results via 'results.step_id'. Must be a valid identifier (alphanumeric, underscore, hyphen)"
          },
          "value": {
            "$ref": "#/components/schemas/schemas-FlowModuleValue"
          },
          "stop_after_if": {
            "description": "Early termination condition evaluated after this step completes",
            "$ref": "#/components/schemas/schemas-StopAfterIf"
          },
          "stop_after_all_iters_if": {
            "description": "For loops only - early termination condition evaluated after all iterations complete",
            "$ref": "#/components/schemas/schemas-StopAfterIf"
          },
          "skip_if": {
            "type": "object",
            "description": "Conditionally skip this step based on previous results or flow inputs",
            "properties": {
              "expr": {
                "type": "string",
                "description": "JavaScript expression that returns true to skip. Can use 'flow_input' or 'results.<step_id>'"
              }
            },
            "required": [
              "expr"
            ]
          },
          "sleep": {
            "description": "Delay before executing this step (in seconds or as expression)",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "cache_ttl": {
            "type": "number",
            "description": "Cache duration in seconds for this step's results"
          },
          "cache_ignore_s3_path": {
            "type": "boolean"
          },
          "timeout": {
            "description": "Maximum execution time in seconds (static value or expression)",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "delete_after_use": {
            "type": "boolean",
            "description": "If true, this step's result is deleted after use to save memory"
          },
          "summary": {
            "type": "string",
            "description": "Short description of what this step does"
          },
          "mock": {
            "type": "object",
            "description": "Mock configuration for testing without executing the actual step",
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "If true, return mock value instead of executing"
              },
              "return_value": {
                "description": "Value to return when mocked"
              }
            }
          },
          "suspend": {
            "type": "object",
            "description": "Configuration for approval/resume steps that wait for user input",
            "properties": {
              "required_events": {
                "type": "integer",
                "description": "Number of approvals required before continuing"
              },
              "timeout": {
                "type": "integer",
                "description": "Timeout in seconds before auto-continuing or canceling"
              },
              "resume_form": {
                "type": "object",
                "description": "Form schema for collecting input when resuming",
                "properties": {
                  "schema": {
                    "type": "object",
                    "description": "JSON Schema for the resume form"
                  }
                }
              },
              "user_auth_required": {
                "type": "boolean",
                "description": "If true, only authenticated users can approve"
              },
              "user_groups_required": {
                "description": "Expression or list of groups that can approve",
                "$ref": "#/components/schemas/schemas-InputTransform"
              },
              "self_approval_disabled": {
                "type": "boolean",
                "description": "If true, the user who started the flow cannot approve"
              },
              "hide_cancel": {
                "type": "boolean",
                "description": "If true, hide the cancel button on the approval form"
              },
              "continue_on_disapprove_timeout": {
                "type": "boolean",
                "description": "If true, continue flow on timeout instead of canceling"
              }
            }
          },
          "priority": {
            "type": "number",
            "description": "Execution priority for this step (higher numbers run first)"
          },
          "continue_on_error": {
            "type": "boolean",
            "description": "If true, flow continues even if this step fails"
          },
          "retry": {
            "description": "Retry configuration if this step fails",
            "$ref": "#/components/schemas/schemas-Retry"
          }
        },
        "required": [
          "value",
          "id"
        ]
      },
      "InputTransform": {
        "description": "Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs",
        "oneOf": [
          {
            "$ref": "#/components/schemas/schemas-StaticTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-JavascriptTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-AiTransform"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "static": "#/components/schemas/schemas-StaticTransform",
            "javascript": "#/components/schemas/schemas-JavascriptTransform",
            "ai": "#/components/schemas/schemas-AiTransform"
          }
        }
      },
      "StaticTransform": {
        "type": "object",
        "description": "Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource'",
        "properties": {
          "value": {
            "description": "The static value. For resources, use format '$res:path/to/resource'"
          },
          "type": {
            "type": "string",
            "enum": [
              "static"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "JavascriptTransform": {
        "type": "object",
        "description": "JavaScript expression evaluated at runtime. Can reference previous step results via 'results.step_id' or flow inputs via 'flow_input.property'. Inside loops, use 'flow_input.iter.value' for the current iteration value",
        "properties": {
          "expr": {
            "type": "string",
            "description": "JavaScript expression returning the value. Available variables - results (object with all previous step results), flow_input (flow inputs), flow_input.iter (in loops)"
          },
          "type": {
            "type": "string",
            "enum": [
              "javascript"
            ]
          }
        },
        "required": [
          "expr",
          "type"
        ]
      },
      "AiTransform": {
        "type": "object",
        "description": "Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter.",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "ai"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "ProviderConfig": {
        "type": "object",
        "description": "Complete AI provider configuration with resource reference and model selection",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/AIProviderKind"
          },
          "resource": {
            "type": "string",
            "description": "Resource reference in format '$res:{resource_path}' pointing to provider credentials"
          },
          "model": {
            "type": "string",
            "description": "Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229', 'gemini-pro')"
          }
        },
        "required": [
          "kind",
          "resource",
          "model"
        ]
      },
      "MemoryConfig": {
        "description": "Conversation memory configuration",
        "oneOf": [
          {
            "$ref": "#/components/schemas/MemoryOff"
          },
          {
            "$ref": "#/components/schemas/MemoryAuto"
          },
          {
            "$ref": "#/components/schemas/MemoryManual"
          }
        ],
        "discriminator": {
          "propertyName": "kind",
          "mapping": {
            "off": "#/components/schemas/MemoryOff",
            "auto": "#/components/schemas/MemoryAuto",
            "manual": "#/components/schemas/MemoryManual"
          }
        }
      },
      "FlowModuleValue": {
        "description": "The actual implementation of a flow step. Can be a script (inline or referenced), subflow, loop, branch, or special module type",
        "oneOf": [
          {
            "$ref": "#/components/schemas/schemas-RawScript"
          },
          {
            "$ref": "#/components/schemas/schemas-PathScript"
          },
          {
            "$ref": "#/components/schemas/schemas-PathFlow"
          },
          {
            "$ref": "#/components/schemas/schemas-ForloopFlow"
          },
          {
            "$ref": "#/components/schemas/schemas-WhileloopFlow"
          },
          {
            "$ref": "#/components/schemas/schemas-BranchOne"
          },
          {
            "$ref": "#/components/schemas/schemas-BranchAll"
          },
          {
            "$ref": "#/components/schemas/schemas-Identity"
          },
          {
            "$ref": "#/components/schemas/schemas-AiAgent"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "rawscript": "#/components/schemas/schemas-RawScript",
            "script": "#/components/schemas/schemas-PathScript",
            "flow": "#/components/schemas/schemas-PathFlow",
            "forloopflow": "#/components/schemas/schemas-ForloopFlow",
            "whileloopflow": "#/components/schemas/schemas-WhileloopFlow",
            "branchone": "#/components/schemas/schemas-BranchOne",
            "branchall": "#/components/schemas/schemas-BranchAll",
            "identity": "#/components/schemas/schemas-Identity",
            "aiagent": "#/components/schemas/schemas-AiAgent"
          }
        }
      },
      "RawScript": {
        "type": "object",
        "description": "Inline script with code defined directly in the flow. Use 'bun' as default language if unspecified. The script receives arguments from input_transforms",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments",
            "additionalProperties": {
              "$ref": "#/components/schemas/schemas-InputTransform"
            }
          },
          "content": {
            "type": "string",
            "description": "The script source code. Should export a 'main' function"
          },
          "language": {
            "type": "string",
            "description": "Programming language for this script",
            "enum": [
              "deno",
              "bun",
              "python3",
              "go",
              "bash",
              "powershell",
              "postgresql",
              "mysql",
              "bigquery",
              "snowflake",
              "mssql",
              "oracledb",
              "graphql",
              "nativets",
              "php",
              "rust",
              "ansible",
              "csharp",
              "nu",
              "java",
              "ruby",
              "duckdb"
            ]
          },
          "path": {
            "type": "string",
            "description": "Optional path for saving this script"
          },
          "lock": {
            "type": "string",
            "description": "Lock file content for dependencies"
          },
          "type": {
            "type": "string",
            "enum": [
              "rawscript"
            ]
          },
          "tag": {
            "type": "string",
            "description": "Worker group tag for execution routing"
          },
          "concurrent_limit": {
            "type": "number",
            "description": "Maximum concurrent executions of this script"
          },
          "concurrency_time_window_s": {
            "type": "number",
            "description": "Time window for concurrent_limit"
          },
          "custom_concurrency_key": {
            "type": "string",
            "description": "Custom key for grouping concurrent executions"
          },
          "is_trigger": {
            "type": "boolean",
            "description": "If true, this script is a trigger that can start the flow"
          },
          "assets": {
            "type": "array",
            "description": "External resources this script accesses (S3 objects, resources, etc.)",
            "items": {
              "type": "object",
              "required": [
                "path",
                "kind"
              ],
              "properties": {
                "path": {
                  "type": "string",
                  "description": "Path to the asset"
                },
                "kind": {
                  "type": "string",
                  "description": "Type of asset",
                  "enum": [
                    "s3object",
                    "resource",
                    "ducklake",
                    "datatable"
                  ]
                },
                "access_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "Access level for this asset",
                  "enum": [
                    "r",
                    "w",
                    "rw"
                  ]
                },
                "alt_access_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "Alternative access level",
                  "enum": [
                    "r",
                    "w",
                    "rw"
                  ]
                }
              }
            }
          }
        },
        "required": [
          "type",
          "content",
          "language",
          "input_transforms"
        ]
      },
      "PathScript": {
        "type": "object",
        "description": "Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments",
            "additionalProperties": {
              "$ref": "#/components/schemas/schemas-InputTransform"
            }
          },
          "path": {
            "type": "string",
            "description": "Path to the script in the workspace (e.g., 'f/scripts/send_email')"
          },
          "hash": {
            "type": "string",
            "description": "Optional specific version hash of the script to use"
          },
          "type": {
            "type": "string",
            "enum": [
              "script"
            ]
          },
          "tag_override": {
            "type": "string",
            "description": "Override the script's default worker group tag"
          },
          "is_trigger": {
            "type": "boolean",
            "description": "If true, this script is a trigger that can start the flow"
          }
        },
        "required": [
          "type",
          "path",
          "input_transforms"
        ]
      },
      "PathFlow": {
        "type": "object",
        "description": "Reference to an existing flow by path. Use this to call another flow as a subflow",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Map of parameter names to their values (static or JavaScript expressions). These become the subflow's input arguments",
            "additionalProperties": {
              "$ref": "#/components/schemas/schemas-InputTransform"
            }
          },
          "path": {
            "type": "string",
            "description": "Path to the flow in the workspace (e.g., 'f/flows/process_user')"
          },
          "type": {
            "type": "string",
            "enum": [
              "flow"
            ]
          }
        },
        "required": [
          "type",
          "path",
          "input_transforms"
        ]
      },
      "ForloopFlow": {
        "type": "object",
        "description": "Executes nested modules in a loop over an iterator. Inside the loop, use 'flow_input.iter.value' to access the current iteration value, and 'flow_input.iter.index' for the index. Supports parallel execution for better performance on I/O-bound operations",
        "properties": {
          "modules": {
            "type": "array",
            "description": "Steps to execute for each iteration. These can reference the iteration value via 'flow_input.iter.value'",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "iterator": {
            "description": "JavaScript expression that returns an array to iterate over. Can reference 'results.step_id' or 'flow_input'",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "skip_failures": {
            "type": "boolean",
            "description": "If true, iteration failures don't stop the loop. Failed iterations return null"
          },
          "type": {
            "type": "string",
            "enum": [
              "forloopflow"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency"
          },
          "parallelism": {
            "description": "Maximum number of concurrent iterations when parallel=true. Limits resource usage. Can be static number or expression",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "squash": {
            "type": "boolean"
          }
        },
        "required": [
          "modules",
          "iterator",
          "skip_failures",
          "type"
        ]
      },
      "WhileloopFlow": {
        "type": "object",
        "description": "Executes nested modules repeatedly while a condition is true. The loop checks the condition after each iteration. Use stop_after_if on modules to control loop termination",
        "properties": {
          "modules": {
            "type": "array",
            "description": "Steps to execute in each iteration. Use stop_after_if to control when the loop ends",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "skip_failures": {
            "type": "boolean",
            "description": "If true, iteration failures don't stop the loop. Failed iterations return null"
          },
          "type": {
            "type": "string",
            "enum": [
              "whileloopflow"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, iterations run concurrently (use with caution in while loops)"
          },
          "parallelism": {
            "description": "Maximum number of concurrent iterations when parallel=true",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "squash": {
            "type": "boolean"
          }
        },
        "required": [
          "modules",
          "skip_failures",
          "type"
        ]
      },
      "BranchOne": {
        "type": "object",
        "description": "Conditional branching where only the first matching branch executes. Branches are evaluated in order, and the first one with a true expression runs. If no branches match, the default branch executes",
        "properties": {
          "branches": {
            "type": "array",
            "description": "Array of branches to evaluate in order. The first branch with expr evaluating to true executes",
            "items": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "description": "Short description of this branch condition"
                },
                "expr": {
                  "type": "string",
                  "description": "JavaScript expression that returns boolean. Can use 'results.step_id' or 'flow_input'. First true expr wins"
                },
                "modules": {
                  "type": "array",
                  "description": "Steps to execute if this branch's expr is true",
                  "items": {
                    "$ref": "#/components/schemas/schemas-FlowModule"
                  }
                }
              },
              "required": [
                "modules",
                "expr"
              ]
            }
          },
          "default": {
            "type": "array",
            "description": "Steps to execute if no branch expressions match",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "branchone"
            ]
          }
        },
        "required": [
          "branches",
          "default",
          "type"
        ]
      },
      "BranchAll": {
        "type": "object",
        "description": "Parallel branching where all branches execute simultaneously. Unlike BranchOne, all branches run regardless of conditions. Useful for executing independent tasks concurrently",
        "properties": {
          "branches": {
            "type": "array",
            "description": "Array of branches that all execute (either in parallel or sequentially)",
            "items": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "description": "Short description of this branch's purpose"
                },
                "skip_failure": {
                  "type": "boolean",
                  "description": "If true, failure in this branch doesn't fail the entire flow"
                },
                "modules": {
                  "type": "array",
                  "description": "Steps to execute in this branch",
                  "items": {
                    "$ref": "#/components/schemas/schemas-FlowModule"
                  }
                }
              },
              "required": [
                "modules"
              ]
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "branchall"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, all branches execute concurrently. If false, they execute sequentially"
          }
        },
        "required": [
          "branches",
          "type"
        ]
      },
      "AiAgent": {
        "type": "object",
        "description": "AI agent step that can use tools to accomplish tasks. The agent receives inputs and can call any of its configured tools to complete the task",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Input parameters for the AI agent mapped to their values",
            "properties": {
              "provider": {
                "$ref": "#/components/schemas/ProviderTransform"
              },
              "output_type": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Output format type.\nValid values: 'text' (default) - plain text response, 'image' - image generation\n"
              },
              "user_message": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "The user's prompt/message to the AI agent. Supports variable interpolation with flow.input syntax."
              },
              "system_prompt": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "System instructions that guide the AI's behavior, persona, and response style. Optional."
              },
              "streaming": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Boolean. If true, stream the AI response incrementally.\nStreaming events include: token_delta, tool_call, tool_call_arguments, tool_execution, tool_result\n"
              },
              "memory": {
                "$ref": "#/components/schemas/MemoryTransform"
              },
              "output_schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "JSON Schema object defining structured output format. Used when you need the AI to return data in a specific shape.\nSupports standard JSON Schema properties: type, properties, required, items, enum, pattern, minLength, maxLength, minimum, maximum, etc.\nExample: { type: 'object', properties: { name: { type: 'string' }, age: { type: 'integer' } }, required: ['name'] }\n"
              },
              "user_images": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Array of image references for vision-capable models.\nFormat: Array<{ bucket: string, key: string }> - S3 object references\nExample: [{ bucket: 'my-bucket', key: 'images/photo.jpg' }]\n"
              },
              "max_completion_tokens": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Integer. Maximum number of tokens the AI will generate in its response.\nRange: 1 to 4,294,967,295. Typical values: 256-4096 for most use cases.\n"
              },
              "temperature": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Float. Controls randomness/creativity of responses.\nRange: 0.0 to 2.0 (provider-dependent)\n- 0.0 = deterministic, focused responses\n- 0.7 = balanced (common default)\n- 1.0+ = more creative/random\n"
              }
            },
            "required": [
              "provider",
              "user_message",
              "output_type"
            ]
          },
          "tools": {
            "type": "array",
            "description": "Array of tools the agent can use. The agent decides which tools to call based on the task",
            "items": {
              "$ref": "#/components/schemas/AgentTool"
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "aiagent"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, the agent can execute multiple tool calls in parallel"
          }
        },
        "required": [
          "tools",
          "type",
          "input_transforms"
        ]
      },
      "Identity": {
        "type": "object",
        "description": "Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "identity"
            ]
          },
          "flow": {
            "type": "boolean",
            "description": "If true, marks this as a flow identity (special handling)"
          }
        },
        "required": [
          "type"
        ]
      },
      "FlowStatus": {
        "type": "object",
        "properties": {
          "step": {
            "type": "integer"
          },
          "modules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowStatusModule"
            }
          },
          "user_states": {
            "additionalProperties": true
          },
          "preprocessor_module": {
            "allOf": [
              {
                "$ref": "#/components/schemas/schemas-FlowStatusModule"
              }
            ]
          },
          "failure_module": {
            "allOf": [
              {
                "$ref": "#/components/schemas/schemas-FlowStatusModule"
              },
              {
                "type": "object",
                "properties": {
                  "parent_module": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          "retry": {
            "type": "object",
            "properties": {
              "fail_count": {
                "type": "integer"
              },
              "failed_jobs": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        },
        "required": [
          "step",
          "modules",
          "failure_module"
        ]
      },
      "FlowStatusModule": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "WaitingForPriorSteps",
              "WaitingForEvents",
              "WaitingForExecutor",
              "InProgress",
              "Success",
              "Failure"
            ]
          },
          "id": {
            "type": "string"
          },
          "job": {
            "type": "string",
            "format": "uuid"
          },
          "count": {
            "type": "integer"
          },
          "progress": {
            "type": "integer"
          },
          "iterator": {
            "type": "object",
            "properties": {
              "index": {
                "type": "integer"
              },
              "itered": {
                "type": "array",
                "items": {}
              },
              "itered_len": {
                "type": "integer"
              },
              "args": {}
            }
          },
          "flow_jobs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "flow_jobs_success": {
            "type": "array",
            "items": {
              "type": "boolean"
            }
          },
          "flow_jobs_duration": {
            "type": "object",
            "properties": {
              "started_at": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "duration_ms": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              }
            }
          },
          "branch_chosen": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "branch",
                  "default"
                ]
              },
              "branch": {
                "type": "integer"
              }
            },
            "required": [
              "type"
            ]
          },
          "branchall": {
            "type": "object",
            "properties": {
              "branch": {
                "type": "integer"
              },
              "len": {
                "type": "integer"
              }
            },
            "required": [
              "branch",
              "len"
            ]
          },
          "approvers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "resume_id": {
                  "type": "integer"
                },
                "approver": {
                  "type": "string"
                }
              },
              "required": [
                "resume_id",
                "approver"
              ]
            }
          },
          "failed_retries": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "skipped": {
            "type": "boolean"
          },
          "agent_actions": {
            "type": "array",
            "items": {
              "type": "object",
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "job_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "function_name": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "tool_call"
                      ]
                    },
                    "module_id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "job_id",
                    "function_name",
                    "type",
                    "module_id"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "call_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "function_name": {
                      "type": "string"
                    },
                    "resource_path": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "mcp_tool_call"
                      ]
                    },
                    "arguments": {
                      "type": "object"
                    }
                  },
                  "required": [
                    "call_id",
                    "function_name",
                    "resource_path",
                    "type"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "web_search"
                      ]
                    }
                  },
                  "required": [
                    "type"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "message"
                      ]
                    }
                  },
                  "required": [
                    "content",
                    "type"
                  ]
                }
              ]
            }
          },
          "agent_actions_success": {
            "type": "array",
            "items": {
              "type": "boolean"
            }
          }
        },
        "required": [
          "type"
        ]
      },
      "FlowNote": {
        "type": "object",
        "description": "A sticky note attached to a flow for documentation and annotation",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the note"
          },
          "text": {
            "type": "string",
            "description": "Content of the note"
          },
          "position": {
            "type": "object",
            "description": "Position of the note in the flow editor",
            "properties": {
              "x": {
                "type": "number",
                "description": "X coordinate"
              },
              "y": {
                "type": "number",
                "description": "Y coordinate"
              }
            },
            "required": [
              "x",
              "y"
            ]
          },
          "size": {
            "type": "object",
            "description": "Size of the note in the flow editor",
            "properties": {
              "width": {
                "type": "number",
                "description": "Width in pixels"
              },
              "height": {
                "type": "number",
                "description": "Height in pixels"
              }
            },
            "required": [
              "width",
              "height"
            ]
          },
          "color": {
            "type": "string",
            "description": "Color of the note (e.g., \"yellow\", \"#ffff00\")"
          },
          "type": {
            "type": "string",
            "enum": [
              "free",
              "group"
            ],
            "description": "Type of note - 'free' for standalone notes, 'group' for notes that group other nodes"
          },
          "locked": {
            "type": "boolean",
            "default": false,
            "description": "Whether the note is locked and cannot be edited or moved"
          },
          "contained_node_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "For group notes, the IDs of nodes contained within this group"
          }
        },
        "required": [
          "id",
          "text",
          "color",
          "type"
        ]
      },
      "HealthStatusResponse": {
        "type": "object",
        "description": "Health status response (cached with 5s TTL)",
        "required": [
          "status",
          "checked_at",
          "database_healthy",
          "workers_alive"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "healthy",
              "degraded",
              "unhealthy"
            ],
            "description": "Overall health status"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the health check was actually performed (not cache return time)"
          },
          "database_healthy": {
            "type": "boolean",
            "description": "Whether the database is reachable"
          },
          "workers_alive": {
            "type": "integer",
            "format": "int64",
            "description": "Number of workers that pinged within last 5 minutes"
          }
        }
      },
      "DetailedHealthResponse": {
        "type": "object",
        "description": "Detailed health status response (always fresh, no caching)",
        "required": [
          "status",
          "checked_at",
          "version",
          "checks"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "healthy",
              "degraded",
              "unhealthy"
            ],
            "description": "Overall health status"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the health check was performed"
          },
          "version": {
            "type": "string",
            "description": "Server version (e.g., \"EE 1.615.3\")"
          },
          "checks": {
            "$ref": "#/components/schemas/HealthChecks"
          }
        }
      },
      "HealthChecks": {
        "type": "object",
        "description": "Detailed health checks",
        "required": [
          "database",
          "readiness"
        ],
        "properties": {
          "database": {
            "$ref": "#/components/schemas/DatabaseHealth"
          },
          "workers": {
            "$ref": "#/components/schemas/WorkersHealth",
            "description": "Worker status (null if database is unreachable)",
            "nullable": true
          },
          "queue": {
            "$ref": "#/components/schemas/QueueHealth",
            "description": "Queue status (null if database is unreachable)",
            "nullable": true
          },
          "readiness": {
            "$ref": "#/components/schemas/ReadinessHealth"
          }
        }
      },
      "DatabaseHealth": {
        "type": "object",
        "description": "Database health status",
        "required": [
          "healthy",
          "latency_ms",
          "pool"
        ],
        "properties": {
          "healthy": {
            "type": "boolean",
            "description": "Whether the database is reachable"
          },
          "latency_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Database query latency in milliseconds"
          },
          "pool": {
            "$ref": "#/components/schemas/PoolStats"
          }
        }
      },
      "PoolStats": {
        "type": "object",
        "description": "Database connection pool statistics",
        "required": [
          "size",
          "idle",
          "max_connections"
        ],
        "properties": {
          "size": {
            "type": "integer",
            "description": "Current number of connections in the pool"
          },
          "idle": {
            "type": "integer",
            "description": "Number of idle connections"
          },
          "max_connections": {
            "type": "integer",
            "description": "Maximum number of connections allowed"
          }
        }
      },
      "WorkersHealth": {
        "type": "object",
        "description": "Workers health status",
        "required": [
          "healthy",
          "active_count",
          "worker_groups",
          "min_version",
          "versions"
        ],
        "properties": {
          "healthy": {
            "type": "boolean",
            "description": "Whether any workers are active"
          },
          "active_count": {
            "type": "integer",
            "format": "int64",
            "description": "Number of active workers (pinged in last 5 minutes)"
          },
          "worker_groups": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of active worker groups"
          },
          "min_version": {
            "type": "string",
            "description": "Minimum required worker version"
          },
          "versions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of active worker versions"
          }
        }
      },
      "QueueHealth": {
        "type": "object",
        "description": "Job queue status",
        "required": [
          "pending_jobs",
          "running_jobs"
        ],
        "properties": {
          "pending_jobs": {
            "type": "integer",
            "format": "int64",
            "description": "Number of pending jobs in the queue"
          },
          "running_jobs": {
            "type": "integer",
            "format": "int64",
            "description": "Number of currently running jobs"
          }
        }
      },
      "ReadinessHealth": {
        "type": "object",
        "description": "Server readiness status",
        "required": [
          "healthy"
        ],
        "properties": {
          "healthy": {
            "type": "boolean",
            "description": "Whether the server is ready to accept requests"
          }
        }
      },
      "AutoInviteConfig": {
        "type": "object",
        "description": "Configuration for auto-inviting users to the workspace",
        "properties": {
          "enabled": {
            "type": "boolean",
            "default": false
          },
          "domain": {
            "type": "string"
          },
          "operator": {
            "type": "boolean",
            "default": false,
            "description": "If true, auto-invited users are added as operators. If false, they are added as developers."
          },
          "mode": {
            "type": "string",
            "enum": [
              "invite",
              "add"
            ],
            "default": "invite"
          },
          "instance_groups": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "instance_groups_roles": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "ErrorHandlerConfig": {
        "type": "object",
        "description": "Configuration for the workspace error handler",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the error handler script or flow"
          },
          "extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "muted_on_cancel": {
            "type": "boolean",
            "default": false
          },
          "muted_on_user_path": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "SuccessHandlerConfig": {
        "type": "object",
        "description": "Configuration for the workspace success handler",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the success handler script or flow"
          },
          "extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          }
        }
      },
      "EditErrorHandler": {
        "description": "Request body for editing the workspace error handler. Accepts both new grouped format and legacy flat format for backward compatibility.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/EditErrorHandlerNew"
          },
          {
            "$ref": "#/components/schemas/EditErrorHandlerLegacy"
          }
        ]
      },
      "EditErrorHandlerNew": {
        "type": "object",
        "description": "New grouped format for editing error handler",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the error handler script or flow"
          },
          "extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "muted_on_cancel": {
            "type": "boolean",
            "default": false
          },
          "muted_on_user_path": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "EditErrorHandlerLegacy": {
        "type": "object",
        "description": "Legacy flat format for editing error handler (deprecated, use new format)",
        "properties": {
          "error_handler": {
            "type": "string",
            "description": "Path to the error handler script or flow"
          },
          "error_handler_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "error_handler_muted_on_cancel": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "EditSuccessHandler": {
        "description": "Request body for editing the workspace success handler. Accepts both new grouped format and legacy flat format for backward compatibility.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/EditSuccessHandlerNew"
          },
          {
            "$ref": "#/components/schemas/EditSuccessHandlerLegacy"
          }
        ]
      },
      "EditSuccessHandlerNew": {
        "type": "object",
        "description": "New grouped format for editing success handler",
        "properties": {
          "path": {
            "type": "string",
            "description": "Path to the success handler script or flow"
          },
          "extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          }
        }
      },
      "EditSuccessHandlerLegacy": {
        "type": "object",
        "description": "Legacy flat format for editing success handler (deprecated, use new format)",
        "properties": {
          "success_handler": {
            "type": "string",
            "description": "Path to the success handler script or flow"
          },
          "success_handler_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          }
        }
      },
      "VaultSettings": {
        "type": "object",
        "required": [
          "address",
          "mount_path"
        ],
        "properties": {
          "address": {
            "type": "string",
            "description": "HashiCorp Vault server address (e.g., https://vault.company.com:8200)"
          },
          "mount_path": {
            "type": "string",
            "description": "KV v2 secrets engine mount path (e.g., windmill)"
          },
          "jwt_role": {
            "type": "string",
            "description": "Vault JWT auth role name for Windmill (optional, if not provided token auth is used)"
          },
          "namespace": {
            "type": "string",
            "description": "Vault Enterprise namespace (optional)"
          },
          "token": {
            "type": "string",
            "description": "Static Vault token for testing/development (optional, if provided this is used instead of JWT authentication)"
          }
        }
      },
      "SecretMigrationFailure": {
        "type": "object",
        "required": [
          "workspace_id",
          "path",
          "error"
        ],
        "properties": {
          "workspace_id": {
            "type": "string",
            "description": "Workspace ID where the secret is located"
          },
          "path": {
            "type": "string",
            "description": "Path of the secret that failed to migrate"
          },
          "error": {
            "type": "string",
            "description": "Error message"
          }
        }
      },
      "SecretMigrationReport": {
        "type": "object",
        "required": [
          "total_secrets",
          "migrated_count",
          "failed_count",
          "failures"
        ],
        "properties": {
          "total_secrets": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of secrets found"
          },
          "migrated_count": {
            "type": "integer",
            "format": "int64",
            "description": "Number of secrets successfully migrated"
          },
          "failed_count": {
            "type": "integer",
            "format": "int64",
            "description": "Number of secrets that failed to migrate"
          },
          "failures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecretMigrationFailure"
            },
            "description": "Details of any failures encountered during migration"
          }
        }
      },
      "JwksResponse": {
        "type": "object",
        "required": [
          "keys"
        ],
        "properties": {
          "keys": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Array of JSON Web Keys for JWT verification"
          }
        }
      },
      "FlowConversation": {
        "type": "object",
        "required": [
          "id",
          "workspace_id",
          "flow_path",
          "created_at",
          "updated_at",
          "created_by"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the conversation"
          },
          "workspace_id": {
            "type": "string",
            "description": "The workspace ID where the conversation belongs"
          },
          "flow_path": {
            "type": "string",
            "description": "Path of the flow this conversation is for"
          },
          "title": {
            "type": "string",
            "description": "Optional title for the conversation",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the conversation was created"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the conversation was last updated"
          },
          "created_by": {
            "type": "string",
            "description": "Username who created the conversation"
          }
        }
      },
      "FlowConversationMessage": {
        "type": "object",
        "required": [
          "id",
          "conversation_id",
          "message_type",
          "content",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the message"
          },
          "conversation_id": {
            "type": "string",
            "format": "uuid",
            "description": "The conversation this message belongs to"
          },
          "message_type": {
            "type": "string",
            "enum": [
              "user",
              "assistant",
              "system",
              "tool"
            ],
            "description": "Type of the message"
          },
          "content": {
            "type": "string",
            "description": "The message content"
          },
          "job_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Associated job ID if this message came from a flow run"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the message was created"
          },
          "step_name": {
            "type": "string",
            "description": "The step name that produced that message"
          },
          "success": {
            "type": "boolean",
            "description": "Whether the message is a success"
          }
        }
      },
      "EndpointTool": {
        "type": "object",
        "required": [
          "name",
          "description",
          "instructions",
          "path",
          "method"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The tool name/operation ID"
          },
          "description": {
            "type": "string",
            "description": "Short description of the tool"
          },
          "instructions": {
            "type": "string",
            "description": "Detailed instructions for using the tool"
          },
          "path": {
            "type": "string",
            "description": "API endpoint path"
          },
          "method": {
            "type": "string",
            "description": "HTTP method (GET, POST, etc.)"
          },
          "path_params_schema": {
            "type": "object",
            "description": "JSON schema for path parameters",
            "nullable": true
          },
          "query_params_schema": {
            "type": "object",
            "description": "JSON schema for query parameters",
            "nullable": true
          },
          "body_schema": {
            "type": "object",
            "description": "JSON schema for request body",
            "nullable": true
          }
        }
      },
      "AIProvider": {
        "type": "string",
        "enum": [
          "openai",
          "azure_openai",
          "anthropic",
          "mistral",
          "deepseek",
          "googleai",
          "groq",
          "openrouter",
          "togetherai",
          "aws_bedrock",
          "customai"
        ]
      },
      "GitSyncObjectType": {
        "type": "string",
        "enum": [
          "script",
          "flow",
          "app",
          "folder",
          "resource",
          "variable",
          "secret",
          "resourcetype",
          "schedule",
          "user",
          "group",
          "trigger",
          "settings",
          "key"
        ]
      },
      "AIProviderModel": {
        "type": "object",
        "properties": {
          "model": {
            "type": "string"
          },
          "provider": {
            "$ref": "#/components/schemas/AIProvider"
          }
        },
        "required": [
          "model",
          "provider"
        ]
      },
      "AIProviderConfig": {
        "type": "object",
        "properties": {
          "resource_path": {
            "type": "string"
          },
          "models": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "resource_path",
          "models"
        ]
      },
      "AIConfig": {
        "type": "object",
        "properties": {
          "providers": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/AIProviderConfig"
            }
          },
          "default_model": {
            "$ref": "#/components/schemas/AIProviderModel"
          },
          "code_completion_model": {
            "$ref": "#/components/schemas/AIProviderModel"
          },
          "custom_prompts": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "max_tokens_per_model": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2000000
            }
          }
        }
      },
      "Alert": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "tags_to_monitor": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "jobs_num_threshold": {
            "type": "integer"
          },
          "alert_cooldown_seconds": {
            "type": "integer"
          },
          "alert_time_threshold_seconds": {
            "type": "integer"
          }
        },
        "required": [
          "name",
          "tags_to_monitor",
          "jobs_num_threshold",
          "alert_cooldown_seconds",
          "alert_time_threshold_seconds"
        ]
      },
      "Configs": {
        "type": "object",
        "nullable": true,
        "properties": {
          "alerts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Alert"
            }
          }
        }
      },
      "WorkspaceDependencies": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "archived": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "workspace_id": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "workspace_id",
          "language",
          "created_at",
          "content",
          "id",
          "archived"
        ]
      },
      "NewWorkspaceDependencies": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "content": {
            "type": "string"
          }
        },
        "required": [
          "workspace_id",
          "language",
          "content"
        ]
      },
      "Script": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "hash": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "parent_hashes": {
            "type": "array",
            "description": "The first element is the direct parent of the script, the second is the parent of the first, etc\n",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived": {
            "type": "boolean"
          },
          "schema": {
            "type": "object"
          },
          "deleted": {
            "type": "boolean"
          },
          "is_template": {
            "type": "boolean"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "lock": {
            "type": "string"
          },
          "lock_error_logs": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "kind": {
            "type": "string",
            "enum": [
              "script",
              "failure",
              "trigger",
              "command",
              "approval",
              "preprocessor"
            ]
          },
          "starred": {
            "type": "boolean"
          },
          "tag": {
            "type": "string"
          },
          "has_draft": {
            "type": "boolean"
          },
          "draft_only": {
            "type": "boolean"
          },
          "envs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "concurrent_limit": {
            "type": "integer"
          },
          "concurrency_time_window_s": {
            "type": "integer"
          },
          "concurrency_key": {
            "type": "string"
          },
          "debounce_key": {
            "type": "string"
          },
          "debounce_delay_s": {
            "type": "integer"
          },
          "debounce_args_to_accumulate": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "max_total_debouncing_time": {
            "type": "integer"
          },
          "max_total_debounces_amount": {
            "type": "integer"
          },
          "cache_ttl": {
            "type": "number"
          },
          "dedicated_worker": {
            "type": "boolean"
          },
          "ws_error_handler_muted": {
            "type": "boolean"
          },
          "priority": {
            "type": "integer"
          },
          "restart_unless_cancelled": {
            "type": "boolean"
          },
          "timeout": {
            "type": "integer"
          },
          "delete_after_use": {
            "type": "boolean"
          },
          "visible_to_runner_only": {
            "type": "boolean"
          },
          "no_main_func": {
            "type": "boolean"
          },
          "codebase": {
            "type": "string"
          },
          "has_preprocessor": {
            "type": "boolean"
          },
          "on_behalf_of_email": {
            "type": "string"
          }
        },
        "required": [
          "hash",
          "path",
          "summary",
          "description",
          "content",
          "created_by",
          "created_at",
          "archived",
          "deleted",
          "is_template",
          "extra_perms",
          "language",
          "kind",
          "starred",
          "no_main_func",
          "has_preprocessor"
        ]
      },
      "NewScript": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "parent_hash": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "schema": {
            "type": "object"
          },
          "is_template": {
            "type": "boolean"
          },
          "lock": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "kind": {
            "type": "string",
            "enum": [
              "script",
              "failure",
              "trigger",
              "command",
              "approval",
              "preprocessor"
            ]
          },
          "tag": {
            "type": "string"
          },
          "draft_only": {
            "type": "boolean"
          },
          "envs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "concurrent_limit": {
            "type": "integer"
          },
          "concurrency_time_window_s": {
            "type": "integer"
          },
          "cache_ttl": {
            "type": "number"
          },
          "cache_ignore_s3_path": {
            "type": "boolean"
          },
          "dedicated_worker": {
            "type": "boolean"
          },
          "ws_error_handler_muted": {
            "type": "boolean"
          },
          "priority": {
            "type": "integer"
          },
          "restart_unless_cancelled": {
            "type": "boolean"
          },
          "timeout": {
            "type": "integer"
          },
          "delete_after_use": {
            "type": "boolean"
          },
          "deployment_message": {
            "type": "string"
          },
          "concurrency_key": {
            "type": "string"
          },
          "debounce_key": {
            "type": "string"
          },
          "debounce_delay_s": {
            "type": "integer"
          },
          "debounce_args_to_accumulate": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "max_total_debouncing_time": {
            "type": "integer"
          },
          "max_total_debounces_amount": {
            "type": "integer"
          },
          "visible_to_runner_only": {
            "type": "boolean"
          },
          "no_main_func": {
            "type": "boolean"
          },
          "codebase": {
            "type": "string"
          },
          "has_preprocessor": {
            "type": "boolean"
          },
          "on_behalf_of_email": {
            "type": "string"
          },
          "assets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "path",
                "kind"
              ],
              "properties": {
                "path": {
                  "type": "string"
                },
                "kind": {
                  "$ref": "#/components/schemas/AssetKind"
                },
                "access_type": {
                  "type": "string",
                  "enum": [
                    "r",
                    "w",
                    "rw"
                  ]
                },
                "alt_access_type": {
                  "type": "string",
                  "enum": [
                    "r",
                    "w",
                    "rw"
                  ]
                }
              }
            }
          }
        },
        "required": [
          "path",
          "summary",
          "description",
          "content",
          "language"
        ]
      },
      "NewScriptWithDraft": {
        "allOf": [
          {
            "$ref": "#/components/schemas/NewScript"
          },
          {
            "type": "object",
            "properties": {
              "draft": {
                "$ref": "#/components/schemas/NewScript"
              },
              "hash": {
                "type": "string"
              }
            },
            "required": [
              "hash"
            ]
          }
        ]
      },
      "ScriptHistory": {
        "type": "object",
        "properties": {
          "script_hash": {
            "type": "string"
          },
          "deployment_msg": {
            "type": "string"
          }
        },
        "required": [
          "script_hash"
        ]
      },
      "ScriptArgs": {
        "type": "object",
        "description": "The arguments to pass to the script or flow",
        "additionalProperties": true
      },
      "Input": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "is_public": {
            "type": "boolean"
          },
          "success": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "args",
          "created_by",
          "created_at",
          "is_public"
        ]
      },
      "CreateInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "args": {
            "type": "object"
          }
        },
        "required": [
          "name",
          "args",
          "created_by"
        ]
      },
      "UpdateInput": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "is_public": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "is_public"
        ]
      },
      "RunnableType": {
        "type": "string",
        "enum": [
          "ScriptHash",
          "ScriptPath",
          "FlowPath"
        ]
      },
      "QueuedJob": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "parent_job": {
            "type": "string",
            "format": "uuid"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "scheduled_for": {
            "type": "string",
            "format": "date-time"
          },
          "running": {
            "type": "boolean"
          },
          "script_path": {
            "type": "string"
          },
          "script_hash": {
            "type": "string"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "logs": {
            "type": "string"
          },
          "raw_code": {
            "type": "string"
          },
          "canceled": {
            "type": "boolean"
          },
          "canceled_by": {
            "type": "string"
          },
          "canceled_reason": {
            "type": "string"
          },
          "last_ping": {
            "type": "string",
            "format": "date-time"
          },
          "job_kind": {
            "type": "string",
            "enum": [
              "script",
              "preview",
              "dependencies",
              "flowdependencies",
              "appdependencies",
              "flow",
              "flowpreview",
              "script_hub",
              "identity",
              "deploymentcallback",
              "singlestepflow",
              "flowscript",
              "flownode",
              "appscript",
              "aiagent",
              "unassigned_script",
              "unassigned_flow",
              "unassigned_singlestepflow"
            ]
          },
          "schedule_path": {
            "type": "string"
          },
          "permissioned_as": {
            "type": "string",
            "description": "The user (u/userfoo) or group (g/groupfoo) whom\nthe execution of this script will be permissioned_as and by extension its DT_TOKEN.\n"
          },
          "flow_status": {
            "$ref": "#/components/schemas/FlowStatus"
          },
          "workflow_as_code_status": {
            "$ref": "#/components/schemas/WorkflowStatus"
          },
          "raw_flow": {
            "$ref": "#/components/schemas/FlowValue"
          },
          "is_flow_step": {
            "type": "boolean"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "email": {
            "type": "string"
          },
          "visible_to_owner": {
            "type": "boolean"
          },
          "mem_peak": {
            "type": "integer"
          },
          "tag": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "self_wait_time_ms": {
            "type": "number"
          },
          "aggregate_wait_time_ms": {
            "type": "number"
          },
          "suspend": {
            "type": "number"
          },
          "preprocessed": {
            "type": "boolean"
          },
          "worker": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "running",
          "canceled",
          "job_kind",
          "permissioned_as",
          "is_flow_step",
          "email",
          "visible_to_owner",
          "tag"
        ]
      },
      "CompletedJob": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "parent_job": {
            "type": "string",
            "format": "uuid"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_ms": {
            "type": "integer"
          },
          "success": {
            "type": "boolean"
          },
          "script_path": {
            "type": "string"
          },
          "script_hash": {
            "type": "string"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "result": {},
          "logs": {
            "type": "string"
          },
          "deleted": {
            "type": "boolean"
          },
          "raw_code": {
            "type": "string"
          },
          "canceled": {
            "type": "boolean"
          },
          "canceled_by": {
            "type": "string"
          },
          "canceled_reason": {
            "type": "string"
          },
          "job_kind": {
            "type": "string",
            "enum": [
              "script",
              "preview",
              "dependencies",
              "flow",
              "flowdependencies",
              "appdependencies",
              "flowpreview",
              "script_hub",
              "identity",
              "deploymentcallback",
              "singlestepflow",
              "flowscript",
              "flownode",
              "appscript",
              "aiagent",
              "unassigned_script",
              "unassigned_flow",
              "unassigned_singlestepflow"
            ]
          },
          "schedule_path": {
            "type": "string"
          },
          "permissioned_as": {
            "type": "string",
            "description": "The user (u/userfoo) or group (g/groupfoo) whom\nthe execution of this script will be permissioned_as and by extension its DT_TOKEN.\n"
          },
          "flow_status": {
            "$ref": "#/components/schemas/FlowStatus"
          },
          "workflow_as_code_status": {
            "$ref": "#/components/schemas/WorkflowStatus"
          },
          "raw_flow": {
            "$ref": "#/components/schemas/FlowValue"
          },
          "is_flow_step": {
            "type": "boolean"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "is_skipped": {
            "type": "boolean"
          },
          "email": {
            "type": "string"
          },
          "visible_to_owner": {
            "type": "boolean"
          },
          "mem_peak": {
            "type": "integer"
          },
          "tag": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "self_wait_time_ms": {
            "type": "number"
          },
          "aggregate_wait_time_ms": {
            "type": "number"
          },
          "preprocessed": {
            "type": "boolean"
          },
          "worker": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "created_by",
          "duration_ms",
          "created_at",
          "started_at",
          "success",
          "canceled",
          "job_kind",
          "permissioned_as",
          "is_flow_step",
          "is_skipped",
          "email",
          "visible_to_owner",
          "tag"
        ]
      },
      "ExportableCompletedJob": {
        "type": "object",
        "description": "Completed job with full data for export/import operations",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "parent_job": {
            "type": "string",
            "format": "uuid"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_ms": {
            "type": "integer"
          },
          "script_path": {
            "type": "string"
          },
          "script_hash": {
            "type": "string"
          },
          "args": {
            "type": "object",
            "description": "Full job arguments without size restrictions"
          },
          "result": {
            "type": "object",
            "description": "Full job result without size restrictions"
          },
          "logs": {
            "type": "string",
            "description": "Complete job logs from v2_job table"
          },
          "raw_code": {
            "type": "string"
          },
          "raw_lock": {
            "type": "string"
          },
          "canceled_by": {
            "type": "string"
          },
          "canceled_reason": {
            "type": "string"
          },
          "job_kind": {
            "type": "string",
            "enum": [
              "script",
              "preview",
              "dependencies",
              "flow",
              "flowdependencies",
              "appdependencies",
              "flowpreview",
              "script_hub",
              "identity",
              "deploymentcallback",
              "singlestepflow",
              "flowscript",
              "flownode",
              "appscript",
              "aiagent",
              "unassigned_script",
              "unassigned_flow",
              "unassigned_singlestepflow"
            ]
          },
          "trigger": {
            "type": "string",
            "description": "Trigger path for the job (replaces schedule_path)"
          },
          "trigger_kind": {
            "type": "string",
            "enum": [
              "webhook",
              "http",
              "websocket",
              "kafka",
              "email",
              "nats",
              "schedule",
              "app",
              "ui",
              "postgres",
              "sqs",
              "gcp"
            ]
          },
          "permissioned_as": {
            "type": "string"
          },
          "permissioned_as_email": {
            "type": "string"
          },
          "flow_status": {
            "type": "object",
            "description": "Flow status from v2_job_status table"
          },
          "workflow_as_code_status": {
            "type": "object"
          },
          "raw_flow": {
            "type": "object"
          },
          "is_flow_step": {
            "type": "boolean"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "is_skipped": {
            "type": "boolean"
          },
          "email": {
            "type": "string"
          },
          "visible_to_owner": {
            "type": "boolean"
          },
          "mem_peak": {
            "type": "integer"
          },
          "tag": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "same_worker": {
            "type": "boolean"
          },
          "flow_step_id": {
            "type": "string"
          },
          "flow_innermost_root_job": {
            "type": "string",
            "format": "uuid"
          },
          "concurrent_limit": {
            "type": "integer"
          },
          "concurrency_time_window_s": {
            "type": "integer"
          },
          "timeout": {
            "type": "integer"
          },
          "cache_ttl": {
            "type": "integer"
          },
          "self_wait_time_ms": {
            "type": "integer"
          },
          "aggregate_wait_time_ms": {
            "type": "integer"
          },
          "preprocessed": {
            "type": "boolean"
          },
          "worker": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "Actual job status from database"
          }
        },
        "required": [
          "id",
          "created_by",
          "created_at",
          "job_kind",
          "permissioned_as",
          "email",
          "visible_to_owner"
        ]
      },
      "ExportableQueuedJob": {
        "type": "object",
        "description": "Queued job with full data for export/import operations",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "parent_job": {
            "type": "string",
            "format": "uuid"
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "scheduled_for": {
            "type": "string",
            "format": "date-time"
          },
          "script_path": {
            "type": "string"
          },
          "script_hash": {
            "type": "string"
          },
          "args": {
            "type": "object",
            "description": "Full job arguments without size restrictions"
          },
          "logs": {
            "type": "string",
            "description": "Complete job logs from v2_job table"
          },
          "raw_code": {
            "type": "string"
          },
          "raw_lock": {
            "type": "string"
          },
          "canceled_by": {
            "type": "string"
          },
          "canceled_reason": {
            "type": "string"
          },
          "job_kind": {
            "type": "string",
            "enum": [
              "script",
              "preview",
              "dependencies",
              "flowdependencies",
              "appdependencies",
              "flow",
              "flowpreview",
              "script_hub",
              "identity",
              "deploymentcallback",
              "singlestepflow",
              "flowscript",
              "flownode",
              "appscript",
              "aiagent",
              "unassigned_script",
              "unassigned_flow",
              "unassigned_singlestepflow"
            ]
          },
          "trigger": {
            "type": "string",
            "description": "Trigger path for the job (replaces schedule_path)"
          },
          "trigger_kind": {
            "type": "string",
            "enum": [
              "webhook",
              "http",
              "websocket",
              "kafka",
              "email",
              "nats",
              "schedule",
              "app",
              "ui",
              "postgres",
              "sqs",
              "gcp"
            ]
          },
          "permissioned_as": {
            "type": "string"
          },
          "permissioned_as_email": {
            "type": "string"
          },
          "flow_status": {
            "type": "object",
            "description": "Flow status from v2_job_status table"
          },
          "workflow_as_code_status": {
            "type": "object"
          },
          "raw_flow": {
            "type": "object"
          },
          "is_flow_step": {
            "type": "boolean"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "email": {
            "type": "string"
          },
          "visible_to_owner": {
            "type": "boolean"
          },
          "mem_peak": {
            "type": "integer"
          },
          "tag": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "same_worker": {
            "type": "boolean"
          },
          "flow_step_id": {
            "type": "string"
          },
          "flow_innermost_root_job": {
            "type": "string",
            "format": "uuid"
          },
          "concurrent_limit": {
            "type": "integer"
          },
          "concurrency_time_window_s": {
            "type": "integer"
          },
          "timeout": {
            "type": "integer"
          },
          "cache_ttl": {
            "type": "integer"
          },
          "self_wait_time_ms": {
            "type": "integer"
          },
          "aggregate_wait_time_ms": {
            "type": "integer"
          },
          "preprocessed": {
            "type": "boolean"
          },
          "suspend": {
            "type": "integer"
          },
          "suspend_until": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "created_by",
          "created_at",
          "job_kind",
          "permissioned_as",
          "email",
          "visible_to_owner"
        ]
      },
      "ObscuredJob": {
        "type": "object",
        "properties": {
          "typ": {
            "type": "string"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_ms": {
            "type": "number"
          }
        }
      },
      "Job": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompletedJob"
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "CompletedJob"
                    ]
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/QueuedJob"
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "QueuedJob"
                    ]
                  }
                }
              }
            ]
          }
        ],
        "discriminator": {
          "propertyName": "type"
        }
      },
      "User": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "is_admin": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "is_super_admin": {
            "type": "boolean"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "operator": {
            "type": "boolean"
          },
          "disabled": {
            "type": "boolean"
          },
          "groups": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "folders": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "folders_owners": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "added_via": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/UserSource"
              }
            ]
          }
        },
        "required": [
          "email",
          "username",
          "is_admin",
          "is_super_admin",
          "created_at",
          "operator",
          "disabled",
          "folders",
          "folders_owners"
        ]
      },
      "UserSource": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string",
            "enum": [
              "domain",
              "instance_group",
              "manual"
            ],
            "description": "How the user was added to the workspace"
          },
          "domain": {
            "type": "string",
            "description": "The domain used for auto-invite (when source is 'domain')"
          },
          "group": {
            "type": "string",
            "description": "The instance group name (when source is 'instance_group')"
          }
        },
        "required": [
          "source"
        ]
      },
      "UserUsage": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "executions": {
            "type": "number"
          }
        }
      },
      "Login": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ]
      },
      "PasswordResetResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "required": [
          "message"
        ]
      },
      "EditWorkspaceUser": {
        "type": "object",
        "properties": {
          "is_admin": {
            "type": "boolean"
          },
          "operator": {
            "type": "boolean"
          },
          "disabled": {
            "type": "boolean"
          }
        }
      },
      "TruncatedToken": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "expiration": {
            "type": "string",
            "format": "date-time"
          },
          "token_prefix": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_used_at": {
            "type": "string",
            "format": "date-time"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email": {
            "type": "string"
          }
        },
        "required": [
          "token_prefix",
          "created_at",
          "last_used_at"
        ]
      },
      "NewToken": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "expiration": {
            "type": "string",
            "format": "date-time"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "workspace_id": {
            "type": "string"
          }
        }
      },
      "NewTokenImpersonate": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "expiration": {
            "type": "string",
            "format": "date-time"
          },
          "impersonate_email": {
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "impersonate_email"
        ]
      },
      "ListableVariable": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "is_secret": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "account": {
            "type": "integer"
          },
          "is_oauth": {
            "type": "boolean"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "is_expired": {
            "type": "boolean"
          },
          "refresh_error": {
            "type": "string"
          },
          "is_linked": {
            "type": "boolean"
          },
          "is_refreshed": {
            "type": "boolean"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "workspace_id",
          "path",
          "is_secret",
          "extra_perms"
        ]
      },
      "ContextualVariable": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "is_custom": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "value",
          "description",
          "is_custom"
        ]
      },
      "CreateVariable": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The path to the variable"
          },
          "value": {
            "type": "string",
            "description": "The value of the variable"
          },
          "is_secret": {
            "type": "boolean",
            "description": "Whether the variable is a secret"
          },
          "description": {
            "type": "string",
            "description": "The description of the variable"
          },
          "account": {
            "type": "integer",
            "description": "The account identifier"
          },
          "is_oauth": {
            "type": "boolean",
            "description": "Whether the variable is an OAuth variable"
          },
          "expires_at": {
            "type": "string",
            "description": "The expiration date of the variable",
            "format": "date-time"
          }
        },
        "required": [
          "path",
          "value",
          "is_secret",
          "description"
        ]
      },
      "EditVariable": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The path to the variable"
          },
          "value": {
            "type": "string",
            "description": "The new value of the variable"
          },
          "is_secret": {
            "type": "boolean",
            "description": "Whether the variable is a secret"
          },
          "description": {
            "type": "string",
            "description": "The new description of the variable"
          }
        }
      },
      "AuditLog": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "username": {
            "type": "string"
          },
          "operation": {
            "type": "string",
            "enum": [
              "jobs.run",
              "jobs.run.script",
              "jobs.run.preview",
              "jobs.run.flow",
              "jobs.run.flow_preview",
              "jobs.run.script_hub",
              "jobs.run.dependencies",
              "jobs.run.identity",
              "jobs.run.noop",
              "jobs.flow_dependencies",
              "jobs",
              "jobs.cancel",
              "jobs.force_cancel",
              "jobs.disapproval",
              "jobs.delete",
              "account.delete",
              "ai.request",
              "resources.create",
              "resources.update",
              "resources.delete",
              "resource_types.create",
              "resource_types.update",
              "resource_types.delete",
              "schedule.create",
              "schedule.setenabled",
              "schedule.edit",
              "schedule.delete",
              "scripts.create",
              "scripts.update",
              "scripts.archive",
              "scripts.delete",
              "users.create",
              "users.delete",
              "users.update",
              "users.login",
              "users.login_failure",
              "users.logout",
              "users.accept_invite",
              "users.decline_invite",
              "users.token.create",
              "users.token.delete",
              "users.add_to_workspace",
              "users.add_global",
              "users.setpassword",
              "users.impersonate",
              "users.leave_workspace",
              "oauth.login",
              "oauth.login_failure",
              "oauth.signup",
              "variables.create",
              "variables.delete",
              "variables.update",
              "flows.create",
              "flows.update",
              "flows.delete",
              "flows.archive",
              "apps.create",
              "apps.update",
              "apps.delete",
              "folder.create",
              "folder.update",
              "folder.delete",
              "folder.add_owner",
              "folder.remove_owner",
              "group.create",
              "group.delete",
              "group.edit",
              "group.adduser",
              "group.removeuser",
              "igroup.create",
              "igroup.delete",
              "igroup.adduser",
              "igroup.removeuser",
              "variables.decrypt_secret",
              "workspaces.edit_command_script",
              "workspaces.edit_deploy_to",
              "workspaces.edit_auto_invite_domain",
              "workspaces.edit_webhook",
              "workspaces.edit_copilot_config",
              "workspaces.edit_error_handler",
              "workspaces.create",
              "workspaces.update",
              "workspaces.archive",
              "workspaces.unarchive",
              "workspaces.delete"
            ]
          },
          "action_kind": {
            "type": "string",
            "enum": [
              "Created",
              "Updated",
              "Delete",
              "Execute"
            ]
          },
          "resource": {
            "type": "string"
          },
          "parameters": {
            "type": "object"
          },
          "span": {
            "type": "string"
          }
        },
        "required": [
          "workspace_id",
          "id",
          "timestamp",
          "username",
          "operation",
          "action_kind"
        ]
      },
      "MainArgSignature": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Valid",
              "Invalid"
            ]
          },
          "error": {
            "type": "string"
          },
          "star_args": {
            "type": "boolean"
          },
          "star_kwargs": {
            "type": "boolean"
          },
          "args": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "typ": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "float",
                        "int",
                        "bool",
                        "email",
                        "unknown",
                        "bytes",
                        "dict",
                        "datetime",
                        "sql"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "resource": {
                          "type": "string",
                          "nullable": true
                        }
                      },
                      "required": [
                        "resource"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "str": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "nullable": true
                        }
                      },
                      "required": [
                        "str"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "object": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "props": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "key": {
                                    "type": "string"
                                  },
                                  "typ": {
                                    "oneOf": [
                                      {
                                        "type": "string",
                                        "enum": [
                                          "float",
                                          "int",
                                          "bool",
                                          "email",
                                          "unknown",
                                          "bytes",
                                          "dict",
                                          "datetime",
                                          "sql"
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "str": {}
                                        },
                                        "required": [
                                          "str"
                                        ]
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "key",
                                  "typ"
                                ]
                              }
                            }
                          }
                        }
                      },
                      "required": [
                        "object"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "list": {
                          "oneOf": [
                            {
                              "type": "string",
                              "enum": [
                                "float",
                                "int",
                                "bool",
                                "email",
                                "unknown",
                                "bytes",
                                "dict",
                                "datetime",
                                "sql"
                              ]
                            },
                            {
                              "type": "object",
                              "properties": {
                                "str": {}
                              },
                              "required": [
                                "str"
                              ]
                            }
                          ],
                          "nullable": true
                        }
                      },
                      "required": [
                        "list"
                      ]
                    }
                  ]
                },
                "has_default": {
                  "type": "boolean"
                },
                "default": {}
              },
              "required": [
                "name",
                "typ"
              ]
            }
          },
          "no_main_func": {
            "type": "boolean",
            "nullable": true
          },
          "has_preprocessor": {
            "type": "boolean",
            "nullable": true
          }
        },
        "required": [
          "star_args",
          "start_kwargs",
          "args",
          "type",
          "error",
          "no_main_func",
          "has_preprocessor"
        ]
      },
      "ScriptLang": {
        "type": "string",
        "enum": [
          "python3",
          "deno",
          "go",
          "bash",
          "powershell",
          "postgresql",
          "mysql",
          "bigquery",
          "snowflake",
          "mssql",
          "oracledb",
          "graphql",
          "nativets",
          "bun",
          "php",
          "rust",
          "ansible",
          "csharp",
          "nu",
          "java",
          "ruby",
          "duckdb",
          "bunnative"
        ]
      },
      "Preview": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "The code to run"
          },
          "path": {
            "type": "string",
            "description": "The path to the script"
          },
          "script_hash": {
            "type": "string",
            "description": "The hash of the script"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          },
          "tag": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "code",
              "identity",
              "http"
            ]
          },
          "dedicated_worker": {
            "type": "boolean"
          },
          "lock": {
            "type": "string"
          }
        },
        "required": [
          "args"
        ]
      },
      "PreviewInline": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "The code to run"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          }
        },
        "required": [
          "content",
          "args",
          "language"
        ]
      },
      "WorkflowTask": {
        "type": "object",
        "properties": {
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          }
        },
        "required": [
          "args"
        ]
      },
      "WorkflowStatusRecord": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/WorkflowStatus"
        }
      },
      "WorkflowStatus": {
        "type": "object",
        "properties": {
          "scheduled_for": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_ms": {
            "type": "number"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreateResource": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The path to the resource"
          },
          "value": {},
          "description": {
            "type": "string",
            "description": "The description of the resource"
          },
          "resource_type": {
            "type": "string",
            "description": "The resource_type associated with the resource"
          }
        },
        "required": [
          "path",
          "value",
          "resource_type"
        ]
      },
      "EditResource": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The path to the resource"
          },
          "description": {
            "type": "string",
            "description": "The new description of the resource"
          },
          "value": {},
          "resource_type": {
            "type": "string",
            "description": "The new resource_type to be associated with the resource"
          }
        }
      },
      "Resource": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "resource_type": {
            "type": "string"
          },
          "value": {},
          "is_oauth": {
            "type": "boolean"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "created_by": {
            "type": "string"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "path",
          "resource_type",
          "is_oauth"
        ]
      },
      "ListableResource": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "resource_type": {
            "type": "string"
          },
          "value": {},
          "is_oauth": {
            "type": "boolean"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "is_expired": {
            "type": "boolean"
          },
          "refresh_error": {
            "type": "string"
          },
          "is_linked": {
            "type": "boolean"
          },
          "is_refreshed": {
            "type": "boolean"
          },
          "account": {
            "type": "number"
          },
          "created_by": {
            "type": "string"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "path",
          "resource_type",
          "is_oauth",
          "is_linked",
          "is_refreshed"
        ]
      },
      "ResourceType": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "schema": {},
          "description": {
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          },
          "format_extension": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "EditResourceType": {
        "type": "object",
        "properties": {
          "schema": {},
          "description": {
            "type": "string"
          }
        }
      },
      "Schedule": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this schedule"
          },
          "edited_by": {
            "type": "string",
            "description": "Username of the last person who edited this schedule"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the last edit"
          },
          "schedule": {
            "type": "string",
            "description": "Cron expression with 6 fields (seconds, minutes, hours, day of month, month, day of week). Example '0 0 12 * * *' for daily at noon"
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the schedule is currently active and will trigger jobs"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when triggered"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "description": "Additional permissions for this schedule"
          },
          "email": {
            "type": "string",
            "description": "Email of the user who owns this schedule, used for permissioned_as"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the schedule failed to trigger"
          },
          "on_failure": {
            "type": "string",
            "description": "Path to a script or flow to run when the scheduled job fails"
          },
          "on_failure_times": {
            "type": "number",
            "description": "Number of consecutive failures before the on_failure handler is triggered (default 1)"
          },
          "on_failure_exact": {
            "type": "boolean",
            "description": "If true, trigger on_failure handler only on exactly N failures, not on every failure after N"
          },
          "on_failure_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_recovery": {
            "type": "string",
            "description": "Path to a script or flow to run when the schedule recovers after failures"
          },
          "on_recovery_times": {
            "type": "number",
            "description": "Number of consecutive successes before the on_recovery handler is triggered (default 1)"
          },
          "on_recovery_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_success": {
            "type": "string",
            "description": "Path to a script or flow to run after each successful execution"
          },
          "on_success_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "ws_error_handler_muted": {
            "type": "boolean",
            "description": "If true, the workspace-level error handler will not be triggered for this schedule's failures"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry"
          },
          "summary": {
            "type": "string",
            "description": "Short summary describing the purpose of this schedule"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what this schedule does"
          },
          "no_flow_overlap": {
            "type": "boolean",
            "description": "If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)"
          },
          "tag": {
            "type": "string",
            "description": "Worker tag to route jobs to specific worker groups"
          },
          "paused_until": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time"
          },
          "cron_version": {
            "type": "string",
            "description": "Cron parser version. Use 'v2' for extended syntax with additional features"
          },
          "dynamic_skip": {
            "type": "string",
            "description": "Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false)"
          }
        },
        "required": [
          "path",
          "edited_by",
          "edited_at",
          "schedule",
          "script_path",
          "timezone",
          "extra_perms",
          "is_flow",
          "enabled",
          "email"
        ]
      },
      "ScheduleWJobs": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Schedule"
          },
          {
            "type": "object",
            "properties": {
              "jobs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "success": {
                      "type": "boolean"
                    },
                    "duration_ms": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "success",
                    "duration_ms"
                  ]
                }
              }
            }
          }
        ]
      },
      "ErrorHandler": {
        "type": "string",
        "enum": [
          "custom",
          "slack",
          "teams",
          "email"
        ]
      },
      "NewSchedule": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this schedule"
          },
          "schedule": {
            "type": "string",
            "description": "Cron expression with 6 fields (seconds, minutes, hours, day of month, month, day of week). Example '0 0 12 * * *' for daily at noon"
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when triggered"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the schedule is currently active and will trigger jobs"
          },
          "on_failure": {
            "type": "string",
            "description": "Path to a script or flow to run when the scheduled job fails"
          },
          "on_failure_times": {
            "type": "number",
            "description": "Number of consecutive failures before the on_failure handler is triggered (default 1)"
          },
          "on_failure_exact": {
            "type": "boolean",
            "description": "If true, trigger on_failure handler only on exactly N failures, not on every failure after N"
          },
          "on_failure_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_recovery": {
            "type": "string",
            "description": "Path to a script or flow to run when the schedule recovers after failures"
          },
          "on_recovery_times": {
            "type": "number",
            "description": "Number of consecutive successes before the on_recovery handler is triggered (default 1)"
          },
          "on_recovery_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_success": {
            "type": "string",
            "description": "Path to a script or flow to run after each successful execution"
          },
          "on_success_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "ws_error_handler_muted": {
            "type": "boolean",
            "description": "If true, the workspace-level error handler will not be triggered for this schedule's failures"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry"
          },
          "no_flow_overlap": {
            "type": "boolean",
            "description": "If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)"
          },
          "summary": {
            "type": "string",
            "description": "Short summary describing the purpose of this schedule"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what this schedule does"
          },
          "tag": {
            "type": "string",
            "description": "Worker tag to route jobs to specific worker groups"
          },
          "paused_until": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time"
          },
          "cron_version": {
            "type": "string",
            "description": "Cron parser version. Use 'v2' for extended syntax with additional features"
          },
          "dynamic_skip": {
            "type": "string",
            "description": "Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false)"
          }
        },
        "required": [
          "path",
          "schedule",
          "timezone",
          "script_path",
          "is_flow",
          "args"
        ]
      },
      "EditSchedule": {
        "type": "object",
        "properties": {
          "schedule": {
            "type": "string",
            "description": "Cron expression with 6 fields (seconds, minutes, hours, day of month, month, day of week). Example '0 0 12 * * *' for daily at noon"
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_failure": {
            "type": "string",
            "description": "Path to a script or flow to run when the scheduled job fails"
          },
          "on_failure_times": {
            "type": "number",
            "description": "Number of consecutive failures before the on_failure handler is triggered (default 1)"
          },
          "on_failure_exact": {
            "type": "boolean",
            "description": "If true, trigger on_failure handler only on exactly N failures, not on every failure after N"
          },
          "on_failure_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_recovery": {
            "type": "string",
            "description": "Path to a script or flow to run when the schedule recovers after failures"
          },
          "on_recovery_times": {
            "type": "number",
            "description": "Number of consecutive successes before the on_recovery handler is triggered (default 1)"
          },
          "on_recovery_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "on_success": {
            "type": "string",
            "description": "Path to a script or flow to run after each successful execution"
          },
          "on_success_extra_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "ws_error_handler_muted": {
            "type": "boolean",
            "description": "If true, the workspace-level error handler will not be triggered for this schedule's failures"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry"
          },
          "no_flow_overlap": {
            "type": "boolean",
            "description": "If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)"
          },
          "summary": {
            "type": "string",
            "description": "Short summary describing the purpose of this schedule"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what this schedule does"
          },
          "tag": {
            "type": "string",
            "description": "Worker tag to route jobs to specific worker groups"
          },
          "paused_until": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time"
          },
          "cron_version": {
            "type": "string",
            "description": "Cron parser version. Use 'v2' for extended syntax with additional features"
          },
          "dynamic_skip": {
            "type": "string",
            "description": "Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false)"
          }
        },
        "required": [
          "schedule",
          "timezone",
          "args"
        ]
      },
      "JobTriggerKind": {
        "description": "job trigger kind (schedule, http, websocket...)",
        "type": "string",
        "enum": [
          "webhook",
          "default_email",
          "email",
          "schedule",
          "http",
          "websocket",
          "postgres",
          "kafka",
          "nats",
          "mqtt",
          "sqs",
          "gcp"
        ]
      },
      "TriggerMode": {
        "description": "job trigger mode",
        "type": "string",
        "enum": [
          "enabled",
          "disabled",
          "suspended"
        ]
      },
      "TriggerExtraProperty": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when triggered"
          },
          "email": {
            "type": "string",
            "description": "Email of the user who owns this trigger, used for permissioned_as"
          },
          "extra_perms": {
            "type": "object",
            "description": "Additional permissions for this trigger",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "workspace_id": {
            "type": "string",
            "description": "The workspace this trigger belongs to"
          },
          "edited_by": {
            "type": "string",
            "description": "Username of the last person who edited this trigger"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the last edit"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode",
            "description": "Trigger mode (enabled/disabled)"
          }
        },
        "required": [
          "path",
          "script_path",
          "email",
          "extra_perms",
          "workspace_id",
          "edited_by",
          "edited_at",
          "is_flow",
          "mode"
        ]
      },
      "AuthenticationMethod": {
        "type": "string",
        "enum": [
          "none",
          "windmill",
          "api_key",
          "basic_http",
          "custom_script",
          "signature"
        ]
      },
      "RunnableKind": {
        "type": "string",
        "enum": [
          "script",
          "flow"
        ]
      },
      "OpenapiSpecFormat": {
        "type": "string",
        "enum": [
          "yaml",
          "json"
        ]
      },
      "OpenapiHttpRouteFilters": {
        "type": "object",
        "properties": {
          "folder_regex": {
            "type": "string"
          },
          "path_regex": {
            "type": "string"
          },
          "route_path_regex": {
            "type": "string"
          }
        },
        "required": [
          "folder_regex",
          "path_regex",
          "route_path_regex"
        ]
      },
      "WebhookFilters": {
        "type": "object",
        "properties": {
          "user_or_folder_regex": {
            "type": "string",
            "enum": [
              "*",
              "u",
              "f"
            ]
          },
          "user_or_folder_regex_value": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "runnable_kind": {
            "$ref": "#/components/schemas/RunnableKind"
          }
        },
        "required": [
          "user_or_folder_regex",
          "user_or_folder_regex_value",
          "path",
          "runnable_kind"
        ]
      },
      "OpenapiV3Info": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "terms_of_service": {
            "type": "string"
          },
          "contact": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "email": {
                "type": "string"
              }
            }
          },
          "license": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "identifier": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "name"
            ]
          }
        },
        "required": [
          "title",
          "version"
        ]
      },
      "GenerateOpenapiSpec": {
        "type": "object",
        "properties": {
          "info": {
            "$ref": "#/components/schemas/OpenapiV3Info"
          },
          "url": {
            "type": "string"
          },
          "openapi_spec_format": {
            "$ref": "#/components/schemas/OpenapiSpecFormat"
          },
          "http_route_filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OpenapiHttpRouteFilters"
            }
          },
          "webhook_filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookFilters"
            }
          }
        }
      },
      "HttpMethod": {
        "type": "string",
        "enum": [
          "get",
          "post",
          "put",
          "delete",
          "patch"
        ]
      },
      "HttpRequestType": {
        "type": "string",
        "enum": [
          "sync",
          "async",
          "sync_sse"
        ]
      },
      "HttpTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "route_path": {
            "type": "string",
            "description": "The URL route path that will trigger this endpoint (e.g., 'api/myendpoint'). Must NOT start with a /."
          },
          "static_asset_config": {
            "type": "object",
            "description": "Configuration for serving static assets (s3 bucket, storage path, filename)",
            "properties": {
              "s3": {
                "type": "string",
                "description": "S3 bucket path for static assets"
              },
              "storage": {
                "type": "string",
                "description": "Storage path for static assets"
              },
              "filename": {
                "type": "string",
                "description": "Filename for the static asset"
              }
            },
            "required": [
              "s3"
            ]
          },
          "http_method": {
            "$ref": "#/components/schemas/HttpMethod",
            "description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint"
          },
          "authentication_resource_path": {
            "type": "string",
            "description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)"
          },
          "summary": {
            "type": "string",
            "description": "Short summary describing the purpose of this trigger"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what this trigger does"
          },
          "request_type": {
            "$ref": "#/components/schemas/HttpRequestType",
            "description": "How the request is handled - 'sync' waits for result, 'async' returns job ID immediately, 'sync_sse' streams results via Server-Sent Events"
          },
          "authentication_method": {
            "$ref": "#/components/schemas/AuthenticationMethod",
            "description": "How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature'"
          },
          "is_static_website": {
            "type": "boolean",
            "description": "If true, serves static files from S3/storage instead of running a script"
          },
          "workspaced_route": {
            "type": "boolean",
            "description": "If true, the route includes the workspace ID in the path"
          },
          "wrap_body": {
            "type": "boolean",
            "description": "If true, wraps the request body in a 'body' parameter"
          },
          "raw_string": {
            "type": "boolean",
            "description": "If true, passes the request body as a raw string instead of parsing as JSON"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "route_path",
          "request_type",
          "authentication_method",
          "http_method",
          "is_static_website",
          "workspaced_route",
          "wrap_body",
          "raw_string"
        ]
      },
      "NewHttpTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when triggered"
          },
          "route_path": {
            "type": "string",
            "description": "The URL route path that will trigger this endpoint (e.g., 'api/myendpoint'). Must NOT start with a /."
          },
          "workspaced_route": {
            "type": "boolean",
            "description": "If true, the route includes the workspace ID in the path"
          },
          "summary": {
            "type": "string",
            "description": "Short summary describing the purpose of this trigger"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what this trigger does"
          },
          "static_asset_config": {
            "type": "object",
            "description": "Configuration for serving static assets (s3 bucket, storage path, filename)",
            "properties": {
              "s3": {
                "type": "string",
                "description": "S3 bucket path for static assets"
              },
              "storage": {
                "type": "string",
                "description": "Storage path for static assets"
              },
              "filename": {
                "type": "string",
                "description": "Filename for the static asset"
              }
            },
            "required": [
              "s3"
            ]
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "http_method": {
            "$ref": "#/components/schemas/HttpMethod",
            "description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint"
          },
          "authentication_resource_path": {
            "type": "string",
            "description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)"
          },
          "is_async": {
            "type": "boolean",
            "description": "Deprecated, use request_type instead"
          },
          "request_type": {
            "$ref": "#/components/schemas/HttpRequestType",
            "description": "How the request is handled - 'sync' waits for result, 'async' returns job ID immediately, 'sync_sse' streams results via Server-Sent Events"
          },
          "authentication_method": {
            "$ref": "#/components/schemas/AuthenticationMethod",
            "description": "How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature'"
          },
          "is_static_website": {
            "type": "boolean",
            "description": "If true, serves static files from S3/storage instead of running a script"
          },
          "wrap_body": {
            "type": "boolean",
            "description": "If true, wraps the request body in a 'body' parameter"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "raw_string": {
            "type": "boolean",
            "description": "If true, passes the request body as a raw string instead of parsing as JSON"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "route_path",
          "is_flow",
          "authentication_method",
          "http_method",
          "is_static_website"
        ]
      },
      "EditHttpTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when triggered"
          },
          "route_path": {
            "type": "string",
            "description": "The URL route path that will trigger this endpoint (e.g., 'api/myendpoint'). Must NOT start with a /."
          },
          "summary": {
            "type": "string",
            "description": "Short summary describing the purpose of this trigger"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what this trigger does"
          },
          "workspaced_route": {
            "type": "boolean",
            "description": "If true, the route includes the workspace ID in the path"
          },
          "static_asset_config": {
            "type": "object",
            "description": "Configuration for serving static assets (s3 bucket, storage path, filename)",
            "properties": {
              "s3": {
                "type": "string",
                "description": "S3 bucket path for static assets"
              },
              "storage": {
                "type": "string",
                "description": "Storage path for static assets"
              },
              "filename": {
                "type": "string",
                "description": "Filename for the static asset"
              }
            },
            "required": [
              "s3"
            ]
          },
          "authentication_resource_path": {
            "type": "string",
            "description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "http_method": {
            "$ref": "#/components/schemas/HttpMethod",
            "description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint"
          },
          "is_async": {
            "type": "boolean",
            "description": "Deprecated, use request_type instead"
          },
          "request_type": {
            "$ref": "#/components/schemas/HttpRequestType",
            "description": "How the request is handled - 'sync' waits for result, 'async' returns job ID immediately, 'sync_sse' streams results via Server-Sent Events"
          },
          "authentication_method": {
            "$ref": "#/components/schemas/AuthenticationMethod",
            "description": "How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature'"
          },
          "is_static_website": {
            "type": "boolean",
            "description": "If true, serves static files from S3/storage instead of running a script"
          },
          "wrap_body": {
            "type": "boolean",
            "description": "If true, wraps the request body in a 'body' parameter"
          },
          "raw_string": {
            "type": "boolean",
            "description": "If true, passes the request body as a raw string instead of parsing as JSON"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "kind",
          "authentication_method",
          "http_method",
          "is_static_website"
        ]
      },
      "TriggersCount": {
        "type": "object",
        "properties": {
          "primary_schedule": {
            "type": "object",
            "properties": {
              "schedule": {
                "type": "string"
              }
            }
          },
          "schedule_count": {
            "type": "number"
          },
          "http_routes_count": {
            "type": "number"
          },
          "webhook_count": {
            "type": "number"
          },
          "email_count": {
            "type": "number"
          },
          "default_email_count": {
            "type": "number"
          },
          "websocket_count": {
            "type": "number"
          },
          "postgres_count": {
            "type": "number"
          },
          "kafka_count": {
            "type": "number"
          },
          "nats_count": {
            "type": "number"
          },
          "mqtt_count": {
            "type": "number"
          },
          "gcp_count": {
            "type": "number"
          },
          "sqs_count": {
            "type": "number"
          },
          "nextcloud_count": {
            "type": "number"
          }
        }
      },
      "WebsocketTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The WebSocket URL to connect to (can be a static URL or computed by a runnable)"
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal)"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal)"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed"
          },
          "filters": {
            "type": "array",
            "description": "Array of key-value filters to match incoming messages (only matching messages trigger the script)",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "initial_messages": {
            "type": "array",
            "description": "Messages to send immediately after connecting (can be raw strings or computed by runnables)",
            "items": {
              "$ref": "#/components/schemas/WebsocketTriggerInitialMessage"
            }
          },
          "url_runnable_args": {
            "description": "Arguments to pass to the script/flow that computes the WebSocket URL",
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "can_return_message": {
            "type": "boolean",
            "description": "If true, the script can return a message to send back through the WebSocket"
          },
          "can_return_error_result": {
            "type": "boolean",
            "description": "If true, error results are sent back through the WebSocket"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "description": "Arguments to pass to the error handler",
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "retry": {
            "description": "Retry configuration for failed executions",
            "$ref": "#/components/schemas/Retry"
          }
        },
        "required": [
          "url",
          "filters",
          "can_return_message",
          "can_return_error_result"
        ]
      },
      "NewWebsocketTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "url": {
            "type": "string",
            "description": "The WebSocket URL to connect to (can be a static URL or computed by a runnable)"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "filters": {
            "type": "array",
            "description": "Array of key-value filters to match incoming messages (only matching messages trigger the script)",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "initial_messages": {
            "type": "array",
            "description": "Messages to send immediately after connecting (can be raw strings or computed by runnables)",
            "items": {
              "$ref": "#/components/schemas/WebsocketTriggerInitialMessage"
            }
          },
          "url_runnable_args": {
            "description": "Arguments to pass to the script/flow that computes the WebSocket URL",
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "can_return_message": {
            "type": "boolean",
            "description": "If true, the script can return a message to send back through the WebSocket"
          },
          "can_return_error_result": {
            "type": "boolean",
            "description": "If true, error results are sent back through the WebSocket"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "description": "Arguments to pass to the error handler",
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "retry": {
            "description": "Retry configuration for failed executions",
            "$ref": "#/components/schemas/Retry"
          }
        },
        "required": [
          "path",
          "script_path",
          "url",
          "is_flow",
          "filters",
          "can_return_message",
          "can_return_error_result"
        ]
      },
      "EditWebsocketTrigger": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The WebSocket URL to connect to (can be a static URL or computed by a runnable)"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "filters": {
            "type": "array",
            "description": "Array of key-value filters to match incoming messages (only matching messages trigger the script)",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "initial_messages": {
            "type": "array",
            "description": "Messages to send immediately after connecting (can be raw strings or computed by runnables)",
            "items": {
              "$ref": "#/components/schemas/WebsocketTriggerInitialMessage"
            }
          },
          "url_runnable_args": {
            "description": "Arguments to pass to the script/flow that computes the WebSocket URL",
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "can_return_message": {
            "type": "boolean",
            "description": "If true, the script can return a message to send back through the WebSocket"
          },
          "can_return_error_result": {
            "type": "boolean",
            "description": "If true, error results are sent back through the WebSocket"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "description": "Arguments to pass to the error handler",
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "retry": {
            "description": "Retry configuration for failed executions",
            "$ref": "#/components/schemas/Retry"
          }
        },
        "required": [
          "path",
          "script_path",
          "url",
          "is_flow",
          "filters",
          "can_return_message",
          "can_return_error_result"
        ]
      },
      "WebsocketTriggerInitialMessage": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "raw_message": {
                "type": "string"
              }
            },
            "required": [
              "raw_message"
            ]
          },
          {
            "type": "object",
            "properties": {
              "runnable_result": {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string"
                  },
                  "args": {
                    "$ref": "#/components/schemas/ScriptArgs"
                  },
                  "is_flow": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "path",
                  "args",
                  "is_flow"
                ]
              }
            },
            "required": [
              "runnable_result"
            ]
          }
        ]
      },
      "MqttQoS": {
        "type": "string",
        "enum": [
          "qos0",
          "qos1",
          "qos2"
        ]
      },
      "MqttV3Config": {
        "type": "object",
        "properties": {
          "clean_session": {
            "type": "boolean"
          }
        }
      },
      "MqttV5Config": {
        "type": "object",
        "properties": {
          "clean_start": {
            "type": "boolean"
          },
          "topic_alias_maximum": {
            "type": "number"
          },
          "session_expiry_interval": {
            "type": "number"
          }
        }
      },
      "MqttSubscribeTopic": {
        "type": "object",
        "properties": {
          "qos": {
            "$ref": "#/components/schemas/MqttQoS"
          },
          "topic": {
            "type": "string"
          }
        },
        "required": [
          "qos",
          "topic"
        ]
      },
      "MqttClientVersion": {
        "type": "string",
        "enum": [
          "v3",
          "v5"
        ]
      },
      "MqttTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "mqtt_resource_path": {
            "type": "string",
            "description": "Path to the MQTT resource containing broker connection configuration"
          },
          "subscribe_topics": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MqttSubscribeTopic"
            },
            "description": "Array of MQTT topics to subscribe to, each with topic name and QoS level"
          },
          "v3_config": {
            "$ref": "#/components/schemas/MqttV3Config",
            "description": "MQTT v3 specific configuration (clean_session)"
          },
          "v5_config": {
            "$ref": "#/components/schemas/MqttV5Config",
            "description": "MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval)"
          },
          "client_id": {
            "type": "string",
            "description": "MQTT client ID for this connection"
          },
          "client_version": {
            "$ref": "#/components/schemas/MqttClientVersion",
            "description": "MQTT protocol version ('v3' or 'v5')"
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal)"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal)"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "subscribe_topics",
          "mqtt_resource_path"
        ]
      },
      "NewMqttTrigger": {
        "type": "object",
        "properties": {
          "mqtt_resource_path": {
            "type": "string",
            "description": "Path to the MQTT resource containing broker connection configuration"
          },
          "subscribe_topics": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MqttSubscribeTopic"
            },
            "description": "Array of MQTT topics to subscribe to, each with topic name and QoS level"
          },
          "client_id": {
            "type": "string",
            "description": "MQTT client ID for this connection"
          },
          "v3_config": {
            "$ref": "#/components/schemas/MqttV3Config",
            "description": "MQTT v3 specific configuration (clean_session)"
          },
          "v5_config": {
            "$ref": "#/components/schemas/MqttV5Config",
            "description": "MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval)"
          },
          "client_version": {
            "$ref": "#/components/schemas/MqttClientVersion",
            "description": "MQTT protocol version ('v3' or 'v5')"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "subscribe_topics",
          "mqtt_resource_path"
        ]
      },
      "EditMqttTrigger": {
        "type": "object",
        "properties": {
          "mqtt_resource_path": {
            "type": "string",
            "description": "Path to the MQTT resource containing broker connection configuration"
          },
          "subscribe_topics": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MqttSubscribeTopic"
            },
            "description": "Array of MQTT topics to subscribe to, each with topic name and QoS level"
          },
          "client_id": {
            "type": "string",
            "description": "MQTT client ID for this connection"
          },
          "v3_config": {
            "$ref": "#/components/schemas/MqttV3Config",
            "description": "MQTT v3 specific configuration (clean_session)"
          },
          "v5_config": {
            "$ref": "#/components/schemas/MqttV5Config",
            "description": "MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval)"
          },
          "client_version": {
            "$ref": "#/components/schemas/MqttClientVersion",
            "description": "MQTT protocol version ('v3' or 'v5')"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "enabled",
          "subscribe_topics",
          "mqtt_resource_path"
        ]
      },
      "DeliveryType": {
        "type": "string",
        "enum": [
          "push",
          "pull"
        ],
        "description": "Delivery mode for messages. 'push' for HTTP push delivery where messages are sent to a webhook endpoint, 'pull' for polling where the trigger actively fetches messages."
      },
      "PushConfig": {
        "type": "object",
        "description": "Configuration for push delivery mode.",
        "properties": {
          "audience": {
            "type": "string",
            "description": "The audience claim for OIDC tokens used in push authentication."
          },
          "authenticate": {
            "type": "boolean",
            "description": "If true, push messages will include OIDC authentication tokens."
          }
        },
        "required": [
          "authenticate",
          "base_endpoint"
        ]
      },
      "GcpTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "description": "A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received.",
        "properties": {
          "gcp_resource_path": {
            "type": "string",
            "description": "Path to the GCP resource containing service account credentials for authentication."
          },
          "topic_id": {
            "type": "string",
            "description": "Google Cloud Pub/Sub topic ID to subscribe to."
          },
          "subscription_id": {
            "type": "string",
            "description": "Google Cloud Pub/Sub subscription ID."
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal use)."
          },
          "delivery_type": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "delivery_config": {
            "$ref": "#/components/schemas/PushConfig"
          },
          "subscription_mode": {
            "$ref": "#/components/schemas/SubscriptionMode"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal use)."
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed."
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails."
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler."
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions."
          }
        },
        "required": [
          "gcp_resource_path",
          "topic_id",
          "subscription_id",
          "delivery_type",
          "subscription_mode"
        ]
      },
      "SubscriptionMode": {
        "type": "string",
        "enum": [
          "existing",
          "create_update"
        ],
        "description": "The mode of subscription. 'existing' means using an existing GCP subscription, while 'create_update' involves creating or updating a new subscription."
      },
      "GcpTriggerData": {
        "type": "object",
        "description": "Data for creating or updating a Google Cloud Pub/Sub trigger.",
        "properties": {
          "gcp_resource_path": {
            "type": "string",
            "description": "Path to the GCP resource containing service account credentials for authentication."
          },
          "subscription_mode": {
            "$ref": "#/components/schemas/SubscriptionMode"
          },
          "topic_id": {
            "type": "string",
            "description": "Google Cloud Pub/Sub topic ID to subscribe to."
          },
          "subscription_id": {
            "type": "string",
            "description": "Google Cloud Pub/Sub subscription ID."
          },
          "base_endpoint": {
            "type": "string",
            "description": "Base URL for push delivery endpoint."
          },
          "delivery_type": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "delivery_config": {
            "$ref": "#/components/schemas/PushConfig"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger."
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received."
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script."
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "auto_acknowledge_msg": {
            "type": "boolean",
            "description": "If true, automatically acknowledge messages after processing."
          },
          "ack_deadline": {
            "type": "integer",
            "format": "int32",
            "minimum": 10,
            "maximum": 600,
            "description": "Time in seconds within which the message must be acknowledged. If not provided, defaults to the subscription's acknowledgment deadline (600 seconds)."
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails."
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler."
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions."
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "gcp_resource_path",
          "topic_id",
          "subscription_mode"
        ]
      },
      "GetAllTopicSubscription": {
        "type": "object",
        "properties": {
          "topic_id": {
            "type": "string"
          }
        },
        "required": [
          "topic_id"
        ]
      },
      "DeleteGcpSubscription": {
        "type": "object",
        "properties": {
          "subscription_id": {
            "type": "string"
          }
        },
        "required": [
          "subscription_id"
        ]
      },
      "AwsAuthResourceType": {
        "type": "string",
        "enum": [
          "oidc",
          "credentials"
        ]
      },
      "SqsTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "queue_url": {
            "type": "string",
            "description": "The full URL of the AWS SQS queue to poll for messages"
          },
          "aws_auth_resource_type": {
            "$ref": "#/components/schemas/AwsAuthResourceType",
            "description": "Authentication type - 'credentials' for access key/secret, 'oidc' for OpenID Connect"
          },
          "aws_resource_path": {
            "type": "string",
            "description": "Path to the AWS resource containing credentials or OIDC configuration"
          },
          "message_attributes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of SQS message attribute names to include with each message"
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal)"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal)"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "queue_url",
          "aws_resource_path",
          "aws_auth_resource_type"
        ]
      },
      "LoggedWizardStatus": {
        "type": "string",
        "enum": [
          "OK",
          "SKIP",
          "FAIL"
        ]
      },
      "CustomInstanceDbLogs": {
        "type": "object",
        "properties": {
          "super_admin": {
            "$ref": "#/components/schemas/LoggedWizardStatus"
          },
          "database_credentials": {
            "$ref": "#/components/schemas/LoggedWizardStatus"
          },
          "valid_dbname": {
            "$ref": "#/components/schemas/LoggedWizardStatus"
          },
          "created_database": {
            "$ref": "#/components/schemas/LoggedWizardStatus"
          },
          "db_connect": {
            "$ref": "#/components/schemas/LoggedWizardStatus"
          },
          "grant_permissions": {
            "$ref": "#/components/schemas/LoggedWizardStatus"
          }
        }
      },
      "CustomInstanceDbTag": {
        "type": "string",
        "enum": [
          "ducklake",
          "datatable"
        ]
      },
      "CustomInstanceDb": {
        "type": "object",
        "required": [
          "logs",
          "success"
        ],
        "properties": {
          "logs": {
            "$ref": "#/components/schemas/CustomInstanceDbLogs"
          },
          "success": {
            "type": "boolean",
            "description": "Whether the operation completed successfully",
            "example": true
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "Error message if the operation failed",
            "example": "Connection timeout"
          },
          "tag": {
            "$ref": "#/components/schemas/CustomInstanceDbTag"
          }
        }
      },
      "NewSqsTrigger": {
        "type": "object",
        "properties": {
          "queue_url": {
            "type": "string",
            "description": "The full URL of the AWS SQS queue to poll for messages"
          },
          "aws_auth_resource_type": {
            "$ref": "#/components/schemas/AwsAuthResourceType",
            "description": "Authentication type - 'credentials' for access key/secret, 'oidc' for OpenID Connect"
          },
          "aws_resource_path": {
            "type": "string",
            "description": "Path to the AWS resource containing credentials or OIDC configuration"
          },
          "message_attributes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of SQS message attribute names to include with each message"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "queue_url",
          "aws_resource_path",
          "path",
          "script_path",
          "is_flow",
          "aws_auth_resource_type"
        ]
      },
      "EditSqsTrigger": {
        "type": "object",
        "properties": {
          "queue_url": {
            "type": "string",
            "description": "The full URL of the AWS SQS queue to poll for messages"
          },
          "aws_auth_resource_type": {
            "$ref": "#/components/schemas/AwsAuthResourceType",
            "description": "Authentication type - 'credentials' for access key/secret, 'oidc' for OpenID Connect"
          },
          "aws_resource_path": {
            "type": "string",
            "description": "Path to the AWS resource containing credentials or OIDC configuration"
          },
          "message_attributes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of SQS message attribute names to include with each message"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "queue_url",
          "aws_resource_path",
          "path",
          "script_path",
          "is_flow",
          "enabled",
          "aws_auth_resource_type"
        ]
      },
      "Slot": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        }
      },
      "SlotList": {
        "type": "object",
        "properties": {
          "slot_name": {
            "type": "string"
          },
          "active": {
            "type": "boolean"
          }
        }
      },
      "PublicationData": {
        "type": "object",
        "properties": {
          "table_to_track": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Relations"
            }
          },
          "transaction_to_track": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "transaction_to_track"
        ]
      },
      "TableToTrack": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "table_name": {
              "type": "string"
            },
            "columns_name": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "where_clause": {
              "type": "string"
            }
          },
          "required": [
            "table_name"
          ]
        }
      },
      "Relations": {
        "type": "object",
        "properties": {
          "schema_name": {
            "type": "string"
          },
          "table_to_track": {
            "$ref": "#/components/schemas/TableToTrack"
          }
        },
        "required": [
          "schema_name",
          "table_to_track"
        ]
      },
      "Language": {
        "type": "string",
        "enum": [
          "Typescript"
        ]
      },
      "TemplateScript": {
        "type": "object",
        "properties": {
          "postgres_resource_path": {
            "type": "string"
          },
          "relations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Relations"
            }
          },
          "language": {
            "$ref": "#/components/schemas/Language"
          }
        },
        "required": [
          "postgres_resource_path",
          "relations",
          "language"
        ]
      },
      "PostgresTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "postgres_resource_path": {
            "type": "string",
            "description": "Path to the PostgreSQL resource containing connection configuration"
          },
          "publication_name": {
            "type": "string",
            "description": "Name of the PostgreSQL publication to subscribe to for change data capture"
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal)"
          },
          "replication_slot_name": {
            "type": "string",
            "description": "Name of the PostgreSQL logical replication slot to use"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal)"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "postgres_resource_path",
          "replication_slot_name",
          "publication_name"
        ]
      },
      "NewPostgresTrigger": {
        "type": "object",
        "properties": {
          "replication_slot_name": {
            "type": "string",
            "description": "Name of the PostgreSQL logical replication slot to use"
          },
          "publication_name": {
            "type": "string",
            "description": "Name of the PostgreSQL publication to subscribe to for change data capture"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when database changes are detected"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "postgres_resource_path": {
            "type": "string",
            "description": "Path to the PostgreSQL resource containing connection configuration"
          },
          "publication": {
            "$ref": "#/components/schemas/PublicationData",
            "description": "Configuration for creating/managing the publication (tables, operations)"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "enabled",
          "postgres_resource_path"
        ]
      },
      "EditPostgresTrigger": {
        "type": "object",
        "properties": {
          "replication_slot_name": {
            "type": "string",
            "description": "Name of the PostgreSQL logical replication slot to use"
          },
          "publication_name": {
            "type": "string",
            "description": "Name of the PostgreSQL publication to subscribe to for change data capture"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when database changes are detected"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "postgres_resource_path": {
            "type": "string",
            "description": "Path to the PostgreSQL resource containing connection configuration"
          },
          "publication": {
            "$ref": "#/components/schemas/PublicationData",
            "description": "Configuration for creating/managing the publication (tables, operations)"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "enabled",
          "postgres_resource_path",
          "publication_name",
          "replication_slot_name"
        ]
      },
      "KafkaTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "kafka_resource_path": {
            "type": "string",
            "description": "Path to the Kafka resource containing connection configuration"
          },
          "group_id": {
            "type": "string",
            "description": "Kafka consumer group ID for this trigger"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of Kafka topic names to subscribe to"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal)"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal)"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "kafka_resource_path",
          "group_id",
          "topics",
          "filters"
        ]
      },
      "NewKafkaTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "kafka_resource_path": {
            "type": "string",
            "description": "Path to the Kafka resource containing connection configuration"
          },
          "group_id": {
            "type": "string",
            "description": "Kafka consumer group ID for this trigger"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of Kafka topic names to subscribe to"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "kafka_resource_path",
          "group_id",
          "topics",
          "filters"
        ]
      },
      "EditKafkaTrigger": {
        "type": "object",
        "properties": {
          "kafka_resource_path": {
            "type": "string",
            "description": "Path to the Kafka resource containing connection configuration"
          },
          "group_id": {
            "type": "string",
            "description": "Kafka consumer group ID for this trigger"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of Kafka topic names to subscribe to"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "kafka_resource_path",
          "group_id",
          "topics",
          "filters",
          "is_flow"
        ]
      },
      "NatsTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "nats_resource_path": {
            "type": "string",
            "description": "Path to the NATS resource containing connection configuration"
          },
          "use_jetstream": {
            "type": "boolean",
            "description": "If true, uses NATS JetStream for durable message delivery"
          },
          "stream_name": {
            "type": "string",
            "description": "JetStream stream name (required when use_jetstream is true)"
          },
          "consumer_name": {
            "type": "string",
            "description": "JetStream consumer name (required when use_jetstream is true)"
          },
          "subjects": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of NATS subjects to subscribe to"
          },
          "server_id": {
            "type": "string",
            "description": "ID of the server currently handling this trigger (internal)"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of last server heartbeat (internal)"
          },
          "error": {
            "type": "string",
            "description": "Last error message if the trigger failed"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "nats_resource_path",
          "use_jetstream",
          "subjects"
        ]
      },
      "NewNatsTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "nats_resource_path": {
            "type": "string",
            "description": "Path to the NATS resource containing connection configuration"
          },
          "use_jetstream": {
            "type": "boolean",
            "description": "If true, uses NATS JetStream for durable message delivery"
          },
          "stream_name": {
            "type": "string",
            "description": "JetStream stream name (required when use_jetstream is true)"
          },
          "consumer_name": {
            "type": "string",
            "description": "JetStream consumer name (required when use_jetstream is true)"
          },
          "subjects": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of NATS subjects to subscribe to"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow",
          "nats_resource_path",
          "use_jetstream",
          "subjects"
        ]
      },
      "EditNatsTrigger": {
        "type": "object",
        "properties": {
          "nats_resource_path": {
            "type": "string",
            "description": "Path to the NATS resource containing connection configuration"
          },
          "use_jetstream": {
            "type": "boolean",
            "description": "If true, uses NATS JetStream for durable message delivery"
          },
          "stream_name": {
            "type": "string",
            "description": "JetStream stream name (required when use_jetstream is true)"
          },
          "consumer_name": {
            "type": "string",
            "description": "JetStream consumer name (required when use_jetstream is true)"
          },
          "subjects": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of NATS subjects to subscribe to"
          },
          "path": {
            "type": "string",
            "description": "The unique path identifier for this trigger"
          },
          "script_path": {
            "type": "string",
            "description": "Path to the script or flow to execute when a message is received"
          },
          "is_flow": {
            "type": "boolean",
            "description": "True if script_path points to a flow, false if it points to a script"
          },
          "error_handler_path": {
            "type": "string",
            "description": "Path to a script or flow to run when the triggered job fails"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs",
            "description": "Arguments to pass to the error handler"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry",
            "description": "Retry configuration for failed executions"
          }
        },
        "required": [
          "path",
          "script_path",
          "nats_resource_path",
          "use_jetstream",
          "subjects",
          "is_flow"
        ]
      },
      "EmailTrigger": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TriggerExtraProperty"
          }
        ],
        "type": "object",
        "properties": {
          "local_part": {
            "type": "string"
          },
          "workspaced_local_part": {
            "type": "boolean"
          },
          "error_handler_path": {
            "type": "string"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry"
          }
        },
        "required": [
          "local_part"
        ]
      },
      "NewEmailTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "script_path": {
            "type": "string"
          },
          "local_part": {
            "type": "string"
          },
          "workspaced_local_part": {
            "type": "boolean"
          },
          "is_flow": {
            "type": "boolean"
          },
          "error_handler_path": {
            "type": "string"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry"
          },
          "mode": {
            "$ref": "#/components/schemas/TriggerMode"
          }
        },
        "required": [
          "path",
          "script_path",
          "local_part",
          "is_flow"
        ]
      },
      "EditEmailTrigger": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "script_path": {
            "type": "string"
          },
          "local_part": {
            "type": "string"
          },
          "workspaced_local_part": {
            "type": "boolean"
          },
          "is_flow": {
            "type": "boolean"
          },
          "error_handler_path": {
            "type": "string"
          },
          "error_handler_args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "retry": {
            "$ref": "#/components/schemas/Retry"
          }
        },
        "required": [
          "path",
          "script_path",
          "is_flow"
        ]
      },
      "Group": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "members": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          }
        },
        "required": [
          "name"
        ]
      },
      "InstanceGroup": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "InstanceGroupWithWorkspaces": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "workspaces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceInfo"
            }
          }
        }
      },
      "WorkspaceInfo": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "workspace_name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "Folder": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "owners": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "summary": {
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name",
          "owners",
          "extra_perms"
        ]
      },
      "WorkerPing": {
        "type": "object",
        "properties": {
          "worker": {
            "type": "string"
          },
          "worker_instance": {
            "type": "string"
          },
          "last_ping": {
            "type": "number"
          },
          "started_at": {
            "type": "string",
            "format": "date-time"
          },
          "ip": {
            "type": "string"
          },
          "jobs_executed": {
            "type": "integer"
          },
          "custom_tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "worker_group": {
            "type": "string"
          },
          "wm_version": {
            "type": "string"
          },
          "last_job_id": {
            "type": "string"
          },
          "last_job_workspace_id": {
            "type": "string"
          },
          "occupancy_rate": {
            "type": "number"
          },
          "occupancy_rate_15s": {
            "type": "number"
          },
          "occupancy_rate_5m": {
            "type": "number"
          },
          "occupancy_rate_30m": {
            "type": "number"
          },
          "memory": {
            "type": "number"
          },
          "vcpus": {
            "type": "number"
          },
          "memory_usage": {
            "type": "number"
          },
          "wm_memory_usage": {
            "type": "number"
          },
          "job_isolation": {
            "type": "string"
          }
        },
        "required": [
          "worker",
          "worker_instance",
          "ping_at",
          "started_at",
          "ip",
          "jobs_executed",
          "worker_group",
          "wm_version"
        ]
      },
      "UserWorkspaceList": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "workspaces": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "username": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                },
                "operator_settings": {
                  "$ref": "#/components/schemas/OperatorSettings"
                },
                "parent_workspace_id": {
                  "type": "string",
                  "nullable": true
                },
                "created_by": {
                  "type": "string",
                  "nullable": true
                },
                "disabled": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "name",
                "username",
                "color",
                "disabled"
              ]
            }
          }
        },
        "required": [
          "email",
          "workspaces"
        ]
      },
      "CreateWorkspace": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "color": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ]
      },
      "CreateWorkspaceFork": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "color": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "parent_workspace_id"
        ]
      },
      "Workspace": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "parent_workspace_id": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "id",
          "name",
          "owner",
          "created_at"
        ]
      },
      "DependencyMap": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "nullable": true
          },
          "importer_path": {
            "type": "string",
            "nullable": true
          },
          "importer_kind": {
            "type": "string",
            "nullable": true
          },
          "imported_path": {
            "type": "string",
            "nullable": true
          },
          "importer_node_id": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "DependencyDependent": {
        "type": "object",
        "properties": {
          "importer_path": {
            "type": "string"
          },
          "importer_kind": {
            "type": "string",
            "enum": [
              "script",
              "flow",
              "app"
            ]
          },
          "importer_node_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "required": [
          "importer_path",
          "importer_kind"
        ]
      },
      "DependentsAmount": {
        "type": "object",
        "properties": {
          "imported_path": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "format": "int64"
          }
        },
        "required": [
          "imported_path",
          "count"
        ]
      },
      "WorkspaceInvite": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "is_admin": {
            "type": "boolean"
          },
          "operator": {
            "type": "boolean"
          },
          "parent_workspace_id": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "workspace_id",
          "email",
          "is_admin",
          "operator"
        ]
      },
      "GlobalUserInfo": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "login_type": {
            "type": "string",
            "enum": [
              "password",
              "github"
            ]
          },
          "super_admin": {
            "type": "boolean"
          },
          "devops": {
            "type": "boolean"
          },
          "verified": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "company": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "operator_only": {
            "type": "boolean"
          },
          "first_time_user": {
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "login_type",
          "super_admin",
          "verified",
          "first_time_user"
        ]
      },
      "Flow": {
        "allOf": [
          {
            "$ref": "#/components/schemas/OpenFlow"
          },
          {
            "$ref": "#/components/schemas/FlowMetadata"
          },
          {
            "type": "object",
            "properties": {
              "lock_error_logs": {
                "type": "string"
              },
              "version_id": {
                "type": "number"
              }
            }
          }
        ]
      },
      "ExtraPerms": {
        "type": "object",
        "additionalProperties": {
          "type": "boolean"
        }
      },
      "FlowMetadata": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "edited_by": {
            "type": "string"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived": {
            "type": "boolean"
          },
          "extra_perms": {
            "$ref": "#/components/schemas/ExtraPerms"
          },
          "starred": {
            "type": "boolean"
          },
          "draft_only": {
            "type": "boolean"
          },
          "tag": {
            "type": "string"
          },
          "ws_error_handler_muted": {
            "type": "boolean"
          },
          "priority": {
            "type": "integer"
          },
          "dedicated_worker": {
            "type": "boolean"
          },
          "timeout": {
            "type": "number"
          },
          "visible_to_runner_only": {
            "type": "boolean"
          },
          "on_behalf_of_email": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "edited_by",
          "edited_at",
          "archived",
          "extra_perms"
        ]
      },
      "OpenFlowWPath": {
        "allOf": [
          {
            "$ref": "#/components/schemas/OpenFlow"
          },
          {
            "type": "object",
            "properties": {
              "path": {
                "type": "string"
              },
              "tag": {
                "type": "string"
              },
              "ws_error_handler_muted": {
                "type": "boolean"
              },
              "priority": {
                "type": "integer"
              },
              "dedicated_worker": {
                "type": "boolean"
              },
              "timeout": {
                "type": "number"
              },
              "visible_to_runner_only": {
                "type": "boolean"
              },
              "on_behalf_of_email": {
                "type": "string"
              }
            },
            "required": [
              "path"
            ]
          }
        ]
      },
      "FlowPreview": {
        "type": "object",
        "properties": {
          "value": {
            "$ref": "#/components/schemas/FlowValue"
          },
          "path": {
            "type": "string"
          },
          "args": {
            "$ref": "#/components/schemas/ScriptArgs"
          },
          "tag": {
            "type": "string"
          },
          "restarted_from": {
            "$ref": "#/components/schemas/RestartedFrom"
          }
        },
        "required": [
          "value",
          "content",
          "args"
        ]
      },
      "RestartedFrom": {
        "type": "object",
        "properties": {
          "flow_job_id": {
            "type": "string",
            "format": "uuid"
          },
          "step_id": {
            "type": "string"
          },
          "branch_or_iteration_n": {
            "type": "integer"
          },
          "flow_version": {
            "type": "integer"
          }
        }
      },
      "Policy": {
        "type": "object",
        "properties": {
          "triggerables": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          },
          "triggerables_v2": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          },
          "s3_inputs": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "allowed_s3_keys": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "s3_path": {
                  "type": "string"
                },
                "resource": {
                  "type": "string"
                }
              }
            }
          },
          "execution_mode": {
            "type": "string",
            "enum": [
              "viewer",
              "publisher",
              "anonymous"
            ]
          },
          "on_behalf_of": {
            "type": "string"
          },
          "on_behalf_of_email": {
            "type": "string"
          }
        }
      },
      "ListableApp": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "version": {
            "type": "integer"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "starred": {
            "type": "boolean"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          },
          "execution_mode": {
            "type": "string",
            "enum": [
              "viewer",
              "publisher",
              "anonymous"
            ]
          },
          "raw_app": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "path",
          "summary",
          "version",
          "extra_perms",
          "edited_at",
          "execution_mode"
        ]
      },
      "ScopeDefinition": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "requires_resource_path": {
            "type": "boolean"
          }
        },
        "required": [
          "value",
          "label",
          "requires_resource_path"
        ]
      },
      "ScopeDomain": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "scopes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScopeDefinition"
            }
          }
        },
        "required": [
          "name",
          "scopes"
        ]
      },
      "ListableRawApp": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "starred": {
            "type": "boolean"
          },
          "version": {
            "type": "number"
          },
          "edited_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "workspace_id",
          "path",
          "summary",
          "extra_perms",
          "version",
          "edited_at"
        ]
      },
      "AppWithLastVersion": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "workspace_id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "versions": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "created_by": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "value": {},
          "policy": {
            "$ref": "#/components/schemas/Policy"
          },
          "execution_mode": {
            "type": "string",
            "enum": [
              "viewer",
              "publisher",
              "anonymous"
            ]
          },
          "extra_perms": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "custom_path": {
            "type": "string"
          },
          "raw_app": {
            "type": "boolean"
          },
          "bundle_secret": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "path",
          "summary",
          "versions",
          "created_by",
          "created_at",
          "value",
          "policy",
          "execution_mode",
          "extra_perms",
          "raw_app"
        ]
      },
      "AppWithLastVersionWDraft": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AppWithLastVersion"
          },
          {
            "type": "object",
            "properties": {
              "draft_only": {
                "type": "boolean"
              },
              "draft": {}
            }
          }
        ]
      },
      "AppHistory": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer"
          },
          "deployment_msg": {
            "type": "string"
          }
        },
        "required": [
          "version"
        ]
      },
      "FlowVersion": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deployment_msg": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "created_at"
        ]
      },
      "SlackToken": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string"
          },
          "team_id": {
            "type": "string"
          },
          "team_name": {
            "type": "string"
          },
          "bot": {
            "type": "object",
            "properties": {
              "bot_access_token": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "access_token",
          "team_id",
          "team_name",
          "bot"
        ]
      },
      "TokenResponse": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string"
          },
          "expires_in": {
            "type": "integer"
          },
          "refresh_token": {
            "type": "string"
          },
          "scope": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "grant_type": {
            "type": "string"
          }
        },
        "required": [
          "access_token"
        ]
      },
      "HubScriptKind": {
        "type": "string",
        "enum": [
          "script",
          "failure",
          "trigger",
          "approval"
        ]
      },
      "PolarsClientKwargs": {
        "type": "object",
        "properties": {
          "region_name": {
            "type": "string"
          }
        },
        "required": [
          "region_name"
        ]
      },
      "LargeFileStorage": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "S3Storage",
              "AzureBlobStorage",
              "AzureWorkloadIdentity",
              "S3AwsOidc",
              "GoogleCloudStorage"
            ]
          },
          "s3_resource_path": {
            "type": "string"
          },
          "azure_blob_resource_path": {
            "type": "string"
          },
          "gcs_resource_path": {
            "type": "string"
          },
          "public_resource": {
            "type": "boolean"
          },
          "advanced_permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/S3PermissionRule"
            }
          },
          "secondary_storage": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "S3Storage",
                    "AzureBlobStorage",
                    "AzureWorkloadIdentity",
                    "S3AwsOidc",
                    "GoogleCloudStorage"
                  ]
                },
                "s3_resource_path": {
                  "type": "string"
                },
                "azure_blob_resource_path": {
                  "type": "string"
                },
                "gcs_resource_path": {
                  "type": "string"
                },
                "public_resource": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      },
      "DucklakeSettings": {
        "type": "object",
        "required": [
          "ducklakes"
        ],
        "properties": {
          "ducklakes": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "required": [
                "catalog",
                "storage"
              ],
              "properties": {
                "catalog": {
                  "type": "object",
                  "properties": {
                    "resource_type": {
                      "type": "string",
                      "enum": [
                        "postgresql",
                        "mysql",
                        "instance"
                      ]
                    },
                    "resource_path": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "resource_type"
                  ]
                },
                "storage": {
                  "type": "object",
                  "properties": {
                    "storage": {
                      "type": "string"
                    },
                    "path": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "path"
                  ]
                },
                "extra_args": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "DataTableSettings": {
        "type": "object",
        "required": [
          "datatables"
        ],
        "properties": {
          "datatables": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "required": [
                "database"
              ],
              "properties": {
                "database": {
                  "type": "object",
                  "properties": {
                    "resource_type": {
                      "type": "string",
                      "enum": [
                        "postgresql",
                        "instance"
                      ]
                    },
                    "resource_path": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "resource_type"
                  ]
                }
              }
            }
          }
        }
      },
      "DataTableSchema": {
        "type": "object",
        "required": [
          "datatable_name",
          "schemas"
        ],
        "properties": {
          "datatable_name": {
            "type": "string"
          },
          "schemas": {
            "type": "object",
            "description": "Hierarchical schema: schema_name -> table_name -> column_name -> compact_type (e.g. 'int4', 'text?', 'int4?=0')",
            "additionalProperties": {
              "type": "object",
              "description": "Tables in this schema",
              "additionalProperties": {
                "type": "object",
                "description": "Columns in this table",
                "additionalProperties": {
                  "type": "string",
                  "description": "Compact type: 'type[?][=default]' where ? means nullable"
                }
              }
            }
          },
          "error": {
            "type": "string"
          }
        }
      },
      "DynamicInputData": {
        "type": "object",
        "properties": {
          "entrypoint_function": {
            "type": "string",
            "description": "Name of the function to execute for dynamic select"
          },
          "args": {
            "type": "object",
            "description": "Arguments to pass to the function"
          },
          "runnable_ref": {
            "type": "object",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "source": {
                    "type": "string",
                    "enum": [
                      "deployed"
                    ]
                  },
                  "path": {
                    "type": "string",
                    "description": "Path to the deployed script or flow"
                  },
                  "runnable_kind": {
                    "$ref": "#/components/schemas/RunnableKind"
                  }
                },
                "required": [
                  "source",
                  "path",
                  "runnable_kind"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "source": {
                    "type": "string",
                    "enum": [
                      "inline"
                    ]
                  },
                  "code": {
                    "type": "string",
                    "description": "Code content for inline execution"
                  },
                  "language": {
                    "$ref": "#/components/schemas/ScriptLang"
                  }
                },
                "required": [
                  "source",
                  "code"
                ]
              }
            ]
          }
        },
        "required": [
          "entrypoint_function",
          "runnable_ref"
        ]
      },
      "WindmillLargeFile": {
        "type": "object",
        "properties": {
          "s3": {
            "type": "string"
          }
        },
        "required": [
          "s3"
        ]
      },
      "WindmillFileMetadata": {
        "type": "object",
        "properties": {
          "mime_type": {
            "type": "string"
          },
          "size_in_bytes": {
            "type": "integer"
          },
          "last_modified": {
            "type": "string",
            "format": "date-time"
          },
          "expires": {
            "type": "string",
            "format": "date-time"
          },
          "version_id": {
            "type": "string"
          }
        }
      },
      "WindmillFilePreview": {
        "type": "object",
        "properties": {
          "msg": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "content_type": {
            "type": "string",
            "enum": [
              "RawText",
              "Csv",
              "Parquet",
              "Unknown"
            ]
          }
        },
        "required": [
          "content_type"
        ]
      },
      "S3Resource": {
        "type": "object",
        "properties": {
          "bucket": {
            "type": "string"
          },
          "region": {
            "type": "string"
          },
          "endPoint": {
            "type": "string"
          },
          "useSSL": {
            "type": "boolean"
          },
          "accessKey": {
            "type": "string"
          },
          "secretKey": {
            "type": "string"
          },
          "pathStyle": {
            "type": "boolean"
          }
        },
        "required": [
          "bucket",
          "region",
          "endPoint",
          "useSSL",
          "pathStyle"
        ]
      },
      "WorkspaceGitSyncSettings": {
        "type": "object",
        "properties": {
          "repositories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GitRepositorySettings"
            }
          }
        }
      },
      "WorkspaceDeployUISettings": {
        "type": "object",
        "properties": {
          "include_path": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "include_type": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GitSyncObjectType"
            }
          }
        }
      },
      "WorkspaceDefaultScripts": {
        "type": "object",
        "properties": {
          "order": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "hidden": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default_script_content": {
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "S3PermissionRule": {
        "type": "object",
        "properties": {
          "pattern": {
            "type": "string"
          },
          "allow": {
            "type": "string"
          }
        },
        "required": [
          "pattern",
          "allow"
        ]
      },
      "GitRepositorySettings": {
        "type": "object",
        "properties": {
          "script_path": {
            "type": "string"
          },
          "git_repo_resource_path": {
            "type": "string"
          },
          "use_individual_branch": {
            "type": "boolean"
          },
          "group_by_folder": {
            "type": "boolean"
          },
          "collapsed": {
            "type": "boolean"
          },
          "settings": {
            "type": "object",
            "properties": {
              "include_path": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "include_type": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/GitSyncObjectType"
                }
              },
              "exclude_path": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "extra_include_path": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "exclude_types_override": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GitSyncObjectType"
            }
          }
        },
        "required": [
          "script_path",
          "git_repo_resource_path"
        ]
      },
      "MetricMetadata": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      },
      "ScalarMetric": {
        "type": "object",
        "properties": {
          "metric_id": {
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "value"
        ]
      },
      "TimeseriesMetric": {
        "type": "object",
        "properties": {
          "metric_id": {
            "type": "string"
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetricDataPoint"
            }
          }
        },
        "required": [
          "id",
          "values"
        ]
      },
      "MetricDataPoint": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "timestamp",
          "value"
        ]
      },
      "RawScriptForDependencies": {
        "type": "object",
        "properties": {
          "raw_code": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/ScriptLang"
          }
        },
        "required": [
          "raw_code",
          "path",
          "language"
        ]
      },
      "ConcurrencyGroup": {
        "type": "object",
        "properties": {
          "concurrency_key": {
            "type": "string"
          },
          "total_running": {
            "type": "number"
          }
        },
        "required": [
          "concurrency_key",
          "total_running"
        ]
      },
      "ExtendedJobs": {
        "type": "object",
        "properties": {
          "jobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Job"
            }
          },
          "obscured_jobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObscuredJob"
            }
          },
          "omitted_obscured_jobs": {
            "description": "Obscured jobs omitted for security because of too specific filtering",
            "type": "boolean"
          }
        },
        "required": [
          "jobs",
          "obscured_jobs"
        ]
      },
      "ExportedUser": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password_hash": {
            "type": "string"
          },
          "super_admin": {
            "type": "boolean"
          },
          "verified": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "company": {
            "type": "string"
          },
          "first_time_user": {
            "type": "boolean"
          },
          "username": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "super_admin",
          "verified",
          "first_time_user"
        ]
      },
      "GlobalSetting": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {}
        },
        "required": [
          "name",
          "value"
        ]
      },
      "Config": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "config": {
            "type": "object"
          }
        },
        "required": [
          "name"
        ]
      },
      "ExportedInstanceGroup": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "id": {
            "type": "string"
          },
          "scim_display_name": {
            "type": "string"
          },
          "external_id": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      },
      "JobSearchHit": {
        "type": "object",
        "properties": {
          "dancer": {
            "type": "string"
          }
        }
      },
      "LogSearchHit": {
        "type": "object",
        "properties": {
          "dancer": {
            "type": "string"
          }
        }
      },
      "AutoscalingEvent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "worker_group": {
            "type": "string"
          },
          "event_type": {
            "type": "string"
          },
          "desired_workers": {
            "type": "integer"
          },
          "reason": {
            "type": "string"
          },
          "applied_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CriticalAlert": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the alert"
          },
          "alert_type": {
            "type": "string",
            "description": "Type of alert (e.g., critical_error)"
          },
          "message": {
            "type": "string",
            "description": "The message content of the alert"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Time when the alert was created"
          },
          "acknowledged": {
            "type": "boolean",
            "nullable": true,
            "description": "Acknowledgment status of the alert, can be true, false, or null if not set"
          },
          "workspace_id": {
            "type": "string",
            "nullable": true,
            "description": "Workspace id if the alert is in the scope of a workspace"
          }
        }
      },
      "CaptureTriggerKind": {
        "type": "string",
        "enum": [
          "webhook",
          "http",
          "websocket",
          "kafka",
          "default_email",
          "nats",
          "postgres",
          "sqs",
          "mqtt",
          "gcp",
          "email"
        ]
      },
      "Capture": {
        "type": "object",
        "properties": {
          "trigger_kind": {
            "$ref": "#/components/schemas/CaptureTriggerKind"
          },
          "main_args": {},
          "preprocessor_args": {},
          "id": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "trigger_kind",
          "main_args",
          "preprocessor_args",
          "id",
          "created_at"
        ]
      },
      "CaptureConfig": {
        "type": "object",
        "properties": {
          "trigger_config": {},
          "trigger_kind": {
            "$ref": "#/components/schemas/CaptureTriggerKind"
          },
          "error": {
            "type": "string"
          },
          "last_server_ping": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "trigger_kind"
        ]
      },
      "OperatorSettings": {
        "nullable": true,
        "type": "object",
        "required": [
          "runs",
          "schedules",
          "resources",
          "assets",
          "variables",
          "triggers",
          "audit_logs",
          "groups",
          "folders",
          "workers"
        ],
        "properties": {
          "runs": {
            "type": "boolean",
            "description": "Whether operators can view runs"
          },
          "schedules": {
            "type": "boolean",
            "description": "Whether operators can view schedules"
          },
          "resources": {
            "type": "boolean",
            "description": "Whether operators can view resources"
          },
          "variables": {
            "type": "boolean",
            "description": "Whether operators can view variables"
          },
          "assets": {
            "type": "boolean",
            "description": "Whether operators can view assets"
          },
          "audit_logs": {
            "type": "boolean",
            "description": "Whether operators can view audit logs"
          },
          "triggers": {
            "type": "boolean",
            "description": "Whether operators can view triggers"
          },
          "groups": {
            "type": "boolean",
            "description": "Whether operators can view groups page"
          },
          "folders": {
            "type": "boolean",
            "description": "Whether operators can view folders page"
          },
          "workers": {
            "type": "boolean",
            "description": "Whether operators can view workers page"
          }
        }
      },
      "WorkspaceComparison": {
        "type": "object",
        "required": [
          "all_ahead_items_visible",
          "all_behind_items_visible",
          "skipped_comparison",
          "diffs",
          "summary"
        ],
        "properties": {
          "all_ahead_items_visible": {
            "type": "boolean",
            "description": "All items with changes ahead are visible by the user of the request."
          },
          "all_behind_items_visible": {
            "type": "boolean",
            "description": "All items with changes behind are visible by the user of the request."
          },
          "skipped_comparison": {
            "type": "boolean",
            "description": "Whether the comparison was skipped. This happens with old forks that where not being kept track of"
          },
          "diffs": {
            "type": "array",
            "description": "List of differences found between workspaces",
            "items": {
              "$ref": "#/components/schemas/WorkspaceItemDiff"
            }
          },
          "summary": {
            "$ref": "#/components/schemas/CompareSummary",
            "description": "Summary statistics of the comparison"
          }
        }
      },
      "WorkspaceItemDiff": {
        "type": "object",
        "required": [
          "kind",
          "path",
          "ahead",
          "behind",
          "has_changes",
          "exists_in_source",
          "exists_in_fork"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "script",
              "flow",
              "app",
              "resource",
              "variable",
              "resource_type"
            ],
            "description": "Type of the item"
          },
          "path": {
            "type": "string",
            "description": "Path of the item in the workspace"
          },
          "ahead": {
            "type": "integer",
            "description": "Number of versions source is ahead of target"
          },
          "behind": {
            "type": "integer",
            "description": "Number of versions source is behind target"
          },
          "has_changes": {
            "type": "boolean",
            "description": "Whether the item has any differences"
          },
          "exists_in_source": {
            "type": "boolean",
            "description": "If the item exists in the source workspace"
          },
          "exists_in_fork": {
            "type": "boolean",
            "description": "If the item exists in the fork workspace"
          }
        }
      },
      "CompareSummary": {
        "type": "object",
        "required": [
          "total_diffs",
          "total_ahead",
          "total_behind",
          "scripts_changed",
          "flows_changed",
          "apps_changed",
          "resources_changed",
          "variables_changed",
          "resource_types_changed",
          "folders_changed",
          "conflicts"
        ],
        "properties": {
          "total_diffs": {
            "type": "integer",
            "description": "Total number of items with differences"
          },
          "total_ahead": {
            "type": "integer",
            "description": "Total number of ahead changes"
          },
          "total_behind": {
            "type": "integer",
            "description": "Total number of behind changes"
          },
          "scripts_changed": {
            "type": "integer",
            "description": "Number of scripts with differences"
          },
          "flows_changed": {
            "type": "integer",
            "description": "Number of flows with differences"
          },
          "apps_changed": {
            "type": "integer",
            "description": "Number of apps with differences"
          },
          "resources_changed": {
            "type": "integer",
            "description": "Number of resources with differences"
          },
          "variables_changed": {
            "type": "integer",
            "description": "Number of variables with differences"
          },
          "resource_types_changed": {
            "type": "integer",
            "description": "Number of resource types with differences"
          },
          "folders_changed": {
            "type": "integer",
            "description": "Number of folders with differences"
          },
          "conflicts": {
            "type": "integer",
            "description": "Number of items that are both ahead and behind (conflicts)"
          }
        }
      },
      "TeamInfo": {
        "type": "object",
        "required": [
          "team_id",
          "team_name",
          "channels"
        ],
        "properties": {
          "team_id": {
            "type": "string",
            "description": "The unique identifier of the Microsoft Teams team",
            "example": "19:abc123def456@thread.tacv2"
          },
          "team_name": {
            "type": "string",
            "description": "The display name of the Microsoft Teams team",
            "example": "Engineering Team"
          },
          "channels": {
            "type": "array",
            "description": "List of channels within the team",
            "items": {
              "$ref": "#/components/schemas/ChannelInfo"
            }
          }
        }
      },
      "ChannelInfo": {
        "type": "object",
        "required": [
          "channel_id",
          "channel_name",
          "tenant_id",
          "service_url"
        ],
        "properties": {
          "channel_id": {
            "type": "string",
            "description": "The unique identifier of the channel",
            "example": "19:channel123@thread.tacv2"
          },
          "channel_name": {
            "type": "string",
            "description": "The display name of the channel",
            "example": "General"
          },
          "tenant_id": {
            "type": "string",
            "description": "The Microsoft Teams tenant identifier",
            "example": "12345678-1234-1234-1234-123456789012"
          },
          "service_url": {
            "type": "string",
            "description": "The service URL for the channel",
            "example": "https://smba.trafficmanager.net/amer/12345678-1234-1234-1234-123456789012/"
          }
        }
      },
      "GithubInstallations": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "workspace_id": {
              "type": "string"
            },
            "installation_id": {
              "type": "number"
            },
            "account_id": {
              "type": "string"
            },
            "repositories": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "url"
                ]
              }
            },
            "total_count": {
              "type": "number",
              "description": "Total number of repositories available for this installation"
            },
            "per_page": {
              "type": "number",
              "description": "Number of repositories loaded per page"
            },
            "error": {
              "type": "string",
              "description": "Error message if token retrieval failed"
            }
          },
          "required": [
            "installation_id",
            "account_id",
            "repositories",
            "total_count",
            "per_page"
          ]
        }
      },
      "WorkspaceGithubInstallation": {
        "type": "object",
        "properties": {
          "account_id": {
            "type": "string"
          },
          "installation_id": {
            "type": "number"
          }
        },
        "required": [
          "account_id",
          "installation_id"
        ]
      },
      "S3Object": {
        "type": "object",
        "properties": {
          "s3": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "storage": {
            "type": "string"
          },
          "presigned": {
            "type": "string"
          }
        },
        "required": [
          "s3"
        ]
      },
      "TeamsChannel": {
        "type": "object",
        "required": [
          "team_id",
          "team_name",
          "channel_id",
          "channel_name"
        ],
        "properties": {
          "team_id": {
            "type": "string",
            "description": "Microsoft Teams team ID",
            "minLength": 1
          },
          "team_name": {
            "type": "string",
            "description": "Microsoft Teams team name",
            "minLength": 1
          },
          "channel_id": {
            "type": "string",
            "description": "Microsoft Teams channel ID",
            "minLength": 1
          },
          "channel_name": {
            "type": "string",
            "description": "Microsoft Teams channel name",
            "minLength": 1
          }
        }
      },
      "AssetUsageKind": {
        "type": "string",
        "enum": [
          "script",
          "flow",
          "job"
        ]
      },
      "AssetUsageAccessType": {
        "type": "string",
        "enum": [
          "r",
          "w",
          "rw"
        ],
        "nullable": true
      },
      "AssetKind": {
        "type": "string",
        "enum": [
          "s3object",
          "resource",
          "ducklake",
          "datatable"
        ]
      },
      "Asset": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/AssetKind"
          }
        },
        "required": [
          "path",
          "kind"
        ]
      },
      "ProtectionRuleset": {
        "type": "object",
        "description": "A workspace protection rule defining restrictions and bypass permissions",
        "required": [
          "name",
          "rules",
          "bypass_groups",
          "bypass_users"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique name for the protection rule",
            "example": "Production Protection"
          },
          "workspace_id": {
            "type": "string"
          },
          "rules": {
            "$ref": "#/components/schemas/ProtectionRules"
          },
          "bypass_groups": {
            "$ref": "#/components/schemas/RuleBypasserGroups"
          },
          "bypass_users": {
            "$ref": "#/components/schemas/RuleBypasserUsers"
          }
        }
      },
      "ProtectionRules": {
        "type": "array",
        "description": "Configuration of protection restrictions",
        "items": {
          "$ref": "#/components/schemas/ProtectionRuleKind"
        }
      },
      "ProtectionRuleKind": {
        "type": "string",
        "enum": [
          "DisableDirectDeployment",
          "DisableWorkspaceForking"
        ]
      },
      "RuleBypasserGroups": {
        "type": "array",
        "description": "Groups that can bypass this ruleset",
        "items": {
          "type": "string"
        }
      },
      "RuleBypasserUsers": {
        "type": "array",
        "description": "Users that can bypass this ruleset",
        "items": {
          "type": "string"
        }
      },
      "NativeServiceName": {
        "type": "string",
        "enum": [
          "nextcloud"
        ]
      },
      "NativeTrigger": {
        "type": "object",
        "description": "A native trigger stored in Windmill",
        "properties": {
          "external_id": {
            "type": "string",
            "description": "The unique identifier from the external service"
          },
          "workspace_id": {
            "type": "string",
            "description": "The workspace this trigger belongs to"
          },
          "service_name": {
            "$ref": "#/components/schemas/NativeServiceName"
          },
          "script_path": {
            "type": "string",
            "description": "The path to the script or flow that will be triggered"
          },
          "is_flow": {
            "type": "boolean",
            "description": "Whether the trigger targets a flow (true) or a script (false)"
          },
          "service_config": {
            "type": "object",
            "description": "Configuration for the trigger including event_type and service_config",
            "additionalProperties": true
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "Error message if the trigger is in an error state"
          }
        },
        "required": [
          "external_id",
          "workspace_id",
          "service_name",
          "script_path",
          "is_flow",
          "service_config"
        ]
      },
      "NativeTriggerWithExternal": {
        "type": "object",
        "description": "Full trigger response containing both Windmill data and external service data",
        "properties": {
          "external_id": {
            "type": "string",
            "description": "The unique identifier from the external service"
          },
          "workspace_id": {
            "type": "string",
            "description": "The workspace this trigger belongs to"
          },
          "service_name": {
            "$ref": "#/components/schemas/NativeServiceName"
          },
          "script_path": {
            "type": "string",
            "description": "The path to the script or flow that will be triggered"
          },
          "is_flow": {
            "type": "boolean",
            "description": "Whether the trigger targets a flow (true) or a script (false)"
          },
          "service_config": {
            "type": "object",
            "description": "Configuration for the trigger including event_type and service_config",
            "additionalProperties": true
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "Error message if the trigger is in an error state"
          },
          "external_data": {
            "type": "object",
            "description": "Configuration data from the external service",
            "additionalProperties": true
          }
        },
        "required": [
          "external_id",
          "workspace_id",
          "service_name",
          "script_path",
          "is_flow",
          "service_config",
          "external_data"
        ]
      },
      "WorkspaceIntegrations": {
        "type": "object",
        "properties": {
          "service_name": {
            "$ref": "#/components/schemas/NativeServiceName"
          },
          "oauth_data": {
            "nullable": true,
            "$ref": "#/components/schemas/WorkspaceOAuthConfig"
          }
        },
        "required": [
          "service_name"
        ]
      },
      "WorkspaceOAuthConfig": {
        "type": "object",
        "properties": {
          "client_id": {
            "type": "string",
            "description": "The OAuth client ID for the workspace"
          },
          "client_secret": {
            "type": "string",
            "description": "The OAuth client secret for the workspace"
          },
          "base_url": {
            "type": "string",
            "format": "uri",
            "description": "The base URL of the workspace"
          },
          "redirect_uri": {
            "type": "string",
            "format": "uri",
            "description": "The OAuth redirect URI"
          }
        },
        "required": [
          "client_id",
          "client_secret",
          "base_url",
          "redirect_uri"
        ]
      },
      "WebhookEvent": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "webhook"
            ]
          },
          "request_type": {
            "$ref": "#/components/schemas/WebhookRequestType"
          }
        },
        "required": [
          "type",
          "request_type"
        ]
      },
      "WebhookRequestType": {
        "type": "string",
        "description": "The type of webhook request (define possible values here)",
        "enum": [
          "async",
          "sync"
        ]
      },
      "RedirectUri": {
        "type": "object",
        "properties": {
          "redirect_uri": {
            "type": "string"
          }
        },
        "required": [
          "redirect_uri"
        ]
      },
      "NativeTriggerData": {
        "type": "object",
        "description": "Data for creating or updating a native trigger",
        "properties": {
          "script_path": {
            "type": "string",
            "description": "The path to the script or flow that will be triggered"
          },
          "is_flow": {
            "type": "boolean",
            "description": "Whether the trigger targets a flow (true) or a script (false)"
          },
          "service_config": {
            "type": "object",
            "description": "Service-specific configuration (e.g., event types, filters)",
            "additionalProperties": true
          }
        },
        "required": [
          "script_path",
          "is_flow",
          "service_config"
        ]
      },
      "CreateTriggerResponse": {
        "type": "object",
        "description": "Response returned when a native trigger is created",
        "properties": {
          "external_id": {
            "type": "string",
            "description": "The external ID of the created trigger from the external service"
          }
        },
        "required": [
          "external_id"
        ]
      },
      "SyncResult": {
        "type": "object",
        "properties": {
          "already_in_sync": {
            "type": "boolean"
          },
          "added_count": {
            "type": "integer"
          },
          "added_triggers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "total_external": {
            "type": "integer"
          },
          "total_windmill": {
            "type": "integer"
          }
        },
        "required": [
          "already_in_sync",
          "added_count",
          "added_triggers",
          "total_external",
          "total_windmill"
        ]
      },
      "NextCloudEventType": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "path"
        ]
      },
      "schemas-StaticTransform": {
        "type": "object",
        "description": "Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource'",
        "properties": {
          "value": {
            "description": "The static value. For resources, use format '$res:path/to/resource'"
          },
          "type": {
            "type": "string",
            "enum": [
              "static"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "schemas-JavascriptTransform": {
        "type": "object",
        "description": "JavaScript expression evaluated at runtime. Can reference previous step results via 'results.step_id' or flow inputs via 'flow_input.property'. Inside loops, use 'flow_input.iter.value' for the current iteration value",
        "properties": {
          "expr": {
            "type": "string",
            "description": "JavaScript expression returning the value. Available variables - results (object with all previous step results), flow_input (flow inputs), flow_input.iter (in loops)"
          },
          "type": {
            "type": "string",
            "enum": [
              "javascript"
            ]
          }
        },
        "required": [
          "expr",
          "type"
        ]
      },
      "schemas-AiTransform": {
        "type": "object",
        "description": "Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter.",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "ai"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "schemas-InputTransform": {
        "description": "Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs",
        "oneOf": [
          {
            "$ref": "#/components/schemas/schemas-StaticTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-JavascriptTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-AiTransform"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "static": "#/components/schemas/schemas-StaticTransform",
            "javascript": "#/components/schemas/schemas-JavascriptTransform",
            "ai": "#/components/schemas/schemas-AiTransform"
          }
        }
      },
      "schemas-RawScript": {
        "type": "object",
        "description": "Inline script with code defined directly in the flow. Use 'bun' as default language if unspecified. The script receives arguments from input_transforms",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments",
            "additionalProperties": {
              "$ref": "#/components/schemas/schemas-InputTransform"
            }
          },
          "content": {
            "type": "string",
            "description": "The script source code. Should export a 'main' function"
          },
          "language": {
            "type": "string",
            "description": "Programming language for this script",
            "enum": [
              "deno",
              "bun",
              "python3",
              "go",
              "bash",
              "powershell",
              "postgresql",
              "mysql",
              "bigquery",
              "snowflake",
              "mssql",
              "oracledb",
              "graphql",
              "nativets",
              "php",
              "rust",
              "ansible",
              "csharp",
              "nu",
              "java",
              "ruby",
              "duckdb"
            ]
          },
          "path": {
            "type": "string",
            "description": "Optional path for saving this script"
          },
          "lock": {
            "type": "string",
            "description": "Lock file content for dependencies"
          },
          "type": {
            "type": "string",
            "enum": [
              "rawscript"
            ]
          },
          "tag": {
            "type": "string",
            "description": "Worker group tag for execution routing"
          },
          "concurrent_limit": {
            "type": "number",
            "description": "Maximum concurrent executions of this script"
          },
          "concurrency_time_window_s": {
            "type": "number",
            "description": "Time window for concurrent_limit"
          },
          "custom_concurrency_key": {
            "type": "string",
            "description": "Custom key for grouping concurrent executions"
          },
          "is_trigger": {
            "type": "boolean",
            "description": "If true, this script is a trigger that can start the flow"
          },
          "assets": {
            "type": "array",
            "description": "External resources this script accesses (S3 objects, resources, etc.)",
            "items": {
              "type": "object",
              "required": [
                "path",
                "kind"
              ],
              "properties": {
                "path": {
                  "type": "string",
                  "description": "Path to the asset"
                },
                "kind": {
                  "type": "string",
                  "description": "Type of asset",
                  "enum": [
                    "s3object",
                    "resource",
                    "ducklake",
                    "datatable"
                  ]
                },
                "access_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "Access level for this asset",
                  "enum": [
                    "r",
                    "w",
                    "rw"
                  ]
                },
                "alt_access_type": {
                  "type": "string",
                  "nullable": true,
                  "description": "Alternative access level",
                  "enum": [
                    "r",
                    "w",
                    "rw"
                  ]
                }
              }
            }
          }
        },
        "required": [
          "type",
          "content",
          "language",
          "input_transforms"
        ]
      },
      "schemas-PathScript": {
        "type": "object",
        "description": "Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments",
            "additionalProperties": {
              "$ref": "#/components/schemas/schemas-InputTransform"
            }
          },
          "path": {
            "type": "string",
            "description": "Path to the script in the workspace (e.g., 'f/scripts/send_email')"
          },
          "hash": {
            "type": "string",
            "description": "Optional specific version hash of the script to use"
          },
          "type": {
            "type": "string",
            "enum": [
              "script"
            ]
          },
          "tag_override": {
            "type": "string",
            "description": "Override the script's default worker group tag"
          },
          "is_trigger": {
            "type": "boolean",
            "description": "If true, this script is a trigger that can start the flow"
          }
        },
        "required": [
          "type",
          "path",
          "input_transforms"
        ]
      },
      "schemas-PathFlow": {
        "type": "object",
        "description": "Reference to an existing flow by path. Use this to call another flow as a subflow",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Map of parameter names to their values (static or JavaScript expressions). These become the subflow's input arguments",
            "additionalProperties": {
              "$ref": "#/components/schemas/schemas-InputTransform"
            }
          },
          "path": {
            "type": "string",
            "description": "Path to the flow in the workspace (e.g., 'f/flows/process_user')"
          },
          "type": {
            "type": "string",
            "enum": [
              "flow"
            ]
          }
        },
        "required": [
          "type",
          "path",
          "input_transforms"
        ]
      },
      "schemas-FlowModule": {
        "type": "object",
        "description": "A single step in a flow. Can be a script, subflow, loop, or branch",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for this step. Used to reference results via 'results.step_id'. Must be a valid identifier (alphanumeric, underscore, hyphen)"
          },
          "value": {
            "$ref": "#/components/schemas/schemas-FlowModuleValue"
          },
          "stop_after_if": {
            "description": "Early termination condition evaluated after this step completes",
            "$ref": "#/components/schemas/schemas-StopAfterIf"
          },
          "stop_after_all_iters_if": {
            "description": "For loops only - early termination condition evaluated after all iterations complete",
            "$ref": "#/components/schemas/schemas-StopAfterIf"
          },
          "skip_if": {
            "type": "object",
            "description": "Conditionally skip this step based on previous results or flow inputs",
            "properties": {
              "expr": {
                "type": "string",
                "description": "JavaScript expression that returns true to skip. Can use 'flow_input' or 'results.<step_id>'"
              }
            },
            "required": [
              "expr"
            ]
          },
          "sleep": {
            "description": "Delay before executing this step (in seconds or as expression)",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "cache_ttl": {
            "type": "number",
            "description": "Cache duration in seconds for this step's results"
          },
          "cache_ignore_s3_path": {
            "type": "boolean"
          },
          "timeout": {
            "description": "Maximum execution time in seconds (static value or expression)",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "delete_after_use": {
            "type": "boolean",
            "description": "If true, this step's result is deleted after use to save memory"
          },
          "summary": {
            "type": "string",
            "description": "Short description of what this step does"
          },
          "mock": {
            "type": "object",
            "description": "Mock configuration for testing without executing the actual step",
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "If true, return mock value instead of executing"
              },
              "return_value": {
                "description": "Value to return when mocked"
              }
            }
          },
          "suspend": {
            "type": "object",
            "description": "Configuration for approval/resume steps that wait for user input",
            "properties": {
              "required_events": {
                "type": "integer",
                "description": "Number of approvals required before continuing"
              },
              "timeout": {
                "type": "integer",
                "description": "Timeout in seconds before auto-continuing or canceling"
              },
              "resume_form": {
                "type": "object",
                "description": "Form schema for collecting input when resuming",
                "properties": {
                  "schema": {
                    "type": "object",
                    "description": "JSON Schema for the resume form"
                  }
                }
              },
              "user_auth_required": {
                "type": "boolean",
                "description": "If true, only authenticated users can approve"
              },
              "user_groups_required": {
                "description": "Expression or list of groups that can approve",
                "$ref": "#/components/schemas/schemas-InputTransform"
              },
              "self_approval_disabled": {
                "type": "boolean",
                "description": "If true, the user who started the flow cannot approve"
              },
              "hide_cancel": {
                "type": "boolean",
                "description": "If true, hide the cancel button on the approval form"
              },
              "continue_on_disapprove_timeout": {
                "type": "boolean",
                "description": "If true, continue flow on timeout instead of canceling"
              }
            }
          },
          "priority": {
            "type": "number",
            "description": "Execution priority for this step (higher numbers run first)"
          },
          "continue_on_error": {
            "type": "boolean",
            "description": "If true, flow continues even if this step fails"
          },
          "retry": {
            "description": "Retry configuration if this step fails",
            "$ref": "#/components/schemas/schemas-Retry"
          }
        },
        "required": [
          "value",
          "id"
        ]
      },
      "schemas-ForloopFlow": {
        "type": "object",
        "description": "Executes nested modules in a loop over an iterator. Inside the loop, use 'flow_input.iter.value' to access the current iteration value, and 'flow_input.iter.index' for the index. Supports parallel execution for better performance on I/O-bound operations",
        "properties": {
          "modules": {
            "type": "array",
            "description": "Steps to execute for each iteration. These can reference the iteration value via 'flow_input.iter.value'",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "iterator": {
            "description": "JavaScript expression that returns an array to iterate over. Can reference 'results.step_id' or 'flow_input'",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "skip_failures": {
            "type": "boolean",
            "description": "If true, iteration failures don't stop the loop. Failed iterations return null"
          },
          "type": {
            "type": "string",
            "enum": [
              "forloopflow"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency"
          },
          "parallelism": {
            "description": "Maximum number of concurrent iterations when parallel=true. Limits resource usage. Can be static number or expression",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "squash": {
            "type": "boolean"
          }
        },
        "required": [
          "modules",
          "iterator",
          "skip_failures",
          "type"
        ]
      },
      "schemas-WhileloopFlow": {
        "type": "object",
        "description": "Executes nested modules repeatedly while a condition is true. The loop checks the condition after each iteration. Use stop_after_if on modules to control loop termination",
        "properties": {
          "modules": {
            "type": "array",
            "description": "Steps to execute in each iteration. Use stop_after_if to control when the loop ends",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "skip_failures": {
            "type": "boolean",
            "description": "If true, iteration failures don't stop the loop. Failed iterations return null"
          },
          "type": {
            "type": "string",
            "enum": [
              "whileloopflow"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, iterations run concurrently (use with caution in while loops)"
          },
          "parallelism": {
            "description": "Maximum number of concurrent iterations when parallel=true",
            "$ref": "#/components/schemas/schemas-InputTransform"
          },
          "squash": {
            "type": "boolean"
          }
        },
        "required": [
          "modules",
          "skip_failures",
          "type"
        ]
      },
      "schemas-BranchOne": {
        "type": "object",
        "description": "Conditional branching where only the first matching branch executes. Branches are evaluated in order, and the first one with a true expression runs. If no branches match, the default branch executes",
        "properties": {
          "branches": {
            "type": "array",
            "description": "Array of branches to evaluate in order. The first branch with expr evaluating to true executes",
            "items": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "description": "Short description of this branch condition"
                },
                "expr": {
                  "type": "string",
                  "description": "JavaScript expression that returns boolean. Can use 'results.step_id' or 'flow_input'. First true expr wins"
                },
                "modules": {
                  "type": "array",
                  "description": "Steps to execute if this branch's expr is true",
                  "items": {
                    "$ref": "#/components/schemas/schemas-FlowModule"
                  }
                }
              },
              "required": [
                "modules",
                "expr"
              ]
            }
          },
          "default": {
            "type": "array",
            "description": "Steps to execute if no branch expressions match",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "branchone"
            ]
          }
        },
        "required": [
          "branches",
          "default",
          "type"
        ]
      },
      "schemas-BranchAll": {
        "type": "object",
        "description": "Parallel branching where all branches execute simultaneously. Unlike BranchOne, all branches run regardless of conditions. Useful for executing independent tasks concurrently",
        "properties": {
          "branches": {
            "type": "array",
            "description": "Array of branches that all execute (either in parallel or sequentially)",
            "items": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "description": "Short description of this branch's purpose"
                },
                "skip_failure": {
                  "type": "boolean",
                  "description": "If true, failure in this branch doesn't fail the entire flow"
                },
                "modules": {
                  "type": "array",
                  "description": "Steps to execute in this branch",
                  "items": {
                    "$ref": "#/components/schemas/schemas-FlowModule"
                  }
                }
              },
              "required": [
                "modules"
              ]
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "branchall"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, all branches execute concurrently. If false, they execute sequentially"
          }
        },
        "required": [
          "branches",
          "type"
        ]
      },
      "schemas-Identity": {
        "type": "object",
        "description": "Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "identity"
            ]
          },
          "flow": {
            "type": "boolean",
            "description": "If true, marks this as a flow identity (special handling)"
          }
        },
        "required": [
          "type"
        ]
      },
      "AIProviderKind": {
        "type": "string",
        "description": "Supported AI provider types",
        "enum": [
          "openai",
          "azure_openai",
          "anthropic",
          "mistral",
          "deepseek",
          "googleai",
          "groq",
          "openrouter",
          "togetherai",
          "customai",
          "aws_bedrock"
        ]
      },
      "schemas-ProviderConfig": {
        "type": "object",
        "description": "Complete AI provider configuration with resource reference and model selection",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/AIProviderKind"
          },
          "resource": {
            "type": "string",
            "description": "Resource reference in format '$res:{resource_path}' pointing to provider credentials"
          },
          "model": {
            "type": "string",
            "description": "Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229', 'gemini-pro')"
          }
        },
        "required": [
          "kind",
          "resource",
          "model"
        ]
      },
      "StaticProviderTransform": {
        "type": "object",
        "description": "Static provider configuration passed directly to the AI agent",
        "properties": {
          "value": {
            "$ref": "#/components/schemas/schemas-ProviderConfig"
          },
          "type": {
            "type": "string",
            "enum": [
              "static"
            ]
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "ProviderTransform": {
        "description": "Provider configuration - can be static (ProviderConfig), JavaScript expression, or AI-determined",
        "oneOf": [
          {
            "$ref": "#/components/schemas/StaticProviderTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-JavascriptTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-AiTransform"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "static": "#/components/schemas/StaticProviderTransform",
            "javascript": "#/components/schemas/schemas-JavascriptTransform",
            "ai": "#/components/schemas/schemas-AiTransform"
          }
        }
      },
      "MemoryOff": {
        "type": "object",
        "description": "No conversation memory/context",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "off"
            ]
          }
        },
        "required": [
          "kind"
        ]
      },
      "MemoryAuto": {
        "type": "object",
        "description": "Automatic context management",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "auto"
            ]
          },
          "context_length": {
            "type": "integer",
            "description": "Maximum number of messages to retain in context"
          },
          "memory_id": {
            "type": "string",
            "description": "Identifier for persistent memory across agent invocations"
          }
        },
        "required": [
          "kind"
        ]
      },
      "MemoryMessage": {
        "type": "object",
        "description": "A single message in conversation history",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "user",
              "assistant",
              "system"
            ]
          },
          "content": {
            "type": "string"
          }
        },
        "required": [
          "role",
          "content"
        ]
      },
      "MemoryManual": {
        "type": "object",
        "description": "Explicit message history",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "manual"
            ]
          },
          "messages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MemoryMessage"
            }
          }
        },
        "required": [
          "kind",
          "messages"
        ]
      },
      "schemas-MemoryConfig": {
        "description": "Conversation memory configuration",
        "oneOf": [
          {
            "$ref": "#/components/schemas/MemoryOff"
          },
          {
            "$ref": "#/components/schemas/MemoryAuto"
          },
          {
            "$ref": "#/components/schemas/MemoryManual"
          }
        ],
        "discriminator": {
          "propertyName": "kind",
          "mapping": {
            "off": "#/components/schemas/MemoryOff",
            "auto": "#/components/schemas/MemoryAuto",
            "manual": "#/components/schemas/MemoryManual"
          }
        }
      },
      "StaticMemoryTransform": {
        "type": "object",
        "description": "Static memory configuration passed directly to the AI agent",
        "properties": {
          "value": {
            "$ref": "#/components/schemas/schemas-MemoryConfig"
          },
          "type": {
            "type": "string",
            "enum": [
              "static"
            ]
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "MemoryTransform": {
        "description": "Memory configuration - can be static (MemoryConfig), JavaScript expression, or AI-determined",
        "oneOf": [
          {
            "$ref": "#/components/schemas/StaticMemoryTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-JavascriptTransform"
          },
          {
            "$ref": "#/components/schemas/schemas-AiTransform"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "static": "#/components/schemas/StaticMemoryTransform",
            "javascript": "#/components/schemas/schemas-JavascriptTransform",
            "ai": "#/components/schemas/schemas-AiTransform"
          }
        }
      },
      "schemas-FlowModuleValue": {
        "description": "The actual implementation of a flow step. Can be a script (inline or referenced), subflow, loop, branch, or special module type",
        "oneOf": [
          {
            "$ref": "#/components/schemas/schemas-RawScript"
          },
          {
            "$ref": "#/components/schemas/schemas-PathScript"
          },
          {
            "$ref": "#/components/schemas/schemas-PathFlow"
          },
          {
            "$ref": "#/components/schemas/schemas-ForloopFlow"
          },
          {
            "$ref": "#/components/schemas/schemas-WhileloopFlow"
          },
          {
            "$ref": "#/components/schemas/schemas-BranchOne"
          },
          {
            "$ref": "#/components/schemas/schemas-BranchAll"
          },
          {
            "$ref": "#/components/schemas/schemas-Identity"
          },
          {
            "$ref": "#/components/schemas/schemas-AiAgent"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "rawscript": "#/components/schemas/schemas-RawScript",
            "script": "#/components/schemas/schemas-PathScript",
            "flow": "#/components/schemas/schemas-PathFlow",
            "forloopflow": "#/components/schemas/schemas-ForloopFlow",
            "whileloopflow": "#/components/schemas/schemas-WhileloopFlow",
            "branchone": "#/components/schemas/schemas-BranchOne",
            "branchall": "#/components/schemas/schemas-BranchAll",
            "identity": "#/components/schemas/schemas-Identity",
            "aiagent": "#/components/schemas/schemas-AiAgent"
          }
        }
      },
      "FlowModuleTool": {
        "description": "A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module",
        "allOf": [
          {
            "type": "object",
            "properties": {
              "tool_type": {
                "type": "string",
                "enum": [
                  "flowmodule"
                ]
              }
            },
            "required": [
              "tool_type"
            ]
          },
          {
            "$ref": "#/components/schemas/schemas-FlowModuleValue"
          }
        ]
      },
      "McpToolValue": {
        "type": "object",
        "description": "Reference to an external MCP (Model Context Protocol) tool. The AI can call tools from MCP servers",
        "properties": {
          "tool_type": {
            "type": "string",
            "enum": [
              "mcp"
            ]
          },
          "resource_path": {
            "type": "string",
            "description": "Path to the MCP resource/server configuration"
          },
          "include_tools": {
            "type": "array",
            "description": "Whitelist of specific tools to include from this MCP server",
            "items": {
              "type": "string"
            }
          },
          "exclude_tools": {
            "type": "array",
            "description": "Blacklist of tools to exclude from this MCP server",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "tool_type",
          "resource_path"
        ]
      },
      "WebsearchToolValue": {
        "type": "object",
        "description": "A tool implemented as a websearch tool. The AI can call this like any other websearch tool",
        "properties": {
          "tool_type": {
            "type": "string",
            "enum": [
              "websearch"
            ]
          }
        },
        "required": [
          "tool_type"
        ]
      },
      "ToolValue": {
        "description": "The implementation of a tool. Can be a flow module (script/flow) or an MCP tool reference",
        "oneOf": [
          {
            "$ref": "#/components/schemas/FlowModuleTool"
          },
          {
            "$ref": "#/components/schemas/McpToolValue"
          },
          {
            "$ref": "#/components/schemas/WebsearchToolValue"
          }
        ],
        "discriminator": {
          "propertyName": "tool_type",
          "mapping": {
            "flowmodule": "#/components/schemas/FlowModuleTool",
            "mcp": "#/components/schemas/McpToolValue",
            "websearch": "#/components/schemas/WebsearchToolValue"
          }
        }
      },
      "AgentTool": {
        "type": "object",
        "description": "A tool available to an AI agent. Can be a flow module or an external MCP (Model Context Protocol) tool",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for this tool. Cannot contain spaces - use underscores instead (e.g., 'get_user_data' not 'get user data')"
          },
          "summary": {
            "type": "string",
            "description": "Short description of what this tool does (shown to the AI)"
          },
          "value": {
            "$ref": "#/components/schemas/ToolValue"
          }
        },
        "required": [
          "id",
          "value"
        ]
      },
      "schemas-AiAgent": {
        "type": "object",
        "description": "AI agent step that can use tools to accomplish tasks. The agent receives inputs and can call any of its configured tools to complete the task",
        "properties": {
          "input_transforms": {
            "type": "object",
            "description": "Input parameters for the AI agent mapped to their values",
            "properties": {
              "provider": {
                "$ref": "#/components/schemas/ProviderTransform"
              },
              "output_type": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Output format type.\nValid values: 'text' (default) - plain text response, 'image' - image generation\n"
              },
              "user_message": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "The user's prompt/message to the AI agent. Supports variable interpolation with flow.input syntax."
              },
              "system_prompt": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "System instructions that guide the AI's behavior, persona, and response style. Optional."
              },
              "streaming": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Boolean. If true, stream the AI response incrementally.\nStreaming events include: token_delta, tool_call, tool_call_arguments, tool_execution, tool_result\n"
              },
              "memory": {
                "$ref": "#/components/schemas/MemoryTransform"
              },
              "output_schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "JSON Schema object defining structured output format. Used when you need the AI to return data in a specific shape.\nSupports standard JSON Schema properties: type, properties, required, items, enum, pattern, minLength, maxLength, minimum, maximum, etc.\nExample: { type: 'object', properties: { name: { type: 'string' }, age: { type: 'integer' } }, required: ['name'] }\n"
              },
              "user_images": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Array of image references for vision-capable models.\nFormat: Array<{ bucket: string, key: string }> - S3 object references\nExample: [{ bucket: 'my-bucket', key: 'images/photo.jpg' }]\n"
              },
              "max_completion_tokens": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Integer. Maximum number of tokens the AI will generate in its response.\nRange: 1 to 4,294,967,295. Typical values: 256-4096 for most use cases.\n"
              },
              "temperature": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/schemas-InputTransform"
                  }
                ],
                "description": "Float. Controls randomness/creativity of responses.\nRange: 0.0 to 2.0 (provider-dependent)\n- 0.0 = deterministic, focused responses\n- 0.7 = balanced (common default)\n- 1.0+ = more creative/random\n"
              }
            },
            "required": [
              "provider",
              "user_message",
              "output_type"
            ]
          },
          "tools": {
            "type": "array",
            "description": "Array of tools the agent can use. The agent decides which tools to call based on the task",
            "items": {
              "$ref": "#/components/schemas/AgentTool"
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "aiagent"
            ]
          },
          "parallel": {
            "type": "boolean",
            "description": "If true, the agent can execute multiple tool calls in parallel"
          }
        },
        "required": [
          "tools",
          "type",
          "input_transforms"
        ]
      },
      "schemas-StopAfterIf": {
        "type": "object",
        "description": "Early termination condition for a module",
        "properties": {
          "skip_if_stopped": {
            "type": "boolean",
            "description": "If true, following steps are skipped when this condition triggers"
          },
          "expr": {
            "type": "string",
            "description": "JavaScript expression evaluated after the module runs. Can use 'result' (step's result) or 'flow_input'. Return true to stop"
          },
          "error_message": {
            "type": "string",
            "description": "Custom error message shown when stopping"
          }
        },
        "required": [
          "expr"
        ]
      },
      "RetryIf": {
        "type": "object",
        "description": "Conditional retry based on error or result",
        "properties": {
          "expr": {
            "type": "string",
            "description": "JavaScript expression that returns true to retry. Has access to 'result' and 'error' variables"
          }
        },
        "required": [
          "expr"
        ]
      },
      "schemas-Retry": {
        "type": "object",
        "description": "Retry configuration for failed module executions",
        "properties": {
          "constant": {
            "type": "object",
            "description": "Retry with constant delay between attempts",
            "properties": {
              "attempts": {
                "type": "integer",
                "description": "Number of retry attempts"
              },
              "seconds": {
                "type": "integer",
                "description": "Seconds to wait between retries"
              }
            }
          },
          "exponential": {
            "type": "object",
            "description": "Retry with exponential backoff (delay doubles each time)",
            "properties": {
              "attempts": {
                "type": "integer",
                "description": "Number of retry attempts"
              },
              "multiplier": {
                "type": "integer",
                "description": "Multiplier for exponential backoff"
              },
              "seconds": {
                "type": "integer",
                "minimum": 1,
                "description": "Initial delay in seconds"
              },
              "random_factor": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Random jitter percentage (0-100) to avoid thundering herd"
              }
            }
          },
          "retry_if": {
            "$ref": "#/components/schemas/RetryIf"
          }
        }
      },
      "schemas-FlowNote": {
        "type": "object",
        "description": "A sticky note attached to a flow for documentation and annotation",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the note"
          },
          "text": {
            "type": "string",
            "description": "Content of the note"
          },
          "position": {
            "type": "object",
            "description": "Position of the note in the flow editor",
            "properties": {
              "x": {
                "type": "number",
                "description": "X coordinate"
              },
              "y": {
                "type": "number",
                "description": "Y coordinate"
              }
            },
            "required": [
              "x",
              "y"
            ]
          },
          "size": {
            "type": "object",
            "description": "Size of the note in the flow editor",
            "properties": {
              "width": {
                "type": "number",
                "description": "Width in pixels"
              },
              "height": {
                "type": "number",
                "description": "Height in pixels"
              }
            },
            "required": [
              "width",
              "height"
            ]
          },
          "color": {
            "type": "string",
            "description": "Color of the note (e.g., \"yellow\", \"#ffff00\")"
          },
          "type": {
            "type": "string",
            "enum": [
              "free",
              "group"
            ],
            "description": "Type of note - 'free' for standalone notes, 'group' for notes that group other nodes"
          },
          "locked": {
            "type": "boolean",
            "default": false,
            "description": "Whether the note is locked and cannot be edited or moved"
          },
          "contained_node_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "For group notes, the IDs of nodes contained within this group"
          }
        },
        "required": [
          "id",
          "text",
          "color",
          "type"
        ]
      },
      "schemas-FlowValue": {
        "type": "object",
        "description": "The flow structure containing modules and optional preprocessor/failure handlers",
        "properties": {
          "modules": {
            "type": "array",
            "description": "Array of steps that execute in sequence. Each step can be a script, subflow, loop, or branch",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowModule"
            }
          },
          "failure_module": {
            "description": "Special module that executes when the flow fails. Receives error object with message, name, stack, and step_id. Must have id 'failure'. Only supports script/rawscript types",
            "$ref": "#/components/schemas/schemas-FlowModule"
          },
          "preprocessor_module": {
            "description": "Special module that runs before the first step on external triggers. Must have id 'preprocessor'. Only supports script/rawscript types. Cannot reference other step results",
            "$ref": "#/components/schemas/schemas-FlowModule"
          },
          "same_worker": {
            "type": "boolean",
            "description": "If true, all steps run on the same worker for better performance"
          },
          "concurrent_limit": {
            "type": "number",
            "description": "Maximum number of concurrent executions of this flow"
          },
          "concurrency_key": {
            "type": "string",
            "description": "Expression to group concurrent executions (e.g., by user ID)"
          },
          "concurrency_time_window_s": {
            "type": "number",
            "description": "Time window in seconds for concurrent_limit"
          },
          "debounce_delay_s": {
            "type": "number",
            "description": "Delay in seconds to debounce flow executions"
          },
          "debounce_key": {
            "type": "string",
            "description": "Expression to group debounced executions"
          },
          "debounce_args_to_accumulate": {
            "type": "array",
            "description": "Arguments to accumulate across debounced executions",
            "items": {
              "type": "string"
            }
          },
          "max_total_debouncing_time": {
            "type": "number",
            "description": "Maximum total time in seconds that a job can be debounced"
          },
          "max_total_debounces_amount": {
            "type": "number",
            "description": "Maximum number of times a job can be debounced"
          },
          "skip_expr": {
            "type": "string",
            "description": "JavaScript expression to conditionally skip the entire flow"
          },
          "cache_ttl": {
            "type": "number",
            "description": "Cache duration in seconds for flow results"
          },
          "cache_ignore_s3_path": {
            "type": "boolean"
          },
          "flow_env": {
            "type": "object",
            "description": "Environment variables available to all steps",
            "additionalProperties": {
              "type": "string"
            }
          },
          "priority": {
            "type": "number",
            "description": "Execution priority (higher numbers run first)"
          },
          "early_return": {
            "type": "string",
            "description": "JavaScript expression to return early from the flow"
          },
          "chat_input_enabled": {
            "type": "boolean",
            "description": "Whether this flow accepts chat-style input"
          },
          "notes": {
            "type": "array",
            "description": "Sticky notes attached to the flow",
            "items": {
              "$ref": "#/components/schemas/schemas-FlowNote"
            }
          }
        },
        "required": [
          "modules"
        ]
      },
      "schemas-FlowStatusModule": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "WaitingForPriorSteps",
              "WaitingForEvents",
              "WaitingForExecutor",
              "InProgress",
              "Success",
              "Failure"
            ]
          },
          "id": {
            "type": "string"
          },
          "job": {
            "type": "string",
            "format": "uuid"
          },
          "count": {
            "type": "integer"
          },
          "progress": {
            "type": "integer"
          },
          "iterator": {
            "type": "object",
            "properties": {
              "index": {
                "type": "integer"
              },
              "itered": {
                "type": "array",
                "items": {}
              },
              "itered_len": {
                "type": "integer"
              },
              "args": {}
            }
          },
          "flow_jobs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "flow_jobs_success": {
            "type": "array",
            "items": {
              "type": "boolean"
            }
          },
          "flow_jobs_duration": {
            "type": "object",
            "properties": {
              "started_at": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "duration_ms": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              }
            }
          },
          "branch_chosen": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "branch",
                  "default"
                ]
              },
              "branch": {
                "type": "integer"
              }
            },
            "required": [
              "type"
            ]
          },
          "branchall": {
            "type": "object",
            "properties": {
              "branch": {
                "type": "integer"
              },
              "len": {
                "type": "integer"
              }
            },
            "required": [
              "branch",
              "len"
            ]
          },
          "approvers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "resume_id": {
                  "type": "integer"
                },
                "approver": {
                  "type": "string"
                }
              },
              "required": [
                "resume_id",
                "approver"
              ]
            }
          },
          "failed_retries": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "skipped": {
            "type": "boolean"
          },
          "agent_actions": {
            "type": "array",
            "items": {
              "type": "object",
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "job_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "function_name": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "tool_call"
                      ]
                    },
                    "module_id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "job_id",
                    "function_name",
                    "type",
                    "module_id"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "call_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "function_name": {
                      "type": "string"
                    },
                    "resource_path": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "mcp_tool_call"
                      ]
                    },
                    "arguments": {
                      "type": "object"
                    }
                  },
                  "required": [
                    "call_id",
                    "function_name",
                    "resource_path",
                    "type"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "web_search"
                      ]
                    }
                  },
                  "required": [
                    "type"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "message"
                      ]
                    }
                  },
                  "required": [
                    "content",
                    "type"
                  ]
                }
              ]
            }
          },
          "agent_actions_success": {
            "type": "array",
            "items": {
              "type": "boolean"
            }
          }
        },
        "required": [
          "type"
        ]
      }
    }
  }
}