diff --git a/backend/windmill-api/openapi-deref.json b/backend/windmill-api/openapi-deref.json index fc711cbbf1..ae3d54558e 100644 --- a/backend/windmill-api/openapi-deref.json +++ b/backend/windmill-api/openapi-deref.json @@ -1,7 +1,7 @@ { "openapi": "3.0.3", "info": { - "version": "1.520.1", + "version": "1.633.1", "title": "Windmill API", "contact": { "name": "Windmill Team", @@ -55,6 +55,83 @@ } } }, + "/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", @@ -97,6 +174,59 @@ } } }, + "/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", @@ -294,6 +424,121 @@ } } }, + "/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)", @@ -853,6 +1098,45 @@ } } }, + "/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)", @@ -888,6 +1172,41 @@ } } }, + "/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", @@ -895,6 +1214,18 @@ "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", @@ -975,6 +1306,32 @@ } } }, + "/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)", @@ -1039,6 +1396,84 @@ } } }, + "/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", @@ -1122,35 +1557,43 @@ } } }, - "/settings/databases_exist": { + "/settings/refresh_custom_instance_user_pwd": { "post": { - "summary": "checks that all given databases exist or else return the ones that don't", - "operationId": "databasesExist", + "summary": "Refreshes the password for the custom_instance_user", + "operationId": "refreshCustomInstanceUserPwd", "tags": [ "setting" ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" + "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": "databases that do not exist", + "description": "Statuses of all custom instance dbs", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/CustomInstanceDb" } } } @@ -1159,13 +1602,28 @@ } } }, - "/settings/create_ducklake_database/{name}": { + "/settings/setup_custom_instance_pg_database/{name}": { "post": { - "summary": "Runs CREATE DATABASE on the Windmill Postgres and grants access to the ducklake_user", - "operationId": "createDucklakeDatabase", + "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", @@ -1182,7 +1640,9 @@ "description": "status", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/CustomInstanceDb" + } } } } @@ -1607,6 +2067,27 @@ } } }, + "/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", @@ -1760,6 +2241,158 @@ } } }, + "/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)", @@ -1829,6 +2462,9 @@ "properties": { "progress": { "type": "integer" + }, + "skipped_all": { + "type": "boolean" } } } @@ -1853,6 +2489,9 @@ "properties": { "progress": { "type": "integer" + }, + "skipped_all": { + "type": "boolean" } } } @@ -1939,9 +2578,6 @@ "endpoint_sync": { "type": "string" }, - "endpoint_openai_sync": { - "type": "string" - }, "summary": { "type": "string" }, @@ -1956,7 +2592,6 @@ "workspace", "endpoint_async", "endpoint_sync", - "endpoint_openai_sync", "summary", "kind" ] @@ -2363,6 +2998,10 @@ }, "operator": { "type": "boolean" + }, + "parent_workspace_id": { + "type": "string", + "nullable": true } }, "required": [ @@ -2559,6 +3198,14 @@ "parameters": [ { "$ref": "#/components/parameters/WorkspaceId" + }, + { + "name": "only_delete_forks", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { @@ -2827,6 +3474,76 @@ } } }, + "/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", @@ -2959,6 +3676,12 @@ "slack_command_script": { "type": "string" }, + "slack_oauth_client_id": { + "type": "string" + }, + "slack_oauth_client_secret": { + "type": "string" + }, "teams_team_id": { "type": "string" }, @@ -2968,14 +3691,11 @@ "teams_team_name": { "type": "string" }, - "auto_invite_domain": { + "teams_team_guid": { "type": "string" }, - "auto_invite_operator": { - "type": "boolean" - }, - "auto_add": { - "type": "boolean" + "auto_invite": { + "$ref": "#/components/schemas/AutoInviteConfig" }, "plan": { "type": "string" @@ -2993,13 +3713,10 @@ "$ref": "#/components/schemas/AIConfig" }, "error_handler": { - "type": "string" + "$ref": "#/components/schemas/ErrorHandlerConfig" }, - "error_handler_extra_args": { - "$ref": "#/components/schemas/ScriptArgs" - }, - "error_handler_muted_on_cancel": { - "type": "boolean" + "success_handler": { + "$ref": "#/components/schemas/SuccessHandlerConfig" }, "large_file_storage": { "$ref": "#/components/schemas/LargeFileStorage" @@ -3007,6 +3724,9 @@ "ducklake": { "$ref": "#/components/schemas/DucklakeSettings" }, + "datatable": { + "$ref": "#/components/schemas/DataTableSettings" + }, "git_sync": { "$ref": "#/components/schemas/WorkspaceGitSyncSettings" }, @@ -3027,11 +3747,12 @@ }, "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." } - }, - "required": [ - "error_handler_muted_on_cancel" - ] + } } } } @@ -3106,6 +3827,14 @@ "parameters": [ { "$ref": "#/components/parameters/WorkspaceId" + }, + { + "name": "skip_subscription_fetch", + "in": "query", + "description": "skip fetching subscription status from stripe", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -3127,11 +3856,18 @@ }, "status": { "type": "string" + }, + "is_past_due": { + "type": "boolean" + }, + "max_tolerated_executions": { + "type": "number" } }, "required": [ "premium", - "owner" + "owner", + "is_past_due" ] } } @@ -3215,6 +3951,142 @@ } } }, + "/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", @@ -3257,6 +4129,114 @@ } } }, + "/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", @@ -3309,6 +4289,24 @@ "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": { @@ -3317,16 +4315,34 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "team_name": { - "type": "string" - }, - "team_id": { - "type": "string" + "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." } } } @@ -3338,7 +4354,7 @@ }, "/w/{workspace}/workspaces/available_teams_channels": { "get": { - "summary": "list available teams channels", + "summary": "list available channels for a specific team", "operationId": "listAvailableTeamsChannels", "tags": [ "workspace" @@ -3346,30 +4362,41 @@ "parameters": [ { "$ref": "#/components/parameters/WorkspaceId" + }, + { + "name": "team_id", + "in": "query", + "description": "Microsoft Teams team ID", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "status", + "description": "List of channels for the specified team", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "channel_name": { - "type": "string" - }, - "channel_id": { - "type": "string" - }, - "service_url": { - "type": "string" - }, - "tenant_id": { - "type": "string" + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "channel_name": { + "type": "string" + }, + "channel_id": { + "type": "string" + } + } } + }, + "total_count": { + "type": "integer" } } } @@ -3619,6 +4646,57 @@ } } }, + "/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", @@ -3742,21 +4820,47 @@ "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "error_handler": { - "type": "string" - }, - "error_handler_extra_args": { - "$ref": "#/components/schemas/ScriptArgs" - }, - "error_handler_muted_on_cancel": { - "type": "boolean" - } + "$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": { @@ -3841,6 +4945,64 @@ } } }, + "/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", @@ -3884,6 +5046,49 @@ } } }, + "/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", @@ -4317,32 +5522,6 @@ } } }, - "/w/{workspace}/workspaces/get_large_file_storage_config": { - "get": { - "summary": "get large file storage config", - "operationId": "getLargeFileStorageConfig", - "tags": [ - "workspace" - ], - "parameters": [ - { - "$ref": "#/components/parameters/WorkspaceId" - } - ], - "responses": { - "200": { - "description": "status", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LargeFileStorage" - } - } - } - } - } - } - }, "/w/{workspace}/workspaces/usage": { "get": { "summary": "get usage", @@ -4412,6 +5591,12 @@ }, "sqs_used": { "type": "boolean" + }, + "email_used": { + "type": "boolean" + }, + "nextcloud_used": { + "type": "boolean" } }, "required": [ @@ -4422,7 +5607,9 @@ "postgres_used", "mqtt_used", "gcp_used", - "sqs_used" + "sqs_used", + "email_used", + "nextcloud_used" ] } } @@ -4728,6 +5915,13 @@ "schema": { "type": "string" } + }, + { + "name": "expires_in", + "in": "query", + "schema": { + "type": "number" + } } ], "responses": { @@ -4857,6 +6051,57 @@ } } }, + "/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", @@ -4965,6 +6210,14 @@ }, { "$ref": "#/components/parameters/Path" + }, + { + "name": "allow_cache", + "description": "allow getting a cached value for improved performance\n", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -5093,6 +6346,16 @@ "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": { @@ -5292,6 +6555,241 @@ } } }, + "/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": [], @@ -5509,7 +7007,8 @@ "type": "object", "properties": { "refresh_token": { - "type": "string" + "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" @@ -5532,9 +7031,14 @@ "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" ] @@ -5871,30 +7375,6 @@ } } }, - "/teams/sync": { - "post": { - "operationId": "syncTeams", - "summary": "synchronize Microsoft Teams information (teams/channels)", - "tags": [ - "teams" - ], - "responses": { - "200": { - "description": "Teams information successfully synchronized", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TeamInfo" - } - } - } - } - } - } - } - }, "/teams/activities": { "post": { "summary": "send update to Microsoft Teams activity", @@ -6019,6 +7499,57 @@ } } }, + "/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", @@ -6155,6 +7686,14 @@ "type": "string", "format": "uuid" } + }, + { + "name": "allow_cache", + "description": "allow getting a cached value for improved performance", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -6196,6 +7735,51 @@ } } }, + "/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", @@ -6324,6 +7908,53 @@ } } }, + "/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", @@ -6615,6 +8246,218 @@ } } }, + "/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", @@ -6913,6 +8756,50 @@ } } }, + "/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", @@ -7022,6 +8909,40 @@ } } }, + "/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", @@ -7378,6 +9299,22 @@ "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": { @@ -7527,6 +9464,18 @@ "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" ], @@ -7613,14 +9562,6 @@ "worker" ], "parameters": [ - { - "name": "workspace", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, { "name": "show_workspace_restriction", "in": "query", @@ -7647,6 +9588,35 @@ } } }, + "/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", @@ -7692,6 +9662,194 @@ } } }, + "/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", @@ -7754,6 +9912,7 @@ "post": { "summary": "delete script by hash (erase content but keep hash, require admin)", "operationId": "deleteScriptByHash", + "x-mcp-tool": true, "tags": [ "script" ], @@ -7783,6 +9942,7 @@ "post": { "summary": "delete script at a given path (require admin)", "operationId": "deleteScriptByPath", + "x-mcp-tool": true, "tags": [ "script" ], @@ -7816,6 +9976,57 @@ } } }, + "/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", @@ -8274,6 +10485,10 @@ }, "lock_error_logs": { "type": "string" + }, + "job_id": { + "type": "string", + "format": "uuid" } } } @@ -8377,6 +10592,9 @@ "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" ], @@ -8459,56 +10677,6 @@ } } }, - "/w/{workspace}/jobs/openai_sync/p/{path}": { - "post": { - "summary": "run script by path in openai format", - "operationId": "openaiSyncScriptByPath", - "tags": [ - "job" - ], - "parameters": [ - { - "$ref": "#/components/parameters/WorkspaceId" - }, - { - "$ref": "#/components/parameters/ScriptPath" - }, - { - "$ref": "#/components/parameters/ParentJob" - }, - { - "$ref": "#/components/parameters/NewJobId" - }, - { - "$ref": "#/components/parameters/IncludeHeader" - }, - { - "$ref": "#/components/parameters/QueueLimit" - } - ], - "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/p/{path}": { "post": { "summary": "run script by path", @@ -8540,6 +10708,9 @@ }, { "$ref": "#/components/parameters/QueueLimit" + }, + { + "$ref": "#/components/parameters/SkipPreprocessor" } ], "requestBody": { @@ -8597,6 +10768,9 @@ }, { "$ref": "#/components/parameters/Payload" + }, + { + "$ref": "#/components/parameters/SkipPreprocessor" } ], "responses": { @@ -8611,53 +10785,6 @@ } } }, - "/w/{workspace}/jobs/openai_sync/f/{path}": { - "post": { - "summary": "run flow by path and wait until completion in openai format", - "operationId": "openaiSyncFlowByPath", - "tags": [ - "job" - ], - "parameters": [ - { - "$ref": "#/components/parameters/WorkspaceId" - }, - { - "$ref": "#/components/parameters/ScriptPath" - }, - { - "$ref": "#/components/parameters/IncludeHeader" - }, - { - "$ref": "#/components/parameters/QueueLimit" - }, - { - "$ref": "#/components/parameters/NewJobId" - } - ], - "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/f/{path}": { "post": { "summary": "run flow by path and wait until completion", @@ -8680,6 +10807,18 @@ }, { "$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": { @@ -8705,6 +10844,672 @@ } } }, + "/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", @@ -8884,6 +11689,22 @@ "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": { @@ -8995,6 +11816,13 @@ }, { "$ref": "#/components/parameters/ScriptPath" + }, + { + "name": "match_path_start", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -9014,7 +11842,7 @@ } } }, - "/w/{workspace}/flows/get/v/{version}/p/{path}": { + "/w/{workspace}/flows/get/v/{version}": { "get": { "summary": "get flow version", "operationId": "getFlowVersion", @@ -9029,9 +11857,6 @@ "schema": { "type": "number" } - }, - { - "$ref": "#/components/parameters/ScriptPath" } ], "tags": [ @@ -9051,7 +11876,7 @@ } } }, - "/w/{workspace}/flows/history_update/v/{version}/p/{path}": { + "/w/{workspace}/flows/history_update/v/{version}": { "post": { "summary": "update flow history", "operationId": "updateFlowHistory", @@ -9066,9 +11891,6 @@ "schema": { "type": "number" } - }, - { - "$ref": "#/components/parameters/ScriptPath" } ], "requestBody": { @@ -9169,6 +11991,10 @@ "properties": { "lock_error_logs": { "type": "string" + }, + "job_id": { + "type": "string", + "format": "uuid" } } } @@ -9358,6 +12184,20 @@ "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" ], @@ -9410,6 +12250,20 @@ "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" ], @@ -9507,6 +12361,7 @@ "delete": { "summary": "delete flow by path", "operationId": "deleteFlowByPath", + "x-mcp-tool": true, "tags": [ "flow" ], @@ -9540,6 +12395,140 @@ } } }, + "/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", @@ -9605,51 +12594,24 @@ } } }, - "/w/{workspace}/raw_apps/exists/{path}": { + "/w/{workspace}/apps/get_data/v/{secretWithExtension}": { "get": { - "summary": "does an app exisst at path", - "operationId": "existsRawApp", - "tags": [ - "raw_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_data/{version}/{path}": { - "get": { - "summary": "get app by path", + "summary": "get raw app data by", "operationId": "getRawAppData", "tags": [ - "raw_app" + "app" ], "parameters": [ { "$ref": "#/components/parameters/WorkspaceId" }, { - "$ref": "#/components/parameters/VersionId" - }, - { - "$ref": "#/components/parameters/ScriptPath" + "name": "secretWithExtension", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -9790,6 +12752,18 @@ "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" ], @@ -10277,6 +13251,35 @@ } } }, + "/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", @@ -10306,139 +13309,6 @@ } } }, - "/w/{workspace}/raw_apps/create": { - "post": { - "summary": "create raw app", - "operationId": "createRawApp", - "tags": [ - "raw_app" - ], - "parameters": [ - { - "$ref": "#/components/parameters/WorkspaceId" - } - ], - "requestBody": { - "description": "new raw app", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "value": { - "type": "string" - }, - "summary": { - "type": "string" - } - }, - "required": [ - "path", - "value", - "summary" - ] - } - } - } - }, - "responses": { - "201": { - "description": "raw app created", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/w/{workspace}/raw_apps/update/{path}": { - "post": { - "summary": "update app", - "operationId": "updateRawApp", - "tags": [ - "raw_app" - ], - "parameters": [ - { - "$ref": "#/components/parameters/WorkspaceId" - }, - { - "$ref": "#/components/parameters/ScriptPath" - } - ], - "requestBody": { - "description": "updateraw app", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "value": { - "type": "string" - } - } - } - } - } - }, - "responses": { - "200": { - "description": "app updated", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/w/{workspace}/raw_apps/delete/{path}": { - "delete": { - "summary": "delete raw app", - "operationId": "deleteRawApp", - "tags": [ - "raw_app" - ], - "parameters": [ - { - "$ref": "#/components/parameters/WorkspaceId" - }, - { - "$ref": "#/components/parameters/Path" - } - ], - "responses": { - "200": { - "description": "app deleted", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, "/w/{workspace}/apps/delete/{path}": { "delete": { "summary": "delete app", @@ -10472,6 +13342,18 @@ "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" ], @@ -10746,6 +13628,10 @@ "items": { "type": "string" } + }, + "run_query_params": { + "type": "object", + "description": "Runnable query parameters" } }, "required": [ @@ -10914,6 +13800,9 @@ "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" ], @@ -10942,12 +13831,7 @@ } }, { - "name": "skip_preprocessor", - "description": "skip the preprocessor", - "in": "query", - "schema": { - "type": "boolean" - } + "$ref": "#/components/parameters/SkipPreprocessor" }, { "$ref": "#/components/parameters/ParentJob" @@ -10968,6 +13852,112 @@ "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": { @@ -11080,7 +14070,7 @@ } } }, - "/w/{workspace}/jobs/restart/f/{id}/from/{step_id}/{branch_or_iteration_n}": { + "/w/{workspace}/jobs/restart/f/{id}": { "post": { "summary": "restart a completed flow at a given step", "operationId": "restartFlowAtStep", @@ -11094,24 +14084,6 @@ { "$ref": "#/components/parameters/JobId" }, - { - "name": "step_id", - "description": "step id to restart the flow from", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - }, - { - "name": "branch_or_iteration_n", - "description": "for branchall or loop, the iteration at which the flow should restart", - "required": true, - "in": "path", - "schema": { - "type": "integer" - } - }, { "name": "scheduled_for", "description": "when to schedule this job (leave empty for immediate run)", @@ -11151,12 +14123,29 @@ } ], "requestBody": { - "description": "flow args", + "description": "restart flow parameters", "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ScriptArgs" + "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)" + } + } } } } @@ -11208,12 +14197,7 @@ } }, { - "name": "skip_preprocessor", - "description": "skip the preprocessor", - "in": "query", - "schema": { - "type": "boolean" - } + "$ref": "#/components/parameters/SkipPreprocessor" }, { "$ref": "#/components/parameters/ParentJob" @@ -11317,6 +14301,83 @@ } } }, + "/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", @@ -11455,6 +14516,15 @@ }, { "$ref": "#/components/parameters/NewJobId" + }, + { + "name": "memory_id", + "description": "memory ID for chat-enabled flows", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { @@ -11483,6 +14553,88 @@ } } }, + "/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", @@ -11516,6 +14668,12 @@ { "$ref": "#/components/parameters/SchedulePath" }, + { + "$ref": "#/components/parameters/TriggerPath" + }, + { + "$ref": "#/components/parameters/JobTriggerKind" + }, { "$ref": "#/components/parameters/ScriptExactHash" }, @@ -11773,7 +14931,16 @@ "$ref": "#/components/parameters/CreatedAfter" }, { - "$ref": "#/components/parameters/CreatedOrStartedBefore" + "$ref": "#/components/parameters/CompletedBefore" + }, + { + "$ref": "#/components/parameters/CompletedAfter" + }, + { + "$ref": "#/components/parameters/CreatedBeforeQueue" + }, + { + "$ref": "#/components/parameters/CreatedAfterQueue" }, { "$ref": "#/components/parameters/Running" @@ -11781,12 +14948,6 @@ { "$ref": "#/components/parameters/ScheduledForBeforeNow" }, - { - "$ref": "#/components/parameters/CreatedOrStartedAfter" - }, - { - "$ref": "#/components/parameters/CreatedOrStartedAfterCompletedJob" - }, { "$ref": "#/components/parameters/JobKinds" }, @@ -11997,6 +15158,13 @@ "parameters": [ { "$ref": "#/components/parameters/WorkspaceId" + }, + { + "name": "force_cancel", + "in": "query", + "schema": { + "type": "boolean" + } } ], "requestBody": { @@ -12030,6 +15198,172 @@ } } }, + "/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", @@ -12148,6 +15482,196 @@ } } }, + "/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", @@ -12197,7 +15721,16 @@ "$ref": "#/components/parameters/CreatedAfter" }, { - "$ref": "#/components/parameters/CreatedOrStartedBefore" + "$ref": "#/components/parameters/CompletedBefore" + }, + { + "$ref": "#/components/parameters/CompletedAfter" + }, + { + "$ref": "#/components/parameters/CreatedBeforeQueue" + }, + { + "$ref": "#/components/parameters/CreatedAfterQueue" }, { "$ref": "#/components/parameters/Running" @@ -12205,12 +15738,6 @@ { "$ref": "#/components/parameters/ScheduledForBeforeNow" }, - { - "$ref": "#/components/parameters/CreatedOrStartedAfter" - }, - { - "$ref": "#/components/parameters/CreatedOrStartedAfterCompletedJob" - }, { "$ref": "#/components/parameters/JobKinds" }, @@ -12230,10 +15757,10 @@ "$ref": "#/components/parameters/AllowWildcards" }, { - "$ref": "#/components/parameters/Page" + "$ref": "#/components/parameters/PerPage" }, { - "$ref": "#/components/parameters/PerPage" + "$ref": "#/components/parameters/JobTriggerKind" }, { "name": "is_skipped", @@ -12463,6 +15990,13 @@ }, { "$ref": "#/components/parameters/JobId" + }, + { + "name": "remove_ansi_warnings", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -12479,6 +16013,35 @@ } } }, + "/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", @@ -12506,6 +16069,50 @@ } } }, + "/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", @@ -12866,6 +16473,51 @@ } } }, + "/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)", @@ -13030,6 +16682,76 @@ } } }, + "/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", @@ -13102,6 +16824,14 @@ "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": { @@ -14529,6 +18259,53 @@ } } }, + "/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", @@ -14751,10 +18528,10 @@ } } }, - "/w/{workspace}/websocket_triggers/setenabled/{path}": { + "/w/{workspace}/websocket_triggers/setmode/{path}": { "post": { "summary": "set enabled websocket trigger", - "operationId": "setWebsocketTriggerEnabled", + "operationId": "setWebsocketTriggerMode", "tags": [ "websocket_trigger" ], @@ -14774,12 +18551,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -15073,10 +18850,10 @@ } } }, - "/w/{workspace}/kafka_triggers/setenabled/{path}": { + "/w/{workspace}/kafka_triggers/setmode/{path}": { "post": { "summary": "set enabled kafka trigger", - "operationId": "setKafkaTriggerEnabled", + "operationId": "setKafkaTriggerMode", "tags": [ "kafka_trigger" ], @@ -15096,12 +18873,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -15388,10 +19165,10 @@ } } }, - "/w/{workspace}/nats_triggers/setenabled/{path}": { + "/w/{workspace}/nats_triggers/setmode/{path}": { "post": { "summary": "set enabled nats trigger", - "operationId": "setNatsTriggerEnabled", + "operationId": "setNatsTriggerMode", "tags": [ "nats_trigger" ], @@ -15411,12 +19188,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -15703,10 +19480,10 @@ } } }, - "/w/{workspace}/sqs_triggers/setenabled/{path}": { + "/w/{workspace}/sqs_triggers/setmode/{path}": { "post": { "summary": "set enabled sqs trigger", - "operationId": "setSqsTriggerEnabled", + "operationId": "setSqsTriggerMode", "tags": [ "sqs_trigger" ], @@ -15726,12 +19503,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -15796,6 +19573,674 @@ } } }, + "/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", @@ -16018,10 +20463,10 @@ } } }, - "/w/{workspace}/mqtt_triggers/setenabled/{path}": { + "/w/{workspace}/mqtt_triggers/setmode/{path}": { "post": { "summary": "set enabled mqtt trigger", - "operationId": "setMqttTriggerEnabled", + "operationId": "setMqttTriggerMode", "tags": [ "mqtt_trigger" ], @@ -16041,12 +20486,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -16333,10 +20778,10 @@ } } }, - "/w/{workspace}/gcp_triggers/setenabled/{path}": { + "/w/{workspace}/gcp_triggers/setmode/{path}": { "post": { "summary": "set enabled gcp trigger", - "operationId": "setGcpTriggerEnabled", + "operationId": "setGcpTriggerMode", "tags": [ "gcp_trigger" ], @@ -16356,12 +20801,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -17181,10 +21626,10 @@ } } }, - "/w/{workspace}/postgres_triggers/setenabled/{path}": { + "/w/{workspace}/postgres_triggers/setmode/{path}": { "post": { "summary": "set enabled postgres trigger", - "operationId": "setPostgresTriggerEnabled", + "operationId": "setPostgresTriggerMode", "tags": [ "postgres_trigger" ], @@ -17204,12 +21649,12 @@ "schema": { "type": "object", "properties": { - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" } }, "required": [ - "enabled" + "mode" ] } } @@ -17274,6 +21719,326 @@ } } }, + "/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", @@ -17298,6 +22063,30 @@ } } }, + "/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", @@ -17900,6 +22689,63 @@ } } }, + "/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", @@ -18330,6 +23176,63 @@ } } }, + "/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", @@ -18372,18 +23275,28 @@ } } }, - "/workers/exists_worker_with_tag": { + "/workers/exists_workers_with_tags": { "get": { - "summary": "exists worker with tag", - "operationId": "existsWorkerWithTag", + "summary": "exists workers with tags", + "operationId": "existsWorkersWithTags", "tags": [ "worker" ], "parameters": [ { - "name": "tag", + "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" } @@ -18391,11 +23304,14 @@ ], "responses": { "200": { - "description": "whether a worker with the tag exists", + "description": "map of tags to whether at least one worker with the tag exists", "content": { "application/json": { "schema": { - "type": "boolean" + "type": "object", + "additionalProperties": { + "type": "boolean" + } } } } @@ -18478,6 +23394,30 @@ } } }, + "/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", @@ -18636,6 +23576,12 @@ "schema": { "type": "string" } + }, + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PerPage" } ], "responses": { @@ -18655,6 +23601,30 @@ } } }, + "/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.", @@ -18864,6 +23834,28 @@ } } }, + "/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", @@ -18901,7 +23893,8 @@ "postgres_trigger", "mqtt_trigger", "gcp_trigger", - "sqs_trigger" + "sqs_trigger", + "email_trigger" ] } } @@ -18960,7 +23953,8 @@ "postgres_trigger", "mqtt_trigger", "gcp_trigger", - "sqs_trigger" + "sqs_trigger", + "email_trigger" ] } } @@ -19038,7 +24032,8 @@ "postgres_trigger", "mqtt_trigger", "gcp_trigger", - "sqs_trigger" + "sqs_trigger", + "email_trigger" ] } } @@ -19382,7 +24377,8 @@ "flow", "app", "script", - "raw_app" + "raw_app", + "asset" ] } } @@ -19424,7 +24420,8 @@ "flow", "app", "script", - "raw_app" + "raw_app", + "asset" ] } } @@ -20228,6 +25225,255 @@ } } }, + "/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", @@ -20623,6 +25869,105 @@ } } }, + "/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", @@ -21112,9 +26457,6 @@ { "$ref": "#/components/parameters/StartedAfter" }, - { - "$ref": "#/components/parameters/CreatedOrStartedBefore" - }, { "$ref": "#/components/parameters/Running" }, @@ -21122,10 +26464,16 @@ "$ref": "#/components/parameters/ScheduledForBeforeNow" }, { - "$ref": "#/components/parameters/CreatedOrStartedAfter" + "$ref": "#/components/parameters/CompletedBefore" }, { - "$ref": "#/components/parameters/CreatedOrStartedAfterCompletedJob" + "$ref": "#/components/parameters/CompletedAfter" + }, + { + "$ref": "#/components/parameters/CreatedBeforeQueue" + }, + { + "$ref": "#/components/parameters/CreatedAfterQueue" }, { "$ref": "#/components/parameters/JobKinds" @@ -21148,6 +26496,9 @@ { "$ref": "#/components/parameters/PerPage" }, + { + "$ref": "#/components/parameters/JobTriggerKind" + }, { "name": "is_skipped", "description": "is the job skipped", @@ -21476,7 +26827,7 @@ }, "/w/{workspace}/assets/list": { "get": { - "summary": "List all assets in the workspace", + "summary": "List all assets in the workspace with cursor pagination", "operationId": "listAssets", "tags": [ "asset" @@ -21484,56 +26835,160 @@ "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": "all assets in the workspace", + "description": "paginated assets in the workspace", "content": { "application/json": { "schema": { - "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" + "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')" + } } } } - }, - "metadata": { - "type": "object", - "properties": { - "resource_type": { - "type": "string" - } + } + }, + "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" } } } @@ -21626,6 +27081,44 @@ } } }, + "/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", @@ -21654,6 +27147,144 @@ } } } + }, + "/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": { @@ -21815,6 +27446,14 @@ "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)", @@ -21897,6 +27536,14 @@ "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", @@ -21921,6 +27568,14 @@ "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", @@ -21982,27 +27637,36 @@ "format": "date-time" } }, - "CreatedOrStartedAfter": { - "name": "created_or_started_after", - "description": "filter on created_at for non non started job and started_at otherwise after (exclusive) timestamp", + "CompletedBefore": { + "name": "completed_before", + "description": "filter on started before (inclusive) timestamp", "in": "query", "schema": { "type": "string", "format": "date-time" } }, - "CreatedOrStartedAfterCompletedJob": { - "name": "created_or_started_after_completed_jobs", - "description": "filter on created_at for non non started job and started_at otherwise after (exclusive) timestamp but only for the completed jobs", + "CompletedAfter": { + "name": "completed_after", + "description": "filter on started after (exclusive) timestamp", "in": "query", "schema": { "type": "string", "format": "date-time" } }, - "CreatedOrStartedBefore": { - "name": "created_or_started_before", - "description": "filter on created_at for non non started job and started_at otherwise before (inclusive) timestamp", + "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", @@ -22181,18 +27845,26 @@ "schemas": { "OpenFlow": { "type": "object", + "description": "Top-level flow definition containing metadata, configuration, and the flow structure", "properties": { "summary": { - "type": "string" + "type": "string", + "description": "Short description of what this flow does" }, "description": { - "type": "string" + "type": "string", + "description": "Detailed documentation for this flow" }, "value": { "$ref": "#/components/schemas/schemas-FlowValue" }, "schema": { - "type": "object" + "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-' (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": [ @@ -22202,42 +27874,98 @@ }, "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" + "type": "boolean", + "description": "If true, all steps run on the same worker for better performance" }, "concurrent_limit": { - "type": "number" + "type": "number", + "description": "Maximum number of concurrent executions of this flow" }, "concurrency_key": { - "type": "string" + "type": "string", + "description": "Expression to group concurrent executions (e.g., by user ID)" }, "concurrency_time_window_s": { - "type": "number" + "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" + "type": "string", + "description": "JavaScript expression to conditionally skip the entire flow" }, "cache_ttl": { - "type": "number" + "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" + "type": "number", + "description": "Execution priority (higher numbers run first)" }, "early_return": { - "type": "string" + "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": [ @@ -22246,50 +27974,67 @@ }, "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" + "type": "integer", + "description": "Number of retry attempts" }, "seconds": { - "type": "integer" + "type": "integer", + "description": "Seconds to wait between retries" } } }, "exponential": { "type": "object", + "description": "Retry with exponential backoff (delay doubles each time)", "properties": { "attempts": { - "type": "integer" + "type": "integer", + "description": "Number of retry attempts" }, "multiplier": { - "type": "integer" + "type": "integer", + "description": "Multiplier for exponential backoff" }, "seconds": { - "type": "integer" + "type": "integer", + "minimum": 1, + "description": "Initial delay in seconds" }, "random_factor": { "type": "integer", "minimum": 0, - "maximum": 100 + "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" + "type": "boolean", + "description": "If true, following steps are skipped when this condition triggers" }, "expr": { - "type": "string" + "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" + "type": "string", + "description": "Custom error message shown when stopping" } }, "required": [ @@ -22298,24 +28043,30 @@ }, "FlowModule": { "type": "object", + "description": "A single step in a flow. Can be a script, subflow, loop, or branch", "properties": { "id": { - "type": "string" + "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" + "type": "string", + "description": "JavaScript expression that returns true to skip. Can use 'flow_input' or 'results.'" } }, "required": [ @@ -22323,70 +28074,95 @@ ] }, "sleep": { + "description": "Delay before executing this step (in seconds or as expression)", "$ref": "#/components/schemas/schemas-InputTransform" }, "cache_ttl": { - "type": "number" + "type": "number", + "description": "Cache duration in seconds for this step's results" }, - "timeout": { - "type": "number" - }, - "delete_after_use": { + "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" + "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" + "type": "boolean", + "description": "If true, return mock value instead of executing" }, - "return_value": {} + "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" + "type": "integer", + "description": "Number of approvals required before continuing" }, "timeout": { - "type": "integer" + "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" + "type": "object", + "description": "JSON Schema for the resume form" } } }, "user_auth_required": { - "type": "boolean" + "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" + "type": "boolean", + "description": "If true, the user who started the flow cannot approve" }, "hide_cancel": { - "type": "boolean" + "type": "boolean", + "description": "If true, hide the cancel button on the approval form" }, "continue_on_disapprove_timeout": { - "type": "boolean" + "type": "boolean", + "description": "If true, continue flow on timeout instead of canceling" } } }, "priority": { - "type": "number" + "type": "number", + "description": "Execution priority for this step (higher numbers run first)" }, "continue_on_error": { - "type": "boolean" + "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" } }, @@ -22396,26 +28172,34 @@ ] }, "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" + "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": {}, + "value": { + "description": "The static value. For resources, use format '$res:path/to/resource'" + }, "type": { "type": "string", "enum": [ @@ -22424,15 +28208,16 @@ } }, "required": [ - "value", "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" + "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", @@ -22446,7 +28231,67 @@ "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" @@ -22471,6 +28316,9 @@ }, { "$ref": "#/components/schemas/schemas-Identity" + }, + { + "$ref": "#/components/schemas/schemas-AiAgent" } ], "discriminator": { @@ -22483,24 +28331,29 @@ "whileloopflow": "#/components/schemas/schemas-WhileloopFlow", "branchone": "#/components/schemas/schemas-BranchOne", "branchall": "#/components/schemas/schemas-BranchAll", - "identity": "#/components/schemas/schemas-Identity" + "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" + "type": "string", + "description": "The script source code. Should export a 'main' function" }, "language": { "type": "string", + "description": "Programming language for this script", "enum": [ "deno", "bun", @@ -22516,14 +28369,23 @@ "oracledb", "graphql", "nativets", - "php" + "php", + "rust", + "ansible", + "csharp", + "nu", + "java", + "ruby", + "duckdb" ] }, "path": { - "type": "string" + "type": "string", + "description": "Optional path for saving this script" }, "lock": { - "type": "string" + "type": "string", + "description": "Lock file content for dependencies" }, "type": { "type": "string", @@ -22532,22 +28394,28 @@ ] }, "tag": { - "type": "string" + "type": "string", + "description": "Worker group tag for execution routing" }, "concurrent_limit": { - "type": "number" + "type": "number", + "description": "Maximum concurrent executions of this script" }, "concurrency_time_window_s": { - "type": "number" + "type": "number", + "description": "Time window for concurrent_limit" }, "custom_concurrency_key": { - "type": "string" + "type": "string", + "description": "Custom key for grouping concurrent executions" }, "is_trigger": { - "type": "boolean" + "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": [ @@ -22556,18 +28424,23 @@ ], "properties": { "path": { - "type": "string" + "type": "string", + "description": "Path to the asset" }, "kind": { "type": "string", + "description": "Type of asset", "enum": [ "s3object", "resource", - "ducklake" + "ducklake", + "datatable" ] }, "access_type": { "type": "string", + "nullable": true, + "description": "Access level for this asset", "enum": [ "r", "w", @@ -22576,6 +28449,8 @@ }, "alt_access_type": { "type": "string", + "nullable": true, + "description": "Alternative access level", "enum": [ "r", "w", @@ -22595,18 +28470,22 @@ }, "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" + "type": "string", + "description": "Path to the script in the workspace (e.g., 'f/scripts/send_email')" }, "hash": { - "type": "string" + "type": "string", + "description": "Optional specific version hash of the script to use" }, "type": { "type": "string", @@ -22615,10 +28494,12 @@ ] }, "tag_override": { - "type": "string" + "type": "string", + "description": "Override the script's default worker group tag" }, "is_trigger": { - "type": "boolean" + "type": "boolean", + "description": "If true, this script is a trigger that can start the flow" } }, "required": [ @@ -22629,15 +28510,18 @@ }, "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" + "type": "string", + "description": "Path to the flow in the workspace (e.g., 'f/flows/process_user')" }, "type": { "type": "string", @@ -22654,18 +28538,22 @@ }, "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" + "type": "boolean", + "description": "If true, iteration failures don't stop the loop. Failed iterations return null" }, "type": { "type": "string", @@ -22674,10 +28562,15 @@ ] }, "parallel": { - "type": "boolean" + "type": "boolean", + "description": "If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency" }, "parallelism": { - "type": "integer" + "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": [ @@ -22689,15 +28582,18 @@ }, "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" + "type": "boolean", + "description": "If true, iteration failures don't stop the loop. Failed iterations return null" }, "type": { "type": "string", @@ -22706,10 +28602,15 @@ ] }, "parallel": { - "type": "boolean" + "type": "boolean", + "description": "If true, iterations run concurrently (use with caution in while loops)" }, "parallelism": { - "type": "integer" + "description": "Maximum number of concurrent iterations when parallel=true", + "$ref": "#/components/schemas/schemas-InputTransform" + }, + "squash": { + "type": "boolean" } }, "required": [ @@ -22720,20 +28621,25 @@ }, "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" + "type": "string", + "description": "Short description of this branch condition" }, "expr": { - "type": "string" + "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" } @@ -22747,12 +28653,10 @@ }, "default": { "type": "array", + "description": "Steps to execute if no branch expressions match", "items": { "$ref": "#/components/schemas/schemas-FlowModule" - }, - "required": [ - "modules" - ] + } }, "type": { "type": "string", @@ -22769,20 +28673,25 @@ }, "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" + "type": "string", + "description": "Short description of this branch's purpose" }, "skip_failure": { - "type": "boolean" + "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" } @@ -22800,7 +28709,8 @@ ] }, "parallel": { - "type": "boolean" + "type": "boolean", + "description": "If true, all branches execute concurrently. If false, they execute sequentially" } }, "required": [ @@ -22808,8 +28718,118 @@ "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", @@ -22818,7 +28838,8 @@ ] }, "flow": { - "type": "boolean" + "type": "boolean", + "description": "If true, marks this as a flow identity (special handling)" } }, "required": [ @@ -22921,6 +28942,9 @@ "type": "array", "items": {} }, + "itered_len": { + "type": "integer" + }, "args": {} } }, @@ -22936,6 +28960,23 @@ "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": { @@ -22996,12 +29037,763 @@ }, "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": [ @@ -23061,6 +29853,7 @@ "groq", "openrouter", "togetherai", + "aws_bedrock", "customai" ] }, @@ -23130,6 +29923,20 @@ }, "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 + } } } }, @@ -23175,6 +29982,69 @@ } } }, + "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": { @@ -23275,6 +30145,24 @@ "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" }, @@ -23393,6 +30281,9 @@ "cache_ttl": { "type": "number" }, + "cache_ignore_s3_path": { + "type": "boolean" + }, "dedicated_worker": { "type": "boolean" }, @@ -23417,6 +30308,24 @@ "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" }, @@ -23513,7 +30422,7 @@ "ScriptArgs": { "type": "object", "description": "The arguments to pass to the script or flow", - "additionalProperties": {} + "additionalProperties": true }, "Input": { "type": "object", @@ -23663,10 +30572,14 @@ "script_hub", "identity", "deploymentcallback", - "singlescriptflow", + "singlestepflow", "flowscript", "flownode", - "appscript" + "appscript", + "aiagent", + "unassigned_script", + "unassigned_flow", + "unassigned_singlestepflow" ] }, "schedule_path": { @@ -23759,6 +30672,10 @@ "type": "string", "format": "date-time" }, + "completed_at": { + "type": "string", + "format": "date-time" + }, "duration_ms": { "type": "integer" }, @@ -23806,10 +30723,14 @@ "script_hub", "identity", "deploymentcallback", - "singlescriptflow", + "singlestepflow", "flowscript", "flownode", - "appscript" + "appscript", + "aiagent", + "unassigned_script", + "unassigned_flow", + "unassigned_singlestepflow" ] }, "schedule_path": { @@ -23888,6 +30809,394 @@ "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": { @@ -23991,6 +31300,14 @@ "items": { "type": "string" } + }, + "added_via": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/UserSource" + } + ] } }, "required": [ @@ -24005,6 +31322,31 @@ "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": { @@ -24031,6 +31373,17 @@ "password" ] }, + "PasswordResetResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + }, "EditWorkspaceUser": { "type": "object", "properties": { @@ -24265,6 +31618,9 @@ "AuditLog": { "type": "object", "properties": { + "workspace_id": { + "type": "string" + }, "id": { "type": "integer" }, @@ -24385,6 +31741,7 @@ } }, "required": [ + "workspace_id", "id", "timestamp", "username", @@ -24611,20 +31968,25 @@ "csharp", "nu", "java", - "duckdb" + "ruby", + "duckdb", + "bunnative" ] }, "Preview": { "type": "object", "properties": { "content": { - "type": "string" + "type": "string", + "description": "The code to run" }, "path": { - "type": "string" + "type": "string", + "description": "The path to the script" }, "script_hash": { - "type": "string" + "type": "string", + "description": "The hash of the script" }, "args": { "$ref": "#/components/schemas/ScriptArgs" @@ -24654,6 +32016,26 @@ "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": { @@ -24867,29 +32249,37 @@ "type": "object", "properties": { "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this schedule" }, "edited_by": { - "type": "string" + "type": "string", + "description": "Username of the last person who edited this schedule" }, "edited_at": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of the last edit" }, "schedule": { - "type": "string" + "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" + "type": "string", + "description": "IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')" }, "enabled": { - "type": "boolean" + "type": "boolean", + "description": "Whether the schedule is currently active and will trigger jobs" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when triggered" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "args": { "$ref": "#/components/schemas/ScriptArgs" @@ -24898,65 +32288,85 @@ "type": "object", "additionalProperties": { "type": "boolean" - } + }, + "description": "Additional permissions for this schedule" }, "email": { - "type": "string" + "type": "string", + "description": "Email of the user who owns this schedule, used for permissioned_as" }, "error": { - "type": "string" + "type": "string", + "description": "Last error message if the schedule failed to trigger" }, "on_failure": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the scheduled job fails" }, "on_failure_times": { - "type": "number" + "type": "number", + "description": "Number of consecutive failures before the on_failure handler is triggered (default 1)" }, "on_failure_exact": { - "type": "boolean" + "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" + "type": "string", + "description": "Path to a script or flow to run when the schedule recovers after failures" }, "on_recovery_times": { - "type": "number" + "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" + "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" + "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" + "type": "string", + "description": "Short summary describing the purpose of this schedule" }, "description": { - "type": "string" + "type": "string", + "description": "Detailed description of what this schedule does" }, "no_flow_overlap": { - "type": "boolean" + "type": "boolean", + "description": "If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)" }, "tag": { - "type": "string" + "type": "string", + "description": "Worker tag to route jobs to specific worker groups" }, "paused_until": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time" }, "cron_version": { - "type": "string" + "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": [ @@ -25020,100 +32430,99 @@ "properties": { "path": { "type": "string", - "description": "The path where the schedule will be created" + "description": "The unique path identifier for this schedule" }, "schedule": { "type": "string", - "description": "The cron schedule to trigger the script or flow. Should include seconds." + "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": "The timezone to use for the cron schedule" + "description": "IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')" }, "script_path": { "type": "string", - "description": "The path to the script or flow to trigger" + "description": "Path to the script or flow to execute when triggered" }, "is_flow": { "type": "boolean", - "description": "Whether the schedule is for a flow" + "description": "True if script_path points to a flow, false if it points to a script" }, "args": { - "$ref": "#/components/schemas/ScriptArgs", - "description": "The arguments to pass to the script or flow" + "$ref": "#/components/schemas/ScriptArgs" }, "enabled": { "type": "boolean", - "description": "Whether the schedule is enabled" + "description": "Whether the schedule is currently active and will trigger jobs" }, "on_failure": { "type": "string", - "description": "The path to the script or flow to trigger on failure" + "description": "Path to a script or flow to run when the scheduled job fails" }, "on_failure_times": { "type": "number", - "description": "The number of times to retry on failure" + "description": "Number of consecutive failures before the on_failure handler is triggered (default 1)" }, "on_failure_exact": { "type": "boolean", - "description": "Whether the schedule should only run on the exact time" + "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", - "description": "The arguments to pass to the script or flow on failure" + "$ref": "#/components/schemas/ScriptArgs" }, "on_recovery": { "type": "string", - "description": "The path to the script or flow to trigger on recovery" + "description": "Path to a script or flow to run when the schedule recovers after failures" }, "on_recovery_times": { "type": "number", - "description": "The number of times to retry on recovery" + "description": "Number of consecutive successes before the on_recovery handler is triggered (default 1)" }, "on_recovery_extra_args": { - "$ref": "#/components/schemas/ScriptArgs", - "description": "The arguments to pass to the script or flow on recovery" + "$ref": "#/components/schemas/ScriptArgs" }, "on_success": { "type": "string", - "description": "The path to the script or flow to trigger on success" + "description": "Path to a script or flow to run after each successful execution" }, "on_success_extra_args": { - "$ref": "#/components/schemas/ScriptArgs", - "description": "The arguments to pass to the script or flow on success" + "$ref": "#/components/schemas/ScriptArgs" }, "ws_error_handler_muted": { "type": "boolean", - "description": "Whether the WebSocket error handler is muted" + "description": "If true, the workspace-level error handler will not be triggered for this schedule's failures" }, "retry": { - "$ref": "#/components/schemas/Retry", - "description": "The retry configuration for the schedule" + "$ref": "#/components/schemas/Retry" }, "no_flow_overlap": { "type": "boolean", - "description": "Whether the schedule should not run if a flow is already running" + "description": "If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)" }, "summary": { "type": "string", - "description": "The summary of the schedule" + "description": "Short summary describing the purpose of this schedule" }, "description": { "type": "string", - "description": "The description of the schedule" + "description": "Detailed description of what this schedule does" }, "tag": { "type": "string", - "description": "The tag of the schedule" + "description": "Worker tag to route jobs to specific worker groups" }, "paused_until": { "type": "string", - "description": "The date and time the schedule will be paused until", - "format": "date-time" + "format": "date-time", + "description": "ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time" }, "cron_version": { "type": "string", - "description": "The version of the cron schedule to use (last is v2)" + "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": [ @@ -25130,84 +32539,83 @@ "properties": { "schedule": { "type": "string", - "description": "The cron schedule to trigger the script or flow. Should include seconds." + "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": "The timezone to use for the cron schedule" + "description": "IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')" }, "args": { - "$ref": "#/components/schemas/ScriptArgs", - "description": "The arguments to pass to the script or flow" + "$ref": "#/components/schemas/ScriptArgs" }, "on_failure": { "type": "string", - "description": "The path to the script or flow to trigger on failure" + "description": "Path to a script or flow to run when the scheduled job fails" }, "on_failure_times": { "type": "number", - "description": "The number of times to retry on failure" + "description": "Number of consecutive failures before the on_failure handler is triggered (default 1)" }, "on_failure_exact": { "type": "boolean", - "description": "Whether the schedule should only run on the exact time" + "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", - "description": "The arguments to pass to the script or flow on failure" + "$ref": "#/components/schemas/ScriptArgs" }, "on_recovery": { "type": "string", - "description": "The path to the script or flow to trigger on recovery" + "description": "Path to a script or flow to run when the schedule recovers after failures" }, "on_recovery_times": { "type": "number", - "description": "The number of times to retry on recovery" + "description": "Number of consecutive successes before the on_recovery handler is triggered (default 1)" }, "on_recovery_extra_args": { - "$ref": "#/components/schemas/ScriptArgs", - "description": "The arguments to pass to the script or flow on recovery" + "$ref": "#/components/schemas/ScriptArgs" }, "on_success": { "type": "string", - "description": "The path to the script or flow to trigger on success" + "description": "Path to a script or flow to run after each successful execution" }, "on_success_extra_args": { - "$ref": "#/components/schemas/ScriptArgs", - "description": "The arguments to pass to the script or flow on success" + "$ref": "#/components/schemas/ScriptArgs" }, "ws_error_handler_muted": { "type": "boolean", - "description": "Whether the WebSocket error handler is muted" + "description": "If true, the workspace-level error handler will not be triggered for this schedule's failures" }, "retry": { - "$ref": "#/components/schemas/Retry", - "description": "The retry configuration for the schedule" + "$ref": "#/components/schemas/Retry" }, "no_flow_overlap": { "type": "boolean", - "description": "Whether the schedule should not run if a flow is already running" + "description": "If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)" }, "summary": { "type": "string", - "description": "The summary of the schedule" + "description": "Short summary describing the purpose of this schedule" }, "description": { "type": "string", - "description": "The description of the schedule" + "description": "Detailed description of what this schedule does" }, "tag": { "type": "string", - "description": "The tag of the schedule" + "description": "Worker tag to route jobs to specific worker groups" }, "paused_until": { "type": "string", - "description": "The date and time the schedule will be paused until", - "format": "date-time" + "format": "date-time", + "description": "ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time" }, "cron_version": { "type": "string", - "description": "The version of the cron schedule to use (last is v2)" + "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": [ @@ -25216,36 +32624,75 @@ "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" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when triggered" }, "email": { - "type": "string" + "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" + "type": "string", + "description": "The workspace this trigger belongs to" }, "edited_by": { - "type": "string" + "type": "string", + "description": "Username of the last person who edited this trigger" }, "edited_at": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of the last edit" }, "is_flow": { - "type": "boolean" + "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": [ @@ -25256,7 +32703,8 @@ "workspace_id", "edited_by", "edited_at", - "is_flow" + "is_flow", + "mode" ] }, "AuthenticationMethod": { @@ -25419,6 +32867,14 @@ "patch" ] }, + "HttpRequestType": { + "type": "string", + "enum": [ + "sync", + "async", + "sync_sse" + ] + }, "HttpTrigger": { "allOf": [ { @@ -25428,19 +32884,24 @@ "type": "object", "properties": { "route_path": { - "type": "string" + "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" + "type": "string", + "description": "S3 bucket path for static assets" }, "storage": { - "type": "string" + "type": "string", + "description": "Storage path for static assets" }, "filename": { - "type": "string" + "type": "string", + "description": "Filename for the static asset" } }, "required": [ @@ -25448,48 +32909,61 @@ ] }, "http_method": { - "$ref": "#/components/schemas/HttpMethod" + "$ref": "#/components/schemas/HttpMethod", + "description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint" }, "authentication_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)" }, "summary": { - "type": "string" + "type": "string", + "description": "Short summary describing the purpose of this trigger" }, "description": { - "type": "string" + "type": "string", + "description": "Detailed description of what this trigger does" }, - "is_async": { - "type": "boolean" + "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" + "$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" + "type": "boolean", + "description": "If true, serves static files from S3/storage instead of running a script" }, "workspaced_route": { - "type": "boolean" + "type": "boolean", + "description": "If true, the route includes the workspace ID in the path" }, "wrap_body": { - "type": "boolean" + "type": "boolean", + "description": "If true, wraps the request body in a 'body' parameter" }, "raw_string": { - "type": "boolean" + "type": "boolean", + "description": "If true, passes the request body as a raw string instead of parsing as JSON" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ "route_path", - "is_async", + "request_type", "authentication_method", "http_method", "is_static_website", @@ -25502,34 +32976,44 @@ "type": "object", "properties": { "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when triggered" }, "route_path": { - "type": "string" + "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" + "type": "boolean", + "description": "If true, the route includes the workspace ID in the path" }, "summary": { - "type": "string" + "type": "string", + "description": "Short summary describing the purpose of this trigger" }, "description": { - "type": "string" + "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" + "type": "string", + "description": "S3 bucket path for static assets" }, "storage": { - "type": "string" + "type": "string", + "description": "Storage path for static assets" }, "filename": { - "type": "string" + "type": "string", + "description": "Filename for the static asset" } }, "required": [ @@ -25537,37 +33021,55 @@ ] }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "http_method": { - "$ref": "#/components/schemas/HttpMethod" + "$ref": "#/components/schemas/HttpMethod", + "description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint" }, "authentication_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)" }, "is_async": { - "type": "boolean" + "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" + "$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" + "type": "boolean", + "description": "If true, serves static files from S3/storage instead of running a script" }, "wrap_body": { - "type": "boolean" + "type": "boolean", + "description": "If true, wraps the request body in a 'body' parameter" + }, + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "raw_string": { - "type": "boolean" + "type": "boolean", + "description": "If true, passes the request body as a raw string instead of parsing as JSON" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -25575,7 +33077,6 @@ "script_path", "route_path", "is_flow", - "is_async", "authentication_method", "http_method", "is_static_website" @@ -25585,34 +33086,44 @@ "type": "object", "properties": { "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when triggered" }, "route_path": { - "type": "string" + "type": "string", + "description": "The URL route path that will trigger this endpoint (e.g., 'api/myendpoint'). Must NOT start with a /." }, "summary": { - "type": "string" + "type": "string", + "description": "Short summary describing the purpose of this trigger" }, "description": { - "type": "string" + "type": "string", + "description": "Detailed description of what this trigger does" }, "workspaced_route": { - "type": "boolean" + "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" + "type": "string", + "description": "S3 bucket path for static assets" }, "storage": { - "type": "string" + "type": "string", + "description": "Storage path for static assets" }, "filename": { - "type": "string" + "type": "string", + "description": "Filename for the static asset" } }, "required": [ @@ -25620,37 +33131,52 @@ ] }, "authentication_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "http_method": { - "$ref": "#/components/schemas/HttpMethod" + "$ref": "#/components/schemas/HttpMethod", + "description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint" }, "is_async": { - "type": "boolean" + "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" + "$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" + "type": "boolean", + "description": "If true, serves static files from S3/storage instead of running a script" }, "wrap_body": { - "type": "boolean" + "type": "boolean", + "description": "If true, wraps the request body in a 'body' parameter" }, "raw_string": { - "type": "boolean" + "type": "boolean", + "description": "If true, passes the request body as a raw string instead of parsing as JSON" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -25658,7 +33184,6 @@ "script_path", "is_flow", "kind", - "is_async", "authentication_method", "http_method", "is_static_website" @@ -25687,6 +33212,9 @@ "email_count": { "type": "number" }, + "default_email_count": { + "type": "number" + }, "websocket_count": { "type": "number" }, @@ -25707,6 +33235,9 @@ }, "sqs_count": { "type": "number" + }, + "nextcloud_count": { + "type": "number" } } }, @@ -25719,23 +33250,25 @@ "type": "object", "properties": { "url": { - "type": "string" + "type": "string", + "description": "The WebSocket URL to connect to (can be a static URL or computed by a runnable)" }, "server_id": { - "type": "string" + "type": "string", + "description": "ID of the server currently handling this trigger (internal)" }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal)" }, "error": { - "type": "string" - }, - "enabled": { - "type": "boolean" + "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": { @@ -25752,53 +33285,68 @@ }, "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" + "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" + "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", - "enabled", "filters", - "can_return_message" + "can_return_message", + "can_return_error_result" ] }, "NewWebsocketTrigger": { "type": "object", "properties": { "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "url": { - "type": "string" + "type": "string", + "description": "The WebSocket URL to connect to (can be a static URL or computed by a runnable)" }, - "enabled": { - "type": "boolean" + "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": { @@ -25815,23 +33363,33 @@ }, "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" + "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" + "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" } }, @@ -25841,26 +33399,32 @@ "url", "is_flow", "filters", - "can_return_message" + "can_return_message", + "can_return_error_result" ] }, "EditWebsocketTrigger": { "type": "object", "properties": { "url": { - "type": "string" + "type": "string", + "description": "The WebSocket URL to connect to (can be a static URL or computed by a runnable)" }, "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "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": { @@ -25877,23 +33441,33 @@ }, "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" + "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" + "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" } }, @@ -25903,7 +33477,8 @@ "url", "is_flow", "filters", - "can_return_message" + "can_return_message", + "can_return_error_result" ] }, "WebsocketTriggerInitialMessage": { @@ -26009,51 +33584,59 @@ "type": "object", "properties": { "mqtt_resource_path": { - "type": "string" + "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" + "$ref": "#/components/schemas/MqttV3Config", + "description": "MQTT v3 specific configuration (clean_session)" }, "v5_config": { - "$ref": "#/components/schemas/MqttV5Config" + "$ref": "#/components/schemas/MqttV5Config", + "description": "MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval)" }, "client_id": { - "type": "string" + "type": "string", + "description": "MQTT client ID for this connection" }, "client_version": { - "$ref": "#/components/schemas/MqttClientVersion" + "$ref": "#/components/schemas/MqttClientVersion", + "description": "MQTT protocol version ('v3' or 'v5')" }, "server_id": { - "type": "string" + "type": "string", + "description": "ID of the server currently handling this trigger (internal)" }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal)" }, "error": { - "type": "string" - }, - "enabled": { - "type": "boolean" + "type": "string", + "description": "Last error message if the trigger failed" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ - "enabled", "subscribe_topics", "mqtt_resource_path" ] @@ -26062,46 +33645,58 @@ "type": "object", "properties": { "mqtt_resource_path": { - "type": "string" + "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" + "type": "string", + "description": "MQTT client ID for this connection" }, "v3_config": { - "$ref": "#/components/schemas/MqttV3Config" + "$ref": "#/components/schemas/MqttV3Config", + "description": "MQTT v3 specific configuration (clean_session)" }, "v5_config": { - "$ref": "#/components/schemas/MqttV5Config" + "$ref": "#/components/schemas/MqttV5Config", + "description": "MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval)" }, "client_version": { - "$ref": "#/components/schemas/MqttClientVersion" + "$ref": "#/components/schemas/MqttClientVersion", + "description": "MQTT protocol version ('v3' or 'v5')" }, "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26116,46 +33711,58 @@ "type": "object", "properties": { "mqtt_resource_path": { - "type": "string" + "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" + "type": "string", + "description": "MQTT client ID for this connection" }, "v3_config": { - "$ref": "#/components/schemas/MqttV3Config" + "$ref": "#/components/schemas/MqttV3Config", + "description": "MQTT v3 specific configuration (clean_session)" }, "v5_config": { - "$ref": "#/components/schemas/MqttV5Config" + "$ref": "#/components/schemas/MqttV5Config", + "description": "MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval)" }, "client_version": { - "$ref": "#/components/schemas/MqttClientVersion" + "$ref": "#/components/schemas/MqttClientVersion", + "description": "MQTT protocol version ('v3' or 'v5')" }, "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26172,16 +33779,20 @@ "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" + "type": "string", + "description": "The audience claim for OIDC tokens used in push authentication." }, "authenticate": { - "type": "boolean" + "type": "boolean", + "description": "If true, push messages will include OIDC authentication tokens." } }, "required": [ @@ -26196,18 +33807,23 @@ } ], "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" + "type": "string", + "description": "Path to the GCP resource containing service account credentials for authentication." }, "topic_id": { - "type": "string" + "type": "string", + "description": "Google Cloud Pub/Sub topic ID to subscribe to." }, "subscription_id": { - "type": "string" + "type": "string", + "description": "Google Cloud Pub/Sub subscription ID." }, "server_id": { - "type": "string" + "type": "string", + "description": "ID of the server currently handling this trigger (internal use)." }, "delivery_type": { "$ref": "#/components/schemas/DeliveryType" @@ -26220,29 +33836,30 @@ }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal use)." }, "error": { - "type": "string" - }, - "enabled": { - "type": "boolean" + "type": "string", + "description": "Last error message if the trigger failed." }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails." }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler." }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions." } }, "required": [ "gcp_resource_path", "topic_id", "subscription_id", - "enabled", "delivery_type", "subscription_mode" ] @@ -26257,21 +33874,26 @@ }, "GcpTriggerData": { "type": "object", + "description": "Data for creating or updating a Google Cloud Pub/Sub trigger.", "properties": { "gcp_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the GCP resource containing service account credentials for authentication." }, "subscription_mode": { "$ref": "#/components/schemas/SubscriptionMode" }, "topic_id": { - "type": "string" + "type": "string", + "description": "Google Cloud Pub/Sub topic ID to subscribe to." }, "subscription_id": { - "type": "string" + "type": "string", + "description": "Google Cloud Pub/Sub subscription ID." }, "base_endpoint": { - "type": "string" + "type": "string", + "description": "Base URL for push delivery endpoint." }, "delivery_type": { "$ref": "#/components/schemas/DeliveryType" @@ -26280,28 +33902,42 @@ "$ref": "#/components/schemas/PushConfig" }, "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger." }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received." }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script." }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "auto_acknowledge_msg": { - "type": "boolean" + "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" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails." }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler." }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions." } }, "required": [ @@ -26351,88 +33987,168 @@ "type": "object", "properties": { "queue_url": { - "type": "string" + "type": "string", + "description": "The full URL of the AWS SQS queue to poll for messages" }, "aws_auth_resource_type": { - "$ref": "#/components/schemas/AwsAuthResourceType" + "$ref": "#/components/schemas/AwsAuthResourceType", + "description": "Authentication type - 'credentials' for access key/secret, 'oidc' for OpenID Connect" }, "aws_resource_path": { - "type": "string" + "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" + "type": "string", + "description": "ID of the server currently handling this trigger (internal)" }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal)" }, "error": { - "type": "string" - }, - "enabled": { - "type": "boolean" + "type": "string", + "description": "Last error message if the trigger failed" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ "queue_url", "aws_resource_path", - "enabled", "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" + "type": "string", + "description": "The full URL of the AWS SQS queue to poll for messages" }, "aws_auth_resource_type": { - "$ref": "#/components/schemas/AwsAuthResourceType" + "$ref": "#/components/schemas/AwsAuthResourceType", + "description": "Authentication type - 'credentials' for access key/secret, 'oidc' for OpenID Connect" }, "aws_resource_path": { - "type": "string" + "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" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26448,40 +34164,50 @@ "type": "object", "properties": { "queue_url": { - "type": "string" + "type": "string", + "description": "The full URL of the AWS SQS queue to poll for messages" }, "aws_auth_resource_type": { - "$ref": "#/components/schemas/AwsAuthResourceType" + "$ref": "#/components/schemas/AwsAuthResourceType", + "description": "Authentication type - 'credentials' for access key/secret, 'oidc' for OpenID Connect" }, "aws_resource_path": { - "type": "string" + "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" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26607,40 +34333,45 @@ ], "type": "object", "properties": { - "enabled": { - "type": "boolean" - }, "postgres_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the PostgreSQL resource containing connection configuration" }, "publication_name": { - "type": "string" + "type": "string", + "description": "Name of the PostgreSQL publication to subscribe to for change data capture" }, "server_id": { - "type": "string" + "type": "string", + "description": "ID of the server currently handling this trigger (internal)" }, "replication_slot_name": { - "type": "string" + "type": "string", + "description": "Name of the PostgreSQL logical replication slot to use" }, "error": { - "type": "string" + "type": "string", + "description": "Last error message if the trigger failed" }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal)" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ - "enabled", "postgres_resource_path", "replication_slot_name", "publication_name" @@ -26650,37 +34381,47 @@ "type": "object", "properties": { "replication_slot_name": { - "type": "string" + "type": "string", + "description": "Name of the PostgreSQL logical replication slot to use" }, "publication_name": { - "type": "string" + "type": "string", + "description": "Name of the PostgreSQL publication to subscribe to for change data capture" }, "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when database changes are detected" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "postgres_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the PostgreSQL resource containing connection configuration" }, "publication": { - "$ref": "#/components/schemas/PublicationData" + "$ref": "#/components/schemas/PublicationData", + "description": "Configuration for creating/managing the publication (tables, operations)" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26695,37 +34436,47 @@ "type": "object", "properties": { "replication_slot_name": { - "type": "string" + "type": "string", + "description": "Name of the PostgreSQL logical replication slot to use" }, "publication_name": { - "type": "string" + "type": "string", + "description": "Name of the PostgreSQL publication to subscribe to for change data capture" }, "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when database changes are detected" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "postgres_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the PostgreSQL resource containing connection configuration" }, "publication": { - "$ref": "#/components/schemas/PublicationData" + "$ref": "#/components/schemas/PublicationData", + "description": "Configuration for creating/managing the publication (tables, operations)" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26747,82 +34498,129 @@ "type": "object", "properties": { "kafka_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the Kafka resource containing connection configuration" }, "group_id": { - "type": "string" + "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" + "type": "string", + "description": "ID of the server currently handling this trigger (internal)" }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal)" }, "error": { - "type": "string" - }, - "enabled": { - "type": "boolean" + "type": "string", + "description": "Last error message if the trigger failed" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ "kafka_resource_path", "group_id", "topics", - "enabled" + "filters" ] }, "NewKafkaTrigger": { "type": "object", "properties": { "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "kafka_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the Kafka resource containing connection configuration" }, "group_id": { - "type": "string" + "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" + ] } }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26831,41 +34629,67 @@ "is_flow", "kafka_resource_path", "group_id", - "topics" + "topics", + "filters" ] }, "EditKafkaTrigger": { "type": "object", "properties": { "kafka_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the Kafka resource containing connection configuration" }, "group_id": { - "type": "string" + "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" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26874,6 +34698,7 @@ "kafka_resource_path", "group_id", "topics", + "filters", "is_flow" ] }, @@ -26886,94 +34711,112 @@ "type": "object", "properties": { "nats_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the NATS resource containing connection configuration" }, "use_jetstream": { - "type": "boolean" + "type": "boolean", + "description": "If true, uses NATS JetStream for durable message delivery" }, "stream_name": { - "type": "string" + "type": "string", + "description": "JetStream stream name (required when use_jetstream is true)" }, "consumer_name": { - "type": "string" + "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" + "type": "string", + "description": "ID of the server currently handling this trigger (internal)" }, "last_server_ping": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp of last server heartbeat (internal)" }, "error": { - "type": "string" - }, - "enabled": { - "type": "boolean" + "type": "string", + "description": "Last error message if the trigger failed" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ "nats_resource_path", "use_jetstream", - "subjects", - "enabled" + "subjects" ] }, "NewNatsTrigger": { "type": "object", "properties": { "path": { - "type": "string" + "type": "string", + "description": "The unique path identifier for this trigger" }, "script_path": { - "type": "string" + "type": "string", + "description": "Path to the script or flow to execute when a message is received" }, "is_flow": { - "type": "boolean" + "type": "boolean", + "description": "True if script_path points to a flow, false if it points to a script" }, "nats_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the NATS resource containing connection configuration" }, "use_jetstream": { - "type": "boolean" + "type": "boolean", + "description": "If true, uses NATS JetStream for durable message delivery" }, "stream_name": { - "type": "string" + "type": "string", + "description": "JetStream stream name (required when use_jetstream is true)" }, "consumer_name": { - "type": "string" + "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" }, - "enabled": { - "type": "boolean" + "mode": { + "$ref": "#/components/schemas/TriggerMode" }, "error_handler_path": { - "type": "string" + "type": "string", + "description": "Path to a script or flow to run when the triggered job fails" }, "error_handler_args": { - "$ref": "#/components/schemas/ScriptArgs" + "$ref": "#/components/schemas/ScriptArgs", + "description": "Arguments to pass to the error handler" }, "retry": { - "$ref": "#/components/schemas/Retry" + "$ref": "#/components/schemas/Retry", + "description": "Retry configuration for failed executions" } }, "required": [ @@ -26989,29 +34832,143 @@ "type": "object", "properties": { "nats_resource_path": { - "type": "string" + "type": "string", + "description": "Path to the NATS resource containing connection configuration" }, "use_jetstream": { - "type": "boolean" + "type": "boolean", + "description": "If true, uses NATS JetStream for durable message delivery" }, "stream_name": { - "type": "string" + "type": "string", + "description": "JetStream stream name (required when use_jetstream is true)" }, "consumer_name": { - "type": "string" + "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" }, @@ -27028,9 +34985,6 @@ "required": [ "path", "script_path", - "nats_resource_path", - "use_jetstream", - "subjects", "is_flow" ] }, @@ -27062,6 +35016,9 @@ }, "InstanceGroup": { "type": "object", + "required": [ + "name" + ], "properties": { "name": { "type": "string" @@ -27075,6 +35032,46 @@ "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" @@ -27178,6 +35175,9 @@ }, "wm_memory_usage": { "type": "number" + }, + "job_isolation": { + "type": "string" } }, "required": [ @@ -27216,13 +35216,25 @@ }, "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" + "color", + "disabled" ] } } @@ -27253,6 +35265,25 @@ "name" ] }, + "CreateWorkspaceFork": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "parent_workspace_id" + ] + }, "Workspace": { "type": "object", "properties": { @@ -27270,12 +35301,85 @@ }, "color": { "type": "string" + }, + "parent_workspace_id": { + "type": "string", + "nullable": true } }, "required": [ "id", "name", - "owner" + "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": { @@ -27292,6 +35396,10 @@ }, "operator": { "type": "boolean" + }, + "parent_workspace_id": { + "type": "string", + "nullable": true } }, "required": [ @@ -27334,13 +35442,17 @@ }, "operator_only": { "type": "boolean" + }, + "first_time_user": { + "type": "boolean" } }, "required": [ "email", "login_type", "super_admin", - "verified" + "verified", + "first_time_user" ] }, "Flow": { @@ -27356,6 +35468,9 @@ "properties": { "lock_error_logs": { "type": "string" + }, + "version_id": { + "type": "number" } } } @@ -27501,6 +35616,9 @@ }, "branch_or_iteration_n": { "type": "integer" + }, + "flow_version": { + "type": "integer" } } }, @@ -27720,9 +35838,7 @@ "type": "string", "format": "date-time" }, - "value": { - "type": "object" - }, + "value": {}, "policy": { "$ref": "#/components/schemas/Policy" }, @@ -27742,6 +35858,12 @@ }, "custom_path": { "type": "string" + }, + "raw_app": { + "type": "boolean" + }, + "bundle_secret": { + "type": "string" } }, "required": [ @@ -27755,7 +35877,8 @@ "value", "policy", "execution_mode", - "extra_perms" + "extra_perms", + "raw_app" ] }, "AppWithLastVersionWDraft": { @@ -27906,6 +36029,12 @@ "public_resource": { "type": "boolean" }, + "advanced_permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/S3PermissionRule" + } + }, "secondary_storage": { "type": "object", "additionalProperties": { @@ -27985,12 +36114,150 @@ "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": { @@ -28130,6 +36397,21 @@ } } }, + "S3PermissionRule": { + "type": "object", + "properties": { + "pattern": { + "type": "string" + }, + "allow": { + "type": "string" + } + }, + "required": [ + "pattern", + "allow" + ] + }, "GitRepositorySettings": { "type": "object", "properties": { @@ -28189,21 +36471,6 @@ "git_repo_resource_path" ] }, - "UploadFilePart": { - "type": "object", - "properties": { - "part_number": { - "type": "integer" - }, - "tag": { - "type": "string" - } - }, - "required": [ - "part_number", - "tag" - ] - }, "MetricMetadata": { "type": "object", "properties": { @@ -28367,9 +36634,7 @@ "name": { "type": "string" }, - "value": { - "type": "object" - } + "value": {} }, "required": [ "name", @@ -28499,12 +36764,13 @@ "http", "websocket", "kafka", - "email", + "default_email", "nats", "postgres", "sqs", "mqtt", - "gcp" + "gcp", + "email" ] }, "Capture": { @@ -28608,6 +36874,153 @@ } } }, + "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": [ @@ -28697,12 +37110,26 @@ "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" + "repositories", + "total_count", + "per_page" ] } }, @@ -28776,7 +37203,8 @@ "type": "string", "enum": [ "script", - "flow" + "flow", + "job" ] }, "AssetUsageAccessType": { @@ -28785,14 +37213,16 @@ "r", "w", "rw" - ] + ], + "nullable": true }, "AssetKind": { "type": "string", "enum": [ "s3object", "resource", - "ducklake" + "ducklake", + "datatable" ] }, "Asset": { @@ -28810,10 +37240,341 @@ "kind" ] }, - "schemas-StaticTransform": { + "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": { - "value": {}, + "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": [ @@ -28822,15 +37583,16 @@ } }, "required": [ - "value", "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" + "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", @@ -28844,37 +37606,61 @@ "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" + "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" + "type": "string", + "description": "The script source code. Should export a 'main' function" }, "language": { "type": "string", + "description": "Programming language for this script", "enum": [ "deno", "bun", @@ -28890,14 +37676,23 @@ "oracledb", "graphql", "nativets", - "php" + "php", + "rust", + "ansible", + "csharp", + "nu", + "java", + "ruby", + "duckdb" ] }, "path": { - "type": "string" + "type": "string", + "description": "Optional path for saving this script" }, "lock": { - "type": "string" + "type": "string", + "description": "Lock file content for dependencies" }, "type": { "type": "string", @@ -28906,22 +37701,28 @@ ] }, "tag": { - "type": "string" + "type": "string", + "description": "Worker group tag for execution routing" }, "concurrent_limit": { - "type": "number" + "type": "number", + "description": "Maximum concurrent executions of this script" }, "concurrency_time_window_s": { - "type": "number" + "type": "number", + "description": "Time window for concurrent_limit" }, "custom_concurrency_key": { - "type": "string" + "type": "string", + "description": "Custom key for grouping concurrent executions" }, "is_trigger": { - "type": "boolean" + "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": [ @@ -28930,18 +37731,23 @@ ], "properties": { "path": { - "type": "string" + "type": "string", + "description": "Path to the asset" }, "kind": { "type": "string", + "description": "Type of asset", "enum": [ "s3object", "resource", - "ducklake" + "ducklake", + "datatable" ] }, "access_type": { "type": "string", + "nullable": true, + "description": "Access level for this asset", "enum": [ "r", "w", @@ -28950,6 +37756,8 @@ }, "alt_access_type": { "type": "string", + "nullable": true, + "description": "Alternative access level", "enum": [ "r", "w", @@ -28969,18 +37777,22 @@ }, "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" + "type": "string", + "description": "Path to the script in the workspace (e.g., 'f/scripts/send_email')" }, "hash": { - "type": "string" + "type": "string", + "description": "Optional specific version hash of the script to use" }, "type": { "type": "string", @@ -28989,10 +37801,12 @@ ] }, "tag_override": { - "type": "string" + "type": "string", + "description": "Override the script's default worker group tag" }, "is_trigger": { - "type": "boolean" + "type": "boolean", + "description": "If true, this script is a trigger that can start the flow" } }, "required": [ @@ -29003,15 +37817,18 @@ }, "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" + "type": "string", + "description": "Path to the flow in the workspace (e.g., 'f/flows/process_user')" }, "type": { "type": "string", @@ -29028,24 +37845,30 @@ }, "schemas-FlowModule": { "type": "object", + "description": "A single step in a flow. Can be a script, subflow, loop, or branch", "properties": { "id": { - "type": "string" + "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" + "type": "string", + "description": "JavaScript expression that returns true to skip. Can use 'flow_input' or 'results.'" } }, "required": [ @@ -29053,70 +37876,95 @@ ] }, "sleep": { + "description": "Delay before executing this step (in seconds or as expression)", "$ref": "#/components/schemas/schemas-InputTransform" }, "cache_ttl": { - "type": "number" + "type": "number", + "description": "Cache duration in seconds for this step's results" }, - "timeout": { - "type": "number" - }, - "delete_after_use": { + "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" + "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" + "type": "boolean", + "description": "If true, return mock value instead of executing" }, - "return_value": {} + "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" + "type": "integer", + "description": "Number of approvals required before continuing" }, "timeout": { - "type": "integer" + "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" + "type": "object", + "description": "JSON Schema for the resume form" } } }, "user_auth_required": { - "type": "boolean" + "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" + "type": "boolean", + "description": "If true, the user who started the flow cannot approve" }, "hide_cancel": { - "type": "boolean" + "type": "boolean", + "description": "If true, hide the cancel button on the approval form" }, "continue_on_disapprove_timeout": { - "type": "boolean" + "type": "boolean", + "description": "If true, continue flow on timeout instead of canceling" } } }, "priority": { - "type": "number" + "type": "number", + "description": "Execution priority for this step (higher numbers run first)" }, "continue_on_error": { - "type": "boolean" + "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" } }, @@ -29127,18 +37975,22 @@ }, "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" + "type": "boolean", + "description": "If true, iteration failures don't stop the loop. Failed iterations return null" }, "type": { "type": "string", @@ -29147,10 +37999,15 @@ ] }, "parallel": { - "type": "boolean" + "type": "boolean", + "description": "If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency" }, "parallelism": { - "type": "integer" + "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": [ @@ -29162,15 +38019,18 @@ }, "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" + "type": "boolean", + "description": "If true, iteration failures don't stop the loop. Failed iterations return null" }, "type": { "type": "string", @@ -29179,10 +38039,15 @@ ] }, "parallel": { - "type": "boolean" + "type": "boolean", + "description": "If true, iterations run concurrently (use with caution in while loops)" }, "parallelism": { - "type": "integer" + "description": "Maximum number of concurrent iterations when parallel=true", + "$ref": "#/components/schemas/schemas-InputTransform" + }, + "squash": { + "type": "boolean" } }, "required": [ @@ -29193,20 +38058,25 @@ }, "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" + "type": "string", + "description": "Short description of this branch condition" }, "expr": { - "type": "string" + "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" } @@ -29220,12 +38090,10 @@ }, "default": { "type": "array", + "description": "Steps to execute if no branch expressions match", "items": { "$ref": "#/components/schemas/schemas-FlowModule" - }, - "required": [ - "modules" - ] + } }, "type": { "type": "string", @@ -29242,20 +38110,25 @@ }, "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" + "type": "string", + "description": "Short description of this branch's purpose" }, "skip_failure": { - "type": "boolean" + "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" } @@ -29273,7 +38146,8 @@ ] }, "parallel": { - "type": "boolean" + "type": "boolean", + "description": "If true, all branches execute concurrently. If false, they execute sequentially" } }, "required": [ @@ -29283,6 +38157,7 @@ }, "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", @@ -29291,14 +38166,240 @@ ] }, "flow": { - "type": "boolean" + "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" @@ -29323,6 +38424,9 @@ }, { "$ref": "#/components/schemas/schemas-Identity" + }, + { + "$ref": "#/components/schemas/schemas-AiAgent" } ], "discriminator": { @@ -29335,21 +38439,262 @@ "whileloopflow": "#/components/schemas/schemas-WhileloopFlow", "branchone": "#/components/schemas/schemas-BranchOne", "branchall": "#/components/schemas/schemas-BranchAll", - "identity": "#/components/schemas/schemas-Identity" + "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" + "type": "boolean", + "description": "If true, following steps are skipped when this condition triggers" }, "expr": { - "type": "string" + "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" + "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": [ @@ -29358,77 +38703,226 @@ }, "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" + "type": "integer", + "description": "Number of retry attempts" }, "seconds": { - "type": "integer" + "type": "integer", + "description": "Seconds to wait between retries" } } }, "exponential": { "type": "object", + "description": "Retry with exponential backoff (delay doubles each time)", "properties": { "attempts": { - "type": "integer" + "type": "integer", + "description": "Number of retry attempts" }, "multiplier": { - "type": "integer" + "type": "integer", + "description": "Multiplier for exponential backoff" }, "seconds": { - "type": "integer" + "type": "integer", + "minimum": 1, + "description": "Initial delay in seconds" }, "random_factor": { "type": "integer", "minimum": 0, - "maximum": 100 + "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" + "type": "boolean", + "description": "If true, all steps run on the same worker for better performance" }, "concurrent_limit": { - "type": "number" + "type": "number", + "description": "Maximum number of concurrent executions of this flow" }, "concurrency_key": { - "type": "string" + "type": "string", + "description": "Expression to group concurrent executions (e.g., by user ID)" }, "concurrency_time_window_s": { - "type": "number" + "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" + "type": "string", + "description": "JavaScript expression to conditionally skip the entire flow" }, "cache_ttl": { - "type": "number" + "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" + "type": "number", + "description": "Execution priority (higher numbers run first)" }, "early_return": { - "type": "string" + "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": [ @@ -29472,6 +38966,9 @@ "type": "array", "items": {} }, + "itered_len": { + "type": "integer" + }, "args": {} } }, @@ -29487,6 +38984,23 @@ "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": { @@ -29547,6 +39061,106 @@ }, "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": [ diff --git a/backend/windmill-api/openapi-deref.yaml b/backend/windmill-api/openapi-deref.yaml index 70cc786faf..a500f2e8ee 100644 --- a/backend/windmill-api/openapi-deref.yaml +++ b/backend/windmill-api/openapi-deref.yaml @@ -1,6 +1,6 @@ openapi: 3.0.3 info: - version: 1.520.1 + version: 1.633.1 title: Windmill API contact: name: Windmill Team @@ -33,6 +33,222 @@ paths: text/plain: schema: type: string + /health/status: + get: + summary: health status + description: > + Health status endpoint. Returns cached health status (database + connectivity, worker count). + + Cache TTL is fixed at 5 seconds. Use force=true query parameter to + bypass cache. + + Note: This endpoint is intentionally different from Kubernetes probes to + avoid confusion. + + For k8s liveness/readiness probes, use /version endpoint. + 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: + type: object + description: Health status response (cached with 5s TTL) + required: &ref_0 + - status + - checked_at + - database_healthy + - workers_alive + properties: &ref_1 + 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 + '503': + description: server is unhealthy (database unreachable) + content: + application/json: + schema: + type: object + description: Health status response (cached with 5s TTL) + required: *ref_0 + properties: *ref_1 + /health/detailed: + get: + summary: detailed health status + description: > + Returns detailed health information including database pool stats, + worker details, and queue status. + + Requires authentication. Use for monitoring dashboards and debugging. + + This endpoint always returns fresh data (no caching). + operationId: getHealthDetailed + tags: + - health + responses: + '200': + description: server is healthy or degraded + content: + application/json: + schema: + type: object + description: Detailed health status response (always fresh, no caching) + required: &ref_2 + - status + - checked_at + - version + - checks + properties: &ref_3 + 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: + type: object + description: Detailed health checks + required: &ref_308 + - database + - readiness + properties: &ref_309 + database: + type: object + description: Database health status + required: &ref_310 + - healthy + - latency_ms + - pool + properties: &ref_311 + healthy: + type: boolean + description: Whether the database is reachable + latency_ms: + type: integer + format: int64 + description: Database query latency in milliseconds + pool: + type: object + description: Database connection pool statistics + required: &ref_312 + - size + - idle + - max_connections + properties: &ref_313 + 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 + workers: + description: Workers health status + nullable: true + type: object + required: &ref_314 + - healthy + - active_count + - worker_groups + - min_version + - versions + properties: &ref_315 + 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 + queue: + description: Job queue status + nullable: true + type: object + required: &ref_316 + - pending_jobs + - running_jobs + properties: &ref_317 + 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 + readiness: + type: object + description: Server readiness status + required: &ref_318 + - healthy + properties: &ref_319 + healthy: + type: boolean + description: Whether the server is ready to accept requests + '503': + description: server is unhealthy (database unreachable) + content: + application/json: + schema: + type: object + description: Detailed health status response (always fresh, no caching) + required: *ref_2 + properties: *ref_3 /uptodate: get: summary: is backend up to date @@ -59,6 +275,40 @@ paths: 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 @@ -82,12 +332,12 @@ paths: - name: workspace in: path required: true - schema: &ref_0 + schema: &ref_4 type: string - name: id in: path required: true - schema: &ref_41 + schema: &ref_61 type: integer responses: '200': @@ -96,7 +346,9 @@ paths: application/json: schema: type: object - properties: &ref_1 + properties: &ref_5 + workspace_id: + type: string id: type: integer timestamp: @@ -205,7 +457,8 @@ paths: type: object span: type: string - required: &ref_2 + required: &ref_6 + - workspace_id - id - timestamp - username @@ -221,38 +474,38 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: &ref_5 + schema: &ref_13 type: integer - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: &ref_6 + schema: &ref_14 type: integer - name: before description: filter on started before (inclusive) timestamp in: query - schema: &ref_200 + schema: &ref_260 type: string format: date-time - name: after description: filter on created after (exclusive) timestamp in: query - schema: &ref_201 + schema: &ref_261 type: string format: date-time - name: username description: filter on exact username of user in: query - schema: &ref_209 + schema: &ref_269 type: string - name: operation description: filter on exact or prefix name of operation in: query - schema: &ref_210 + schema: &ref_270 type: string - name: operations in: query @@ -267,12 +520,12 @@ paths: - name: resource description: filter on exact or prefix name of resource in: query - schema: &ref_211 + schema: &ref_271 type: string - name: action_kind description: filter on type of operation in: query - schema: &ref_212 + schema: &ref_272 type: string enum: - Create @@ -293,8 +546,8 @@ paths: type: array items: type: object - properties: *ref_1 - required: *ref_2 + properties: *ref_5 + required: *ref_6 /auth/login: post: security: [] @@ -309,12 +562,12 @@ paths: application/json: schema: type: object - properties: &ref_251 + properties: &ref_357 email: type: string password: type: string - required: &ref_252 + required: &ref_358 - email - password responses: @@ -351,6 +604,87 @@ paths: 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: + type: object + properties: &ref_7 + message: + type: string + required: &ref_8 + - message + '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: + type: object + properties: *ref_7 + required: *ref_8 + '400': + description: invalid or expired token /w/{workspace}/users/get/{username}: get: summary: get user (require admin privilege) @@ -362,7 +696,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: username in: path required: true @@ -375,7 +709,7 @@ paths: application/json: schema: type: object - properties: &ref_10 + properties: &ref_26 email: type: string username: @@ -405,7 +739,31 @@ paths: type: array items: type: string - required: &ref_11 + added_via: + nullable: true + allOf: + - type: object + properties: &ref_354 + 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: &ref_355 + - source + required: &ref_27 - email - username - is_admin @@ -426,7 +784,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: username in: path required: true @@ -439,7 +797,7 @@ paths: application/json: schema: type: object - properties: &ref_253 + properties: &ref_359 is_admin: type: boolean operator: @@ -463,11 +821,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: &ref_31 + schema: &ref_48 type: string responses: '200': @@ -736,7 +1094,7 @@ paths: type: array items: type: object - properties: &ref_3 + properties: &ref_9 email: type: string password_hash: @@ -753,7 +1111,7 @@ paths: type: boolean username: type: string - required: &ref_4 + required: &ref_10 - email - super_admin - verified @@ -780,8 +1138,32 @@ paths: type: array items: type: object - properties: *ref_3 - required: *ref_4 + properties: *ref_9 + required: *ref_10 + /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) @@ -793,7 +1175,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: username in: path required: true @@ -806,12 +1188,44 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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 @@ -819,7 +1233,7 @@ paths: application/json: schema: type: array - items: &ref_376 + items: &ref_498 type: object properties: workspace_id: @@ -840,10 +1254,23 @@ paths: 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 /workspaces/list: get: summary: list all workspaces visible to me @@ -859,7 +1286,7 @@ paths: type: array items: type: object - properties: &ref_7 + properties: &ref_11 id: type: string name: @@ -870,10 +1297,14 @@ paths: type: string color: type: string - required: &ref_8 + parent_workspace_id: + type: string + nullable: true + required: &ref_12 - id - name - owner + - created_at /workspaces/allowed_domain_auto_invite: get: summary: is domain allowed for auto invi @@ -900,7 +1331,7 @@ paths: application/json: schema: type: object - properties: &ref_325 + properties: &ref_439 email: type: string workspaces: @@ -919,7 +1350,7 @@ paths: operator_settings: nullable: true type: object - required: &ref_12 + required: &ref_28 - runs - schedules - resources @@ -930,7 +1361,7 @@ paths: - groups - folders - workers - properties: &ref_13 + properties: &ref_29 runs: type: boolean description: Whether operators can view runs @@ -961,14 +1392,43 @@ paths: workers: type: boolean description: Whether operators can view workers page + parent_workspace_id: + type: string + nullable: true + created_by: + type: string + nullable: true + disabled: + type: boolean required: - id - name - username - color - required: &ref_326 + - disabled + required: &ref_440 - email - workspaces + /w/{workspace}/workspaces/get_as_superadmin: + get: + summary: get workspace as super admin (require to be super admin) + operationId: getWorkspaceAsSuperAdmin + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: workspace + content: + application/json: + schema: + type: object + properties: *ref_11 + required: *ref_12 /workspaces/list_as_superadmin: get: summary: list all workspaces as super admin (require to be super admin) @@ -979,11 +1439,11 @@ paths: - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: workspaces @@ -993,8 +1453,8 @@ paths: type: array items: type: object - properties: *ref_7 - required: *ref_8 + properties: *ref_11 + required: *ref_12 /workspaces/create: post: summary: create workspace @@ -1008,7 +1468,7 @@ paths: application/json: schema: type: object - properties: &ref_327 + properties: &ref_441 id: type: string name: @@ -1017,7 +1477,7 @@ paths: type: string color: type: string - required: &ref_328 + required: &ref_442 - id - name responses: @@ -1027,6 +1487,72 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: new forked workspace + required: true + content: + application/json: + schema: + type: object + properties: &ref_15 + id: + type: string + name: + type: string + color: + type: string + required: &ref_16 + - id + - name + - parent_workspace_id + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: new forked workspace + required: true + content: + application/json: + schema: + type: object + properties: *ref_15 + required: *ref_16 + responses: + '201': + description: forked workspace created + content: + text/plain: + schema: + type: string /workspaces/exists: post: summary: exists workspace @@ -1079,10 +1605,82 @@ paths: text/plain: schema: type: boolean - /settings/databases_exist: + /settings/refresh_custom_instance_user_pwd: post: - summary: checks that all given databases exist or else return the ones that don't - operationId: databasesExist + 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: + type: object + required: &ref_19 + - logs + - success + properties: &ref_20 + logs: + type: object + properties: &ref_407 + super_admin: + type: string + enum: &ref_17 + - OK + - SKIP + - FAIL + database_credentials: + type: string + enum: *ref_17 + valid_dbname: + type: string + enum: *ref_17 + created_database: + type: string + enum: *ref_17 + db_connect: + type: string + enum: *ref_17 + grant_permissions: + type: string + enum: *ref_17 + 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: + type: string + enum: &ref_18 + - ducklake + - datatable + /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: @@ -1090,26 +1688,11 @@ paths: content: application/json: schema: - type: array - items: - type: string - responses: - '200': - description: databases that do not exist - content: - application/json: - schema: - type: array - items: + type: object + properties: + tag: type: string - /settings/create_ducklake_database/{name}: - post: - summary: >- - Runs CREATE DATABASE on the Windmill Postgres and grants access to the - ducklake_user - operationId: createDucklakeDatabase - tags: - - setting + enum: *ref_18 parameters: - in: path name: name @@ -1122,7 +1705,10 @@ paths: description: status content: application/json: - schema: {} + schema: + type: object + required: *ref_19 + properties: *ref_20 /settings/global/{key}: get: summary: get global settings @@ -1133,7 +1719,7 @@ paths: - name: key in: path required: true - schema: &ref_9 + schema: &ref_21 type: string responses: '200': @@ -1150,7 +1736,7 @@ paths: - name: key in: path required: true - schema: *ref_9 + schema: *ref_21 requestBody: description: value set required: true @@ -1297,7 +1883,7 @@ paths: type: array items: type: object - properties: &ref_34 + properties: &ref_51 id: type: integer description: Unique identifier for the alert @@ -1425,6 +2011,19 @@ paths: 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 @@ -1521,14 +2120,186 @@ paths: type: array items: type: object - properties: &ref_363 + properties: &ref_481 name: type: string - value: - type: object - required: &ref_364 + value: {} + required: &ref_482 - name - value + /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: + type: object + required: &ref_331 + - keys + properties: &ref_332 + keys: + type: array + items: + type: object + additionalProperties: true + description: Array of JSON Web Keys for JWT verification + /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: + type: object + required: &ref_22 + - address + - mount_path + properties: &ref_23 + 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) + 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: + type: object + required: *ref_22 + properties: *ref_23 + responses: + '200': + description: migration report + content: + application/json: + schema: + type: object + required: &ref_24 + - total_secrets + - migrated_count + - failed_count + - failures + properties: &ref_25 + 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: + type: object + required: &ref_329 + - workspace_id + - path + - error + properties: &ref_330 + 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 + description: Details of any failures encountered during migration + /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: + type: object + required: *ref_22 + properties: *ref_23 + responses: + '200': + description: migration report + content: + application/json: + schema: + type: object + required: *ref_24 + properties: *ref_25 /users/email: get: summary: get current user email (if logged in) @@ -1577,6 +2348,8 @@ paths: properties: progress: type: integer + skipped_all: + type: boolean post: summary: update tutorial progress operationId: updateTutorialProgress @@ -1592,6 +2365,8 @@ paths: properties: progress: type: integer + skipped_all: + type: boolean responses: '200': description: tutorial progress @@ -1645,8 +2420,6 @@ paths: type: string endpoint_sync: type: string - endpoint_openai_sync: - type: string summary: type: string description: @@ -1657,7 +2430,6 @@ paths: - workspace - endpoint_async - endpoint_sync - - endpoint_openai_sync - summary - kind /users/whoami: @@ -1673,7 +2445,7 @@ paths: application/json: schema: type: object - properties: &ref_14 + properties: &ref_30 email: type: string login_type: @@ -1695,11 +2467,14 @@ paths: type: string operator_only: type: boolean - required: &ref_15 + first_time_user: + type: boolean + required: &ref_31 - email - login_type - super_admin - verified + - first_time_user /users/list_invites: get: summary: list all workspace invites @@ -1715,7 +2490,7 @@ paths: type: array items: type: object - properties: &ref_16 + properties: &ref_32 workspace_id: type: string email: @@ -1724,7 +2499,10 @@ paths: type: boolean operator: type: boolean - required: &ref_17 + parent_workspace_id: + type: string + nullable: true + required: &ref_33 - workspace_id - email - is_admin @@ -1739,7 +2517,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: user @@ -1747,8 +2525,8 @@ paths: application/json: schema: type: object - properties: *ref_10 - required: *ref_11 + properties: *ref_26 + required: *ref_27 /w/{workspace}/github_app/token: post: summary: get github app token @@ -1759,7 +2537,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: jwt job token required: true @@ -1794,7 +2572,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: required: true content: @@ -1827,7 +2605,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: installation_id in: path required: true @@ -1959,7 +2737,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceInvite required: true @@ -1974,6 +2752,9 @@ paths: type: boolean operator: type: boolean + parent_workspace_id: + type: string + nullable: true required: - email - is_admin @@ -1995,7 +2776,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceInvite required: true @@ -2033,7 +2814,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceInvite required: true @@ -2069,7 +2850,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2087,7 +2868,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2105,7 +2886,12 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - name: only_delete_forks + in: query + required: false + schema: + type: boolean responses: '200': description: status @@ -2123,7 +2909,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2141,7 +2927,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2159,7 +2945,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: content: application/json: @@ -2187,7 +2973,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: content: application/json: @@ -2217,7 +3003,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: content: application/json: @@ -2243,7 +3029,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: username in: path required: true @@ -2256,8 +3042,8 @@ paths: application/json: schema: type: object - properties: *ref_10 - required: *ref_11 + properties: *ref_26 + required: *ref_27 /w/{workspace}/workspaces/operator_settings: post: operationId: updateOperatorSettings @@ -2271,7 +3057,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: required: true content: @@ -2279,8 +3065,8 @@ paths: schema: nullable: true type: object - required: *ref_12 - properties: *ref_13 + required: *ref_28 + properties: *ref_29 responses: '200': description: Operator settings updated successfully @@ -2288,6 +3074,173 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: object + required: &ref_490 + - all_ahead_items_visible + - all_behind_items_visible + - skipped_comparison + - diffs + - summary + properties: &ref_491 + 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: + type: object + required: &ref_492 + - kind + - path + - ahead + - behind + - has_changes + - exists_in_source + - exists_in_fork + properties: &ref_493 + 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 + summary: + description: Summary statistics of the comparison + type: object + required: &ref_494 + - total_diffs + - total_ahead + - total_behind + - scripts_changed + - flows_changed + - apps_changed + - resources_changed + - variables_changed + - resource_types_changed + - folders_changed + - conflicts + properties: &ref_495 + 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) + /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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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 @@ -2317,11 +3270,11 @@ paths: - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: active_only in: query description: filter only active users @@ -2336,8 +3289,8 @@ paths: type: array items: type: object - properties: *ref_14 - required: *ref_15 + properties: *ref_30 + required: *ref_31 /w/{workspace}/workspaces/list_pending_invites: get: summary: list pending invites for a workspace @@ -2348,7 +3301,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: user @@ -2358,8 +3311,8 @@ paths: type: array items: type: object - properties: *ref_16 - required: *ref_17 + properties: *ref_32 + required: *ref_33 /w/{workspace}/workspaces/get_settings: get: summary: get settings @@ -2370,7 +3323,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2387,18 +3340,47 @@ paths: 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 - auto_invite_domain: + teams_team_guid: type: string - auto_invite_operator: - type: boolean - auto_add: - type: boolean + auto_invite: + type: object + description: Configuration for auto-inviting users to the workspace + properties: &ref_320 + 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 plan: type: string customer_id: @@ -2409,29 +3391,29 @@ paths: type: string ai_config: type: object - properties: &ref_21 + properties: &ref_37 providers: type: object additionalProperties: type: object - properties: &ref_238 + properties: &ref_340 resource_path: type: string models: type: array items: type: string - required: &ref_239 + required: &ref_341 - resource_path - models default_model: type: object - properties: &ref_18 + properties: &ref_34 model: type: string provider: type: string - enum: &ref_237 + enum: &ref_339 - openai - azure_openai - anthropic @@ -2441,25 +3423,56 @@ paths: - groq - openrouter - togetherai + - aws_bedrock - customai - required: &ref_19 + required: &ref_35 - model - provider code_completion_model: type: object - properties: *ref_18 - required: *ref_19 + properties: *ref_34 + required: *ref_35 + custom_prompts: + type: object + additionalProperties: + type: string + max_tokens_per_model: + type: object + additionalProperties: + type: integer + minimum: 1 + maximum: 2000000 error_handler: - type: string - error_handler_extra_args: type: object - description: The arguments to pass to the script or flow - additionalProperties: &ref_22 {} - error_handler_muted_on_cancel: - type: boolean + description: Configuration for the workspace error handler + properties: &ref_321 + path: + type: string + description: Path to the error handler script or flow + extra_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + muted_on_cancel: + type: boolean + default: false + muted_on_user_path: + type: boolean + default: false + success_handler: + type: object + description: Configuration for the workspace success handler + properties: &ref_322 + path: + type: string + description: Path to the success handler script or flow + extra_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true large_file_storage: type: object - properties: &ref_23 + properties: &ref_38 type: type: string enum: @@ -2476,6 +3489,18 @@ paths: type: string public_resource: type: boolean + advanced_permissions: + type: array + items: + type: object + properties: &ref_465 + pattern: + type: string + allow: + type: string + required: &ref_466 + - pattern + - allow secondary_storage: type: object additionalProperties: @@ -2499,9 +3524,9 @@ paths: type: boolean ducklake: type: object - required: &ref_24 + required: &ref_39 - ducklakes - properties: &ref_25 + properties: &ref_40 ducklakes: type: object additionalProperties: @@ -2532,14 +3557,40 @@ paths: type: string required: - path + extra_args: + type: string + datatable: + type: object + required: &ref_41 + - datatables + properties: &ref_42 + 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 git_sync: type: object - properties: &ref_26 + properties: &ref_43 repositories: type: array items: type: object - properties: &ref_27 + properties: &ref_44 script_path: type: string git_repo_resource_path: @@ -2561,7 +3612,7 @@ paths: type: array items: type: string - enum: &ref_20 + enum: &ref_36 - script - flow - app @@ -2588,13 +3639,13 @@ paths: type: array items: type: string - enum: *ref_20 - required: &ref_28 + enum: *ref_36 + required: &ref_45 - script_path - git_repo_resource_path deploy_ui: type: object - properties: &ref_29 + properties: &ref_46 include_path: type: array items: @@ -2603,12 +3654,12 @@ paths: type: array items: type: string - enum: *ref_20 + enum: *ref_36 default_app: type: string default_scripts: type: object - properties: &ref_30 + properties: &ref_47 order: type: array items: @@ -2627,10 +3678,13 @@ paths: operator_settings: nullable: true type: object - required: *ref_12 - properties: *ref_13 - required: - - error_handler_muted_on_cancel + required: *ref_28 + properties: *ref_29 + 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 @@ -2641,7 +3695,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2662,7 +3716,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2680,7 +3734,12 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - name: skip_subscription_fetch + in: query + description: skip fetching subscription status from stripe + schema: + type: boolean responses: '200': description: status @@ -2697,9 +3756,14 @@ paths: 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 @@ -2710,7 +3774,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -2733,7 +3797,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: threshold alert info required: true @@ -2751,6 +3815,141 @@ paths: text/plain: schema: type: string + /w/{workspace}/workspaces/rebuild_dependency_map: + post: + summary: rebuild dependency map + operationId: rebuildDependencyMap + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: object + properties: &ref_444 + importer_path: + type: string + importer_kind: + type: string + enum: + - script + - flow + - app + importer_node_ids: + type: array + items: + type: string + nullable: true + required: &ref_445 + - importer_path + - importer_kind + /w/{workspace}/workspaces/get_dependents_amounts: + post: + summary: get dependents amounts for multiple imported paths + operationId: getDependentsAmounts + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + type: object + properties: &ref_446 + imported_path: + type: string + count: + type: integer + format: int64 + required: &ref_447 + - imported_path + - count + /w/{workspace}/workspaces/get_dependency_map: + get: + summary: get dependency map + operationId: getDependencyMap + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: dmap + content: + application/json: + schema: + type: array + items: + type: object + properties: &ref_443 + 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 /w/{workspace}/workspaces/edit_slack_command: post: summary: edit slack command @@ -2761,7 +3960,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceInvite required: true @@ -2779,6 +3978,81 @@ paths: text/plain: schema: type: string + /w/{workspace}/workspaces/slack_oauth_config: + get: + summary: get workspace slack oauth config + operationId: getWorkspaceSlackOauthConfig + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: status + content: + text/plain: + schema: + type: string /w/{workspace}/workspaces/edit_teams_command: post: summary: edit teams command @@ -2789,7 +4063,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceInvite required: true @@ -2817,24 +4091,53 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - 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: array - items: - type: object - properties: - team_name: - type: string - team_id: - type: string + 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 teams channels + summary: list available channels for a specific team operationId: listAvailableTeamsChannels tags: - workspace @@ -2842,25 +4145,32 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - name: team_id + in: query + description: Microsoft Teams team ID + required: true + schema: + type: string responses: '200': - description: status + description: List of channels for the specified team content: application/json: schema: - type: array - items: - type: object - properties: - channel_name: - type: string - channel_id: - type: string - service_url: - type: string - tenant_id: - type: string + 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 @@ -2871,7 +4181,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: connect teams required: true @@ -2901,7 +4211,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: path to hub script to run and its corresponding args required: true @@ -2936,7 +4246,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: path to hub script to run and its corresponding args required: true @@ -2971,7 +4281,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: required: true content: @@ -2998,7 +4308,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceInvite required: true @@ -3020,6 +4330,40 @@ paths: text/plain: schema: type: string + /w/{workspace}/workspaces/edit_instance_groups: + post: + summary: edit instance groups + operationId: editInstanceGroups + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -3030,7 +4374,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceWebhook required: true @@ -3058,7 +4402,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceCopilotConfig required: true @@ -3066,7 +4410,7 @@ paths: application/json: schema: type: object - properties: *ref_21 + properties: *ref_37 responses: '200': description: status @@ -3084,7 +4428,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -3092,7 +4436,7 @@ paths: application/json: schema: type: object - properties: *ref_21 + properties: *ref_37 /w/{workspace}/workspaces/edit_error_handler: post: summary: edit error handler @@ -3103,23 +4447,100 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: WorkspaceErrorHandler required: true content: application/json: schema: - type: object - properties: - error_handler: - type: string - error_handler_extra_args: - type: object - description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - error_handler_muted_on_cancel: - type: boolean + description: >- + Request body for editing the workspace error handler. Accepts + both new grouped format and legacy flat format for backward + compatibility. + oneOf: &ref_323 + - type: object + description: New grouped format for editing error handler + properties: &ref_324 + path: + type: string + description: Path to the error handler script or flow + extra_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + muted_on_cancel: + type: boolean + default: false + muted_on_user_path: + type: boolean + default: false + - type: object + description: >- + Legacy flat format for editing error handler (deprecated, + use new format) + properties: &ref_325 + error_handler: + type: string + description: Path to the error handler script or flow + error_handler_extra_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + error_handler_muted_on_cancel: + type: boolean + default: false + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: WorkspaceSuccessHandler + required: true + content: + application/json: + schema: + description: >- + Request body for editing the workspace success handler. Accepts + both new grouped format and legacy flat format for backward + compatibility. + oneOf: &ref_326 + - type: object + description: New grouped format for editing success handler + properties: &ref_327 + path: + type: string + description: Path to the success handler script or flow + extra_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + - type: object + description: >- + Legacy flat format for editing success handler (deprecated, + use new format) + properties: &ref_328 + success_handler: + type: string + description: Path to the success handler script or flow + success_handler_extra_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true responses: '200': description: status @@ -3137,7 +4558,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: LargeFileStorage info required: true @@ -3148,7 +4569,7 @@ paths: properties: large_file_storage: type: object - properties: *ref_23 + properties: *ref_38 responses: '200': description: status @@ -3165,7 +4586,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -3175,6 +4596,71 @@ paths: type: array items: type: string + /w/{workspace}/workspaces/list_datatables: + get: + summary: list Datatables + operationId: listDataTables + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: schemas of all datatables + content: + application/json: + schema: + type: array + items: + type: object + required: &ref_461 + - datatable_name + - schemas + properties: &ref_462 + 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 /w/{workspace}/workspaces/edit_ducklake_config: post: summary: edit ducklake settings @@ -3185,7 +4671,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Ducklake settings required: true @@ -3198,8 +4684,39 @@ paths: properties: settings: type: object - required: *ref_24 - properties: *ref_25 + required: *ref_39 + properties: *ref_40 + responses: + '200': + description: status + content: + application/json: + schema: {} + /w/{workspace}/workspaces/edit_datatable_config: + post: + summary: edit datatable settings + operationId: editDataTableConfig + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: DataTable settings + required: true + content: + application/json: + schema: + type: object + required: + - settings + properties: + settings: + type: object + required: *ref_41 + properties: *ref_42 responses: '200': description: status @@ -3216,7 +4733,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Workspace Git sync settings required: true @@ -3227,7 +4744,7 @@ paths: properties: git_sync_settings: type: object - properties: *ref_26 + properties: *ref_43 responses: '200': description: status @@ -3244,7 +4761,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Git sync repository settings to add or update required: true @@ -3258,8 +4775,8 @@ paths: description: The resource path of the git repository to update repository: type: object - properties: *ref_27 - required: *ref_28 + properties: *ref_44 + required: *ref_45 required: - git_repo_resource_path - repository @@ -3279,7 +4796,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Git sync repository to delete required: true @@ -3309,7 +4826,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Workspace deploy UI settings required: true @@ -3320,7 +4837,7 @@ paths: properties: deploy_ui_settings: type: object - properties: *ref_29 + properties: *ref_46 responses: '200': description: status @@ -3337,7 +4854,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Workspace default app required: true @@ -3365,14 +4882,14 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Workspace default app content: application/json: schema: type: object - properties: *ref_30 + properties: *ref_47 responses: '200': description: status @@ -3389,7 +4906,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -3397,7 +4914,7 @@ paths: application/json: schema: type: object - properties: *ref_30 + properties: *ref_47 /w/{workspace}/workspaces/set_environment_variable: post: summary: set environment variable @@ -3408,7 +4925,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Workspace default app required: true @@ -3440,7 +4957,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -3462,7 +4979,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: New encryption key required: true @@ -3494,7 +5011,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -3505,25 +5022,6 @@ paths: properties: default_app_path: type: string - /w/{workspace}/workspaces/get_large_file_storage_config: - get: - summary: get large file storage config - operationId: getLargeFileStorageConfig - tags: - - workspace - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - responses: - '200': - description: status - content: - application/json: - schema: - type: object - properties: *ref_23 /w/{workspace}/workspaces/usage: get: summary: get usage @@ -3534,7 +5032,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: usage @@ -3552,7 +5050,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: status @@ -3577,6 +5075,10 @@ paths: type: boolean sqs_used: type: boolean + email_used: + type: boolean + nextcloud_used: + type: boolean required: - http_routes_used - websocket_used @@ -3586,6 +5088,8 @@ paths: - mqtt_used - gcp_used - sqs_used + - email_used + - nextcloud_used /w/{workspace}/users/list: get: summary: list users @@ -3596,7 +5100,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: user @@ -3606,8 +5110,8 @@ paths: type: array items: type: object - properties: *ref_10 - required: *ref_11 + properties: *ref_26 + required: *ref_27 /w/{workspace}/users/list_usage: get: summary: list users usage @@ -3618,7 +5122,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: user @@ -3628,7 +5132,7 @@ paths: type: array items: type: object - properties: &ref_250 + properties: &ref_356 email: type: string executions: @@ -3643,7 +5147,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: user @@ -3663,7 +5167,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: username in: path required: true @@ -3691,7 +5195,7 @@ paths: type: array items: type: object - properties: &ref_339 + properties: &ref_456 name: type: string description: @@ -3701,7 +5205,7 @@ paths: type: array items: type: object - properties: &ref_337 + properties: &ref_454 value: type: string label: @@ -3711,11 +5215,11 @@ paths: nullable: true requires_resource_path: type: boolean - required: &ref_338 + required: &ref_455 - value - label - requires_resource_path - required: &ref_340 + required: &ref_457 - name - scopes /users/tokens/create: @@ -3731,7 +5235,7 @@ paths: application/json: schema: type: object - properties: &ref_254 + properties: &ref_360 label: type: string expiration: @@ -3763,7 +5267,7 @@ paths: application/json: schema: type: object - properties: &ref_255 + properties: &ref_361 label: type: string expiration: @@ -3773,7 +5277,7 @@ paths: type: string workspace_id: type: string - required: &ref_256 + required: &ref_362 - impersonate_email responses: '201': @@ -3815,11 +5319,11 @@ paths: - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: truncated token @@ -3829,7 +5333,7 @@ paths: type: array items: type: object - properties: &ref_54 + properties: &ref_82 label: type: string expiration: @@ -3849,7 +5353,7 @@ paths: type: string email: type: string - required: &ref_55 + required: &ref_83 - token_prefix - created_at - last_used_at @@ -3863,12 +5367,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: audience in: path required: true schema: type: string + - name: expires_in + in: query + schema: + type: number responses: '200': description: new oidc token @@ -3887,7 +5395,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: already_encrypted description: whether the variable is already encrypted (default false) in: query @@ -3900,7 +5408,7 @@ paths: application/json: schema: type: object - properties: &ref_259 + properties: &ref_365 path: type: string description: The path to the variable @@ -3923,7 +5431,7 @@ paths: type: string description: The expiration date of the variable format: date-time - required: &ref_260 + required: &ref_366 - path - value - is_secret @@ -3945,7 +5453,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new variable required: true @@ -3971,11 +5479,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: variable deleted @@ -3983,6 +5491,40 @@ paths: text/plain: schema: type: string + /w/{workspace}/variables/delete_bulk: + delete: + summary: delete variables in bulk + operationId: deleteVariablesBulk + tags: + - variable + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -3994,11 +5536,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: already_encrypted description: whether the variable is already encrypted (default false) in: query @@ -4011,7 +5553,7 @@ paths: application/json: schema: type: object - properties: &ref_261 + properties: &ref_367 path: type: string description: The path to the variable @@ -4042,11 +5584,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: decrypt_secret description: | ask to decrypt secret if this variable is secret @@ -4068,7 +5610,7 @@ paths: application/json: schema: type: object - properties: &ref_32 + properties: &ref_49 workspace_id: type: string path: @@ -4098,7 +5640,7 @@ paths: expires_at: type: string format: date-time - required: &ref_33 + required: &ref_50 - workspace_id - path - is_secret @@ -4113,11 +5655,17 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 + - name: allow_cache + description: | + allow getting a cached value for improved performance + in: query + schema: + type: boolean responses: '200': description: variable @@ -4135,11 +5683,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: variable @@ -4158,7 +5706,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path_start description: filter variables by path prefix in: query @@ -4167,11 +5715,11 @@ paths: - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: variable list @@ -4181,8 +5729,8 @@ paths: type: array items: type: object - properties: *ref_32 - required: *ref_33 + properties: *ref_49 + required: *ref_50 /w/{workspace}/variables/list_contextual: get: summary: list contextual variables @@ -4193,7 +5741,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: contextual variable list @@ -4203,7 +5751,7 @@ paths: type: array items: type: object - properties: &ref_257 + properties: &ref_363 name: type: string value: @@ -4212,7 +5760,7 @@ paths: type: string is_custom: type: boolean - required: &ref_258 + required: &ref_364 - name - value - description @@ -4227,7 +5775,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - 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 @@ -4247,7 +5804,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - in: query name: page schema: @@ -4281,7 +5838,7 @@ paths: type: array items: type: object - properties: *ref_34 + properties: *ref_51 total_rows: type: integer description: Total number of rows matching the query. @@ -4300,7 +5857,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - in: path name: id required: true @@ -4325,7 +5882,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: Successfully acknowledged all unacknowledged critical alerts. @@ -4344,7 +5901,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Boolean flag to mute critical alerts. required: true @@ -4367,6 +5924,215 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: list of protection rules + content: + application/json: + schema: + type: array + items: + type: object + description: >- + A workspace protection rule defining restrictions and bypass + permissions + required: &ref_499 + - name + - rules + - bypass_groups + - bypass_users + properties: &ref_500 + name: + type: string + description: Unique name for the protection rule + example: Production Protection + workspace_id: + type: string + rules: + type: array + description: Configuration of protection restrictions + items: &ref_52 + type: string + enum: &ref_501 + - DisableDirectDeployment + - DisableWorkspaceForking + bypass_groups: + type: array + description: Groups that can bypass this ruleset + items: &ref_53 + type: string + bypass_users: + type: array + description: Users that can bypass this ruleset + items: &ref_54 + type: string + post: + summary: create a new protection rule + operationId: createProtectionRule + tags: + - workspace + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + type: array + description: Configuration of protection restrictions + items: *ref_52 + bypass_groups: + type: array + description: Groups that can bypass this ruleset + items: *ref_53 + bypass_users: + type: array + description: Users that can bypass this ruleset + items: *ref_54 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: array + description: Configuration of protection restrictions + items: *ref_52 + bypass_groups: + type: array + description: Groups that can bypass this ruleset + items: *ref_53 + bypass_users: + type: array + description: Users that can bypass this ruleset + items: *ref_54 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: [] @@ -4378,7 +6144,7 @@ paths: - name: client_name in: path required: true - schema: &ref_35 + schema: &ref_55 type: string requestBody: description: Partially filled script @@ -4418,7 +6184,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: code endpoint required: true @@ -4479,7 +6245,7 @@ paths: - name: client_name in: path required: true - schema: *ref_35 + schema: *ref_55 requestBody: description: code endpoint required: true @@ -4502,7 +6268,7 @@ paths: application/json: schema: type: object - properties: &ref_36 + properties: &ref_56 access_token: type: string expires_in: @@ -4515,7 +6281,7 @@ paths: type: string grant_type: type: string - required: &ref_37 + required: &ref_57 - access_token /w/{workspace}/oauth/create_account: post: @@ -4527,7 +6293,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: code endpoint required: true @@ -4538,6 +6304,10 @@ paths: 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: @@ -4560,7 +6330,11 @@ paths: 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: @@ -4614,8 +6388,8 @@ paths: application/json: schema: type: object - properties: *ref_36 - required: *ref_37 + properties: *ref_56 + required: *ref_57 /w/{workspace}/oauth/refresh_token/{id}: post: summary: refresh token @@ -4626,11 +6400,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: &ref_38 + schema: &ref_58 type: integer requestBody: description: variable path @@ -4661,11 +6435,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_38 + schema: *ref_58 responses: '200': description: disconnected client @@ -4683,7 +6457,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: disconnected slack @@ -4701,7 +6475,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: disconnected teams @@ -4784,62 +6558,6 @@ paths: type: array items: type: string - /teams/sync: - post: - operationId: syncTeams - summary: synchronize Microsoft Teams information (teams/channels) - tags: - - teams - responses: - '200': - description: Teams information successfully synchronized - content: - application/json: - schema: - type: array - items: - type: object - required: &ref_372 - - team_id - - team_name - - channels - properties: &ref_373 - 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: - type: object - required: &ref_374 - - channel_id - - channel_name - - tenant_id - - service_url - properties: &ref_375 - 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/ /teams/activities: post: summary: send update to Microsoft Teams activity @@ -4884,7 +6602,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: update_if_exists description: update the resource if it already exists (default false) in: query @@ -4897,7 +6615,7 @@ paths: application/json: schema: type: object - properties: &ref_266 + properties: &ref_372 path: type: string description: The path to the resource @@ -4908,7 +6626,7 @@ paths: resource_type: type: string description: The resource_type associated with the resource - required: &ref_267 + required: &ref_373 - path - value - resource_type @@ -4930,11 +6648,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: resource deleted @@ -4942,6 +6660,40 @@ paths: text/plain: schema: type: string + /w/{workspace}/resources/delete_bulk: + delete: + summary: delete resources in bulk + operationId: deleteResourcesBulk + tags: + - resource + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -4953,11 +6705,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated resource required: true @@ -4965,7 +6717,7 @@ paths: application/json: schema: type: object - properties: &ref_268 + properties: &ref_374 path: type: string description: The path to the resource @@ -4993,11 +6745,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated resource required: true @@ -5025,11 +6777,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: resource @@ -5037,7 +6789,7 @@ paths: application/json: schema: type: object - properties: &ref_269 + properties: &ref_375 workspace_id: type: string path: @@ -5058,7 +6810,7 @@ paths: edited_at: type: string format: date-time - required: &ref_270 + required: &ref_376 - path - resource_type - is_oauth @@ -5072,17 +6824,22 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - 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 @@ -5099,17 +6856,49 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + - 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 @@ -5120,11 +6909,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: does resource exists @@ -5143,15 +6932,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: resource_type description: resource_types to list from, separated by ',', in: query @@ -5176,7 +6965,7 @@ paths: type: array items: type: object - properties: &ref_271 + properties: &ref_377 workspace_id: type: string path: @@ -5207,7 +6996,7 @@ paths: edited_at: type: string format: date-time - required: &ref_272 + required: &ref_378 - path - resource_type - is_oauth @@ -5223,7 +7012,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: resource list @@ -5240,6 +7029,40 @@ paths: required: - path - value + /w/{workspace}/resources/mcp_tools/{path}: + get: + summary: get MCP tools from resource + operationId: getMcpTools + tags: + - resource + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + 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 @@ -5250,11 +7073,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: &ref_180 + schema: &ref_235 type: string responses: '200': @@ -5283,7 +7106,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new resource_type required: true @@ -5291,7 +7114,7 @@ paths: application/json: schema: type: object - properties: &ref_39 + properties: &ref_59 workspace_id: type: string name: @@ -5306,7 +7129,7 @@ paths: format: date-time format_extension: type: string - required: &ref_40 + required: &ref_60 - name responses: '201': @@ -5325,7 +7148,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: map from resource type to file ext @@ -5342,11 +7165,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: resource_type deleted @@ -5364,11 +7187,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated resource_type required: true @@ -5376,7 +7199,7 @@ paths: application/json: schema: type: object - properties: &ref_273 + properties: &ref_379 schema: {} description: type: string @@ -5397,11 +7220,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: resource_type deleted @@ -5409,8 +7232,8 @@ paths: application/json: schema: type: object - properties: *ref_39 - required: *ref_40 + properties: *ref_59 + required: *ref_60 /w/{workspace}/resources/type/exists/{path}: get: summary: does resource_type exists @@ -5421,11 +7244,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: does resource_type exist @@ -5444,7 +7267,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: resource_type list @@ -5454,8 +7277,8 @@ paths: type: array items: type: object - properties: *ref_39 - required: *ref_40 + properties: *ref_59 + required: *ref_60 /w/{workspace}/resources/type/listnames: get: summary: list resource_types names @@ -5466,7 +7289,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: resource_type list @@ -5476,6 +7299,149 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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 @@ -5486,7 +7452,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: text description: query text in: query @@ -5594,7 +7560,7 @@ paths: - name: id in: path required: true - schema: *ref_41 + schema: *ref_61 responses: '200': description: flow @@ -5605,61 +7571,137 @@ paths: properties: flow: type: object - properties: &ref_68 + description: >- + Top-level flow definition containing metadata, + configuration, and the flow structure + properties: &ref_98 summary: type: string + description: Short description of what this flow does description: type: string + description: Detailed documentation for this flow value: type: object - properties: &ref_377 + description: >- + The flow structure containing modules and optional + preprocessor/failure handlers + properties: &ref_530 modules: type: array + description: >- + Array of steps that execute in sequence. Each step + can be a script, subflow, loop, or branch items: type: object - properties: &ref_44 + description: >- + A single step in a flow. Can be a script, + subflow, loop, or branch + properties: &ref_64 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: - oneOf: &ref_216 + description: >- + The actual implementation of a flow step. + Can be a script (inline or referenced), + subflow, loop, branch, or special module + type + oneOf: &ref_70 - type: object - properties: &ref_219 + 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: &ref_284 input_transforms: type: object + description: >- + Map of parameter names to their values + (static or JavaScript expressions). + These become the script's input + arguments additionalProperties: - oneOf: &ref_42 + 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_62 - type: object - properties: &ref_84 - value: {} + description: >- + Static value passed directly to the + step. Use for hardcoded values or + resource references like + '$res:path/to/resource' + properties: &ref_114 + value: + description: >- + The static value. For resources, use + format '$res:path/to/resource' type: type: string enum: - static - required: &ref_85 - - value + required: &ref_115 - type - type: object - properties: &ref_86 + 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: &ref_66 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: &ref_87 + required: &ref_67 - expr - type - discriminator: &ref_43 + - type: object + description: >- + Value resolved by the AI runtime for + this input. The AI engine decides how to + satisfy the parameter. + properties: &ref_68 + type: + type: string + enum: + - ai + required: &ref_69 + - type + discriminator: &ref_63 propertyName: type mapping: static: >- #/components/schemas/schemas-StaticTransform javascript: >- #/components/schemas/schemas-JavascriptTransform + ai: '#/components/schemas/schemas-AiTransform' 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 @@ -5676,26 +7718,49 @@ paths: - 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: @@ -5704,172 +7769,331 @@ paths: 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: &ref_220 + required: &ref_285 - type - content - language - input_transforms - type: object - properties: &ref_221 + description: >- + Reference to an existing script by path. + Use this when calling a previously saved + script instead of writing inline code + properties: &ref_286 input_transforms: type: object + description: >- + Map of parameter names to their values + (static or JavaScript expressions). + These become the script's input + arguments additionalProperties: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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 - required: &ref_222 + description: >- + If true, this script is a trigger that + can start the flow + required: &ref_287 - type - path - input_transforms - type: object - properties: &ref_223 + description: >- + Reference to an existing flow by path. + Use this to call another flow as a + subflow + properties: &ref_288 input_transforms: type: object + description: >- + Map of parameter names to their values + (static or JavaScript expressions). + These become the subflow's input + arguments additionalProperties: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 path: type: string + description: >- + Path to the flow in the workspace (e.g., + 'f/flows/process_user') type: type: string enum: - flow - required: &ref_224 + required: &ref_289 - type - path - input_transforms - type: object - properties: &ref_225 + 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: &ref_290 modules: type: array + description: >- + Steps to execute for each iteration. + These can reference the iteration value + via 'flow_input.iter.value' items: type: object - properties: *ref_44 - required: &ref_45 + description: >- + A single step in a flow. Can be a + script, subflow, loop, or branch + properties: *ref_64 + required: &ref_65 - value - id iterator: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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: - type: integer - required: &ref_226 + 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_62 + discriminator: *ref_63 + squash: + type: boolean + required: &ref_291 - modules - iterator - skip_failures - type - type: object - properties: &ref_227 + 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: &ref_292 modules: type: array + description: >- + Steps to execute in each iteration. Use + stop_after_if to control when the loop + ends items: type: object - properties: *ref_44 - required: *ref_45 + description: >- + A single step in a flow. Can be a + script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 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: - type: integer - required: &ref_228 + 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_62 + discriminator: *ref_63 + squash: + type: boolean + required: &ref_293 - modules - skip_failures - type - type: object - properties: &ref_229 + 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: &ref_294 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: type: object - properties: *ref_44 - required: *ref_45 + description: >- + A single step in a flow. Can be a + script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 required: - modules - expr default: type: array + description: >- + Steps to execute if no branch + expressions match items: type: object - properties: *ref_44 - required: *ref_45 - required: - - modules + description: >- + A single step in a flow. Can be a + script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 type: type: string enum: - branchone - required: &ref_230 + required: &ref_295 - branches - default - type - type: object - properties: &ref_231 + description: >- + Parallel branching where all branches + execute simultaneously. Unlike + BranchOne, all branches run regardless + of conditions. Useful for executing + independent tasks concurrently + properties: &ref_296 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: type: object - properties: *ref_44 - required: *ref_45 + description: >- + A single step in a flow. Can be a + script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 required: - modules type: @@ -5878,150 +8102,862 @@ paths: - branchall parallel: type: boolean - required: &ref_232 + description: >- + If true, all branches execute + concurrently. If false, they execute + sequentially + required: &ref_297 - branches - type - type: object - properties: &ref_233 + description: >- + Pass-through module that returns its + input unchanged. Useful for flow + structure or as a placeholder + properties: &ref_298 type: type: string enum: - identity flow: type: boolean - required: &ref_234 + description: >- + If true, marks this as a flow identity + (special handling) + required: &ref_299 - type - discriminator: &ref_217 - 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' + - 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: &ref_300 + input_transforms: + type: object + description: >- + Input parameters for the AI agent mapped + to their values + properties: + provider: + description: >- + Provider configuration - can be static + (ProviderConfig), JavaScript expression, + or AI-determined + oneOf: &ref_302 + - type: object + description: >- + Static provider configuration passed + directly to the AI agent + properties: &ref_515 + value: + type: object + description: >- + Complete AI provider configuration with + resource reference and model selection + properties: &ref_513 + kind: + type: string + description: Supported AI provider types + enum: &ref_277 + - openai + - azure_openai + - anthropic + - mistral + - deepseek + - googleai + - groq + - openrouter + - togetherai + - customai + - aws_bedrock + 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: &ref_514 + - kind + - resource + - model + type: + type: string + enum: + - static + required: &ref_516 + - type + - value + - 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: *ref_66 + required: *ref_67 + - type: object + description: >- + Value resolved by the AI runtime for + this input. The AI engine decides how to + satisfy the parameter. + properties: *ref_68 + required: *ref_69 + discriminator: &ref_303 + propertyName: type + mapping: + static: >- + #/components/schemas/StaticProviderTransform + javascript: >- + #/components/schemas/schemas-JavascriptTransform + ai: '#/components/schemas/schemas-AiTransform' + output_type: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Output format type. + + Valid values: 'text' (default) - plain + text response, 'image' - image + generation + user_message: + allOf: + - 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_62 + discriminator: *ref_63 + description: >- + The user's prompt/message to the AI + agent. Supports variable interpolation + with flow.input syntax. + system_prompt: + allOf: + - 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_62 + discriminator: *ref_63 + description: >- + System instructions that guide the AI's + behavior, persona, and response style. + Optional. + streaming: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Boolean. If true, stream the AI response + incrementally. + + Streaming events include: token_delta, + tool_call, tool_call_arguments, + tool_execution, tool_result + memory: + description: >- + Memory configuration - can be static + (MemoryConfig), JavaScript expression, + or AI-determined + oneOf: &ref_304 + - type: object + description: >- + Static memory configuration passed + directly to the AI agent + properties: &ref_521 + value: + description: Conversation memory configuration + oneOf: &ref_519 + - type: object + description: No conversation memory/context + properties: &ref_278 + kind: + type: string + enum: + - 'off' + required: &ref_279 + - kind + - type: object + description: Automatic context management + properties: &ref_280 + 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: &ref_281 + - kind + - type: object + description: Explicit message history + properties: &ref_282 + kind: + type: string + enum: + - manual + messages: + type: array + items: + type: object + description: A single message in conversation history + properties: &ref_517 + role: + type: string + enum: + - user + - assistant + - system + content: + type: string + required: &ref_518 + - role + - content + required: &ref_283 + - kind + - messages + discriminator: &ref_520 + propertyName: kind + mapping: + 'off': '#/components/schemas/MemoryOff' + auto: '#/components/schemas/MemoryAuto' + manual: '#/components/schemas/MemoryManual' + type: + type: string + enum: + - static + required: &ref_522 + - type + - value + - 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: *ref_66 + required: *ref_67 + - type: object + description: >- + Value resolved by the AI runtime for + this input. The AI engine decides how to + satisfy the parameter. + properties: *ref_68 + required: *ref_69 + discriminator: &ref_305 + propertyName: type + mapping: + static: >- + #/components/schemas/StaticMemoryTransform + javascript: >- + #/components/schemas/schemas-JavascriptTransform + ai: '#/components/schemas/schemas-AiTransform' + output_schema: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + JSON Schema object defining structured + output format. Used when you need the AI + to return data in a specific shape. + + Supports standard JSON Schema + properties: type, properties, required, + items, enum, pattern, minLength, + maxLength, minimum, maximum, etc. + + Example: { type: 'object', properties: { + name: { type: 'string' }, age: { type: + 'integer' } }, required: ['name'] } + user_images: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Array of image references for + vision-capable models. + + Format: Array<{ bucket: string, key: + string }> - S3 object references + + Example: [{ bucket: 'my-bucket', key: + 'images/photo.jpg' }] + max_completion_tokens: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Integer. Maximum number of tokens the AI + will generate in its response. + + Range: 1 to 4,294,967,295. Typical + values: 256-4096 for most use cases. + temperature: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Float. Controls randomness/creativity of + responses. + + Range: 0.0 to 2.0 (provider-dependent) + + - 0.0 = deterministic, focused responses + + - 0.7 = balanced (common default) + + - 1.0+ = more creative/random + 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: + type: object + description: >- + A tool available to an AI agent. Can be + a flow module or an external MCP (Model + Context Protocol) tool + properties: &ref_306 + 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: + description: >- + The implementation of a tool. Can be a + flow module (script/flow) or an MCP tool + reference + oneOf: &ref_528 + - description: >- + A tool implemented as a flow module + (script, flow, etc.). The AI can call + this like any other flow module + allOf: &ref_523 + - type: object + properties: + tool_type: + type: string + enum: + - flowmodule + required: + - tool_type + - description: >- + The actual implementation of a flow + step. Can be a script (inline or + referenced), subflow, loop, branch, or + special module type + oneOf: *ref_70 + discriminator: &ref_71 + 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' + - type: object + description: >- + Reference to an external MCP (Model + Context Protocol) tool. The AI can call + tools from MCP servers + properties: &ref_524 + 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: &ref_525 + - tool_type + - resource_path + - type: object + description: >- + A tool implemented as a websearch tool. + The AI can call this like any other + websearch tool + properties: &ref_526 + tool_type: + type: string + enum: + - websearch + required: &ref_527 + - tool_type + discriminator: &ref_529 + propertyName: tool_type + mapping: + flowmodule: '#/components/schemas/FlowModuleTool' + mcp: '#/components/schemas/McpToolValue' + websearch: '#/components/schemas/WebsearchToolValue' + required: &ref_307 + - id + - value + type: + type: string + enum: + - aiagent + parallel: + type: boolean + description: >- + If true, the agent can execute multiple + tool calls in parallel + required: &ref_301 + - tools + - type + - input_transforms + discriminator: *ref_71 stop_after_if: + description: Early termination condition for a module type: object - properties: &ref_46 + properties: &ref_72 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 - required: &ref_47 + description: Custom error message shown when stopping + required: &ref_73 - expr stop_after_all_iters_if: + description: Early termination condition for a module type: object - properties: *ref_46 - required: *ref_47 + properties: *ref_72 + required: *ref_73 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.' required: - expr sleep: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 cache_ttl: type: number + description: >- + Cache duration in seconds for this step's + results + cache_ignore_s3_path: + type: boolean timeout: - type: number + 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_62 + discriminator: *ref_63 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 - return_value: {} + 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: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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 for failed module + executions type: object - properties: &ref_218 + properties: &ref_276 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 - required: *ref_45 + description: >- + Random jitter percentage (0-100) to + avoid thundering herd + retry_if: + type: object + description: >- + Conditional retry based on error or + result + properties: &ref_167 + expr: + type: string + description: >- + JavaScript expression that returns true + to retry. Has access to 'result' and + 'error' variables + required: &ref_168 + - expr + required: *ref_65 failure_module: + description: >- + A single step in a flow. Can be a script, subflow, + loop, or branch type: object - properties: *ref_44 - required: *ref_45 + properties: *ref_64 + required: *ref_65 preprocessor_module: + description: >- + A single step in a flow. Can be a script, subflow, + loop, or branch type: object - properties: *ref_44 - required: *ref_45 + properties: *ref_64 + required: *ref_65 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 - required: &ref_378 + 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: + type: object + description: >- + A sticky note attached to a flow for + documentation and annotation + properties: &ref_120 + 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: &ref_121 + - id + - text + - color + - type + required: &ref_531 - modules schema: type: object - required: &ref_69 + 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-' (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: &ref_99 - summary - value /apps/hub/list: @@ -6074,7 +9010,7 @@ paths: - name: id in: path required: true - schema: *ref_41 + schema: *ref_61 responses: '200': description: app @@ -6094,6 +9030,36 @@ paths: - value required: - app + /apps/hub/get_raw/{id}: + get: + summary: get hub raw app by id + operationId: getHubRawAppById + tags: + - app + parameters: + - name: id + in: path + required: true + schema: *ref_61 + 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 @@ -6104,7 +9070,7 @@ paths: - name: custom_path in: path required: true - schema: &ref_81 + schema: &ref_111 type: string responses: '200': @@ -6114,7 +9080,7 @@ paths: schema: allOf: - type: object - properties: &ref_76 + properties: &ref_106 id: type: integer workspace_id: @@ -6132,11 +9098,10 @@ paths: created_at: type: string format: date-time - value: - type: object + value: {} policy: type: object - properties: &ref_75 + properties: &ref_105 triggerables: type: object additionalProperties: @@ -6180,7 +9145,11 @@ paths: type: boolean custom_path: type: string - required: &ref_77 + raw_app: + type: boolean + bundle_secret: + type: string + required: &ref_107 - id - workspace_id - path @@ -6192,6 +9161,7 @@ paths: - policy - execution_mode - extra_perms + - raw_app - type: object properties: workspace_id: @@ -6206,7 +9176,7 @@ paths: - name: path in: path required: true - schema: &ref_48 + schema: &ref_74 type: string responses: '200': @@ -6225,7 +9195,7 @@ paths: - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script details @@ -6246,6 +9216,29 @@ paths: required: - content - language + /scripts/hub/pick/{path}: + get: + summary: record hub script pick + operationId: pickHubScriptByPath + tags: + - script + parameters: + - name: path + in: path + required: true + schema: *ref_74 + 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 @@ -6296,7 +9289,7 @@ paths: type: number kind: type: string - enum: &ref_49 + enum: &ref_75 - script - failure - trigger @@ -6367,7 +9360,7 @@ paths: type: string kind: type: string - enum: *ref_49 + enum: *ref_75 score: type: number required: @@ -6388,7 +9381,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: script list @@ -6417,24 +9410,24 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: order_desc description: order by desc order (default true) in: query - schema: &ref_66 + schema: &ref_96 type: boolean - name: created_by description: mask to filter exact matching user creator in: query - schema: &ref_67 + schema: &ref_97 type: string - name: path_start description: mask to filter matching starting path @@ -6545,6 +9538,21 @@ paths: Accepts multiple values as a comma-separated list. schema: type: string + - name: without_description + in: query + description: | + (default false) + If true, the description field will be omitted from the response. + schema: + type: boolean + - name: dedicated_worker + in: query + description: | + (default regardless) + If true, show only scripts with dedicated_worker enabled. + If false, show only scripts with dedicated_worker disabled. + schema: + type: boolean responses: '200': description: All scripts @@ -6554,7 +9562,7 @@ paths: type: array items: type: object - properties: &ref_51 + properties: &ref_79 workspace_id: type: string hash: @@ -6597,7 +9605,7 @@ paths: type: string language: type: string - enum: &ref_50 + enum: &ref_76 - python3 - deno - go @@ -6618,7 +9626,9 @@ paths: - csharp - nu - java + - ruby - duckdb + - bunnative kind: type: string enum: @@ -6646,6 +9656,18 @@ paths: 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: @@ -6670,7 +9692,7 @@ paths: type: boolean on_behalf_of_email: type: string - required: &ref_52 + required: &ref_80 - hash - path - summary @@ -6697,7 +9719,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: list of script paths @@ -6717,7 +9739,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: required: true content: @@ -6755,7 +9777,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: kind in: path required: true @@ -6768,7 +9790,7 @@ paths: - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: draft deleted @@ -6780,13 +9802,27 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Partially filled script required: true @@ -6794,7 +9830,7 @@ paths: application/json: schema: type: object - properties: &ref_56 + properties: &ref_84 path: type: string parent_hash: @@ -6813,7 +9849,7 @@ paths: type: string language: type: string - enum: *ref_50 + enum: *ref_76 kind: type: string enum: @@ -6837,6 +9873,8 @@ paths: type: integer cache_ttl: type: number + cache_ignore_s3_path: + type: boolean dedicated_worker: type: boolean ws_error_handler_muted: @@ -6853,6 +9891,18 @@ paths: 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: @@ -6875,10 +9925,11 @@ paths: type: string kind: type: string - enum: &ref_202 + enum: &ref_262 - s3object - resource - ducklake + - datatable access_type: type: string enum: @@ -6891,7 +9942,7 @@ paths: - r - w - rw - required: &ref_57 + required: &ref_85 - path - summary - description @@ -6914,11 +9965,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: Workspace error handler enabled required: true @@ -6945,11 +9996,6 @@ paths: tags: - worker parameters: - - name: workspace - in: query - schema: - type: string - required: false - name: show_workspace_restriction in: query schema: @@ -6964,6 +10010,26 @@ paths: type: array items: type: string + /w/{workspace}/workers/custom_tags: + get: + summary: get custom tags available for this workspace + operationId: getCustomTagsForWorkspace + tags: + - worker + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -6992,6 +10058,180 @@ paths: application/json: schema: type: boolean + /w/{workspace}/workspace_dependencies/create: + post: + summary: create workspace dependencies + operationId: createWorkspaceDependencies + tags: + - workspace_dependencies + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: New workspace dependencies + required: true + content: + application/json: + schema: + type: object + properties: &ref_345 + workspace_id: + type: string + language: + type: string + enum: *ref_76 + name: + type: string + description: + type: string + content: + type: string + required: &ref_346 + - workspace_id + - language + - content + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: language + in: path + required: true + schema: + type: string + enum: *ref_76 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: language + in: path + required: true + schema: + type: string + enum: *ref_76 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: All workspace dependencies + content: + application/json: + schema: + type: array + items: + type: object + properties: &ref_77 + id: + type: integer + archived: + type: boolean + name: + type: string + description: + type: string + content: + type: string + language: + type: string + enum: *ref_76 + workspace_id: + type: string + created_at: + type: string + format: date-time + required: &ref_78 + - workspace_id + - language + - created_at + - content + - id + - archived + /w/{workspace}/workspace_dependencies/get_latest/{language}: + get: + summary: get latest workspace dependencies by language and name + operationId: getLatestWorkspaceDependencies + tags: + - workspace_dependencies + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: language + in: path + required: true + schema: + type: string + enum: *ref_76 + - name: name + in: query + required: false + schema: + type: string + responses: + '200': + description: Latest workspace dependencies + content: + application/json: + schema: + type: object + properties: *ref_77 + required: *ref_78 /w/{workspace}/scripts/archive/p/{path}: post: summary: archive script by path @@ -7002,11 +10242,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script archived @@ -7024,11 +10264,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: hash in: path required: true - schema: &ref_53 + schema: &ref_81 type: string responses: '200': @@ -7037,23 +10277,24 @@ paths: application/json: schema: type: object - properties: *ref_51 - required: *ref_52 + properties: *ref_79 + required: *ref_80 /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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: hash in: path required: true - schema: *ref_53 + schema: *ref_81 responses: '200': description: script details @@ -7061,23 +10302,24 @@ paths: application/json: schema: type: object - properties: *ref_51 - required: *ref_52 + properties: *ref_79 + required: *ref_80 /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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: keep_captures description: keep captures in: query @@ -7090,6 +10332,40 @@ paths: application/json: schema: type: string + /w/{workspace}/scripts/delete_bulk: + delete: + summary: delete scripts in bulk + operationId: deleteScriptsBulk + tags: + - script + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -7101,11 +10377,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: with_starred_info in: query schema: @@ -7117,8 +10393,8 @@ paths: application/json: schema: type: object - properties: *ref_51 - required: *ref_52 + properties: *ref_79 + required: *ref_80 /w/{workspace}/scripts/get_triggers_count/{path}: get: summary: get triggers count of script @@ -7129,11 +10405,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: triggers count @@ -7141,7 +10417,7 @@ paths: application/json: schema: type: object - properties: &ref_73 + properties: &ref_103 primary_schedule: type: object properties: @@ -7155,6 +10431,8 @@ paths: type: number email_count: type: number + default_email_count: + type: number websocket_count: type: number postgres_count: @@ -7169,6 +10447,8 @@ paths: type: number sqs_count: type: number + nextcloud_count: + type: number /w/{workspace}/scripts/list_tokens/{path}: get: summary: get tokens with script scope @@ -7179,11 +10459,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: tokens list @@ -7193,8 +10473,8 @@ paths: type: array items: type: object - properties: *ref_54 - required: *ref_55 + properties: *ref_82 + required: *ref_83 /w/{workspace}/scripts/get/draft/{path}: get: summary: get script by path with draft @@ -7205,27 +10485,27 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script details content: application/json: schema: - allOf: &ref_243 + allOf: &ref_347 - type: object - properties: *ref_56 - required: *ref_57 + properties: *ref_84 + required: *ref_85 - type: object properties: draft: type: object - properties: *ref_56 - required: *ref_57 + properties: *ref_84 + required: *ref_85 hash: type: string required: @@ -7240,11 +10520,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script history @@ -7254,12 +10534,12 @@ paths: type: array items: type: object - properties: &ref_58 + properties: &ref_86 script_hash: type: string deployment_msg: type: string - required: &ref_59 + required: &ref_87 - script_hash /w/{workspace}/scripts/list_paths_from_workspace_runnable/{path}: get: @@ -7271,11 +10551,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: list of script paths @@ -7293,11 +10573,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 tags: - script responses: @@ -7307,8 +10587,8 @@ paths: application/json: schema: type: object - properties: *ref_58 - required: *ref_59 + properties: *ref_86 + required: *ref_87 /w/{workspace}/scripts/history_update/h/{hash}/p/{path}: post: summary: update history of a script @@ -7319,15 +10599,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: hash in: path required: true - schema: *ref_53 + schema: *ref_81 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: Script deployment message required: true @@ -7355,11 +10635,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script content @@ -7379,16 +10659,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: token in: path required: true - schema: &ref_207 + schema: &ref_266 type: string - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script content @@ -7406,11 +10686,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: does it exists @@ -7428,11 +10708,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: hash in: path required: true - schema: *ref_53 + schema: *ref_81 - name: with_starred_info in: query schema: @@ -7448,8 +10728,8 @@ paths: application/json: schema: type: object - properties: *ref_51 - required: *ref_52 + properties: *ref_79 + required: *ref_80 /w/{workspace}/scripts/raw/h/{path}: get: summary: raw script by hash @@ -7460,11 +10740,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: script content @@ -7482,11 +10762,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: hash in: path required: true - schema: *ref_53 + schema: *ref_81 responses: '200': description: script details @@ -7499,6 +10779,9 @@ paths: 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) @@ -7509,7 +10792,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: script args required: true @@ -7565,17 +10848,22 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: scheduled_for description: when to schedule this job (leave empty for immediate run) in: query @@ -7597,20 +10885,20 @@ paths: The parent job that is at the origin and responsible for the execution of this script if any in: query - schema: &ref_60 + schema: &ref_88 type: string format: uuid - name: tag description: Override the tag to use in: query - schema: &ref_62 + schema: &ref_89 type: string - 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: &ref_63 + schema: &ref_90 type: string - name: job_id description: >- @@ -7619,7 +10907,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: &ref_61 + schema: &ref_91 type: string format: uuid - name: invisible_to_owner @@ -7635,7 +10923,7 @@ paths: schema: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true responses: '201': description: job created @@ -7644,67 +10932,6 @@ paths: schema: type: string format: uuid - /w/{workspace}/jobs/openai_sync/p/{path}: - post: - summary: run script by path in openai format - operationId: openaiSyncScriptByPath - tags: - - job - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - - name: path - in: path - required: true - schema: *ref_48 - - 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: *ref_60 - - 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: *ref_61 - - name: include_header - description: > - List of headers's keys (separated with ',') whove value are added to - the args - - Header's key lowercased and '-'' replaced to '_' such that - 'Content-Type' becomes the 'content_type' arg key - in: query - schema: &ref_64 - type: string - - 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 - in: query - schema: &ref_65 - type: string - requestBody: - description: script args - required: true - content: - application/json: - schema: - type: object - description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - responses: - '200': - description: job result - content: - application/json: - schema: {} /w/{workspace}/jobs/run_wait_result/p/{path}: post: summary: run script by path @@ -7715,27 +10942,27 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - 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: *ref_60 + schema: *ref_88 - name: tag description: Override the tag to use in: query - schema: *ref_62 + schema: *ref_89 - 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: *ref_63 + schema: *ref_90 - name: job_id description: >- The job id to assign to the created job. if missing, job is chosen @@ -7743,7 +10970,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -7752,13 +10979,20 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: &ref_92 + type: string - 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 in: query - schema: *ref_65 + schema: &ref_93 + type: string + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: &ref_94 + type: boolean requestBody: description: script args required: true @@ -7767,7 +11001,7 @@ paths: schema: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true responses: '200': description: job result @@ -7783,27 +11017,27 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - 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: *ref_60 + schema: *ref_88 - name: tag description: Override the tag to use in: query - schema: *ref_62 + schema: *ref_89 - 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: *ref_63 + schema: *ref_90 - name: job_id description: >- The job id to assign to the created job. if missing, job is chosen @@ -7811,7 +11045,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -7820,13 +11054,13 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - 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 in: query - schema: *ref_65 + schema: *ref_93 - name: payload description: > The base64 encoded payload that has been encoded as a JSON. e.g how @@ -7834,61 +11068,12 @@ paths: `encodeURIComponent(btoa(JSON.stringify({a: 2})))` in: query - schema: &ref_126 + schema: &ref_95 type: string - responses: - '200': - description: job result - content: - application/json: - schema: {} - /w/{workspace}/jobs/openai_sync/f/{path}: - post: - summary: run flow by path and wait until completion in openai format - operationId: openaiSyncFlowByPath - tags: - - job - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - - name: path - in: path - required: true - schema: *ref_48 - - name: include_header - description: > - List of headers's keys (separated with ',') whove value are added to - the args - - Header's key lowercased and '-'' replaced to '_' such that - 'Content-Type' becomes the 'content_type' arg key + - name: skip_preprocessor + description: skip the preprocessor in: query - schema: *ref_64 - - 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 - in: query - schema: *ref_65 - - 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: *ref_61 - requestBody: - description: script args - required: true - content: - application/json: - schema: - type: object - description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + schema: *ref_94 responses: '200': description: job result @@ -7905,11 +11090,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -7918,13 +11103,13 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - 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 in: query - schema: *ref_65 + schema: *ref_93 - name: job_id description: >- The job id to assign to the created job. if missing, job is chosen @@ -7932,7 +11117,17 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - name: memory_id + description: memory ID for chat-enabled flows + in: query + schema: + type: string + format: uuid requestBody: description: script args required: true @@ -7941,13 +11136,743 @@ paths: schema: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: version + description: flow version ID + in: path + required: true + schema: + type: integer + format: int64 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - 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: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: version + description: flow version ID + in: path + required: true + schema: + type: integer + format: int64 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: payload + description: > + The base64 encoded payload that has been encoded as a JSON. e.g how + to encode such payload encodeURIComponent + + `encodeURIComponent(btoa(JSON.stringify({a: 2})))` + in: query + schema: *ref_95 + - 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: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_74 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - 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: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_74 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: payload + description: > + The base64 encoded payload that has been encoded as a JSON. e.g how + to encode such payload encodeURIComponent + + `encodeURIComponent(btoa(JSON.stringify({a: 2})))` + in: query + schema: *ref_95 + - 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: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: version + description: flow version ID + in: path + required: true + schema: + type: integer + format: int64 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - 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: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: version + description: flow version ID + in: path + required: true + schema: + type: integer + format: int64 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: payload + description: > + The base64 encoded payload that has been encoded as a JSON. e.g how + to encode such payload encodeURIComponent + + `encodeURIComponent(btoa(JSON.stringify({a: 2})))` + in: query + schema: *ref_95 + - 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: *ref_91 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_74 + - 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: *ref_88 + - name: tag + description: Override the tag to use + in: query + schema: *ref_89 + - 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: *ref_90 + - 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: *ref_91 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_74 + - 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: *ref_88 + - name: tag + description: Override the tag to use + in: query + schema: *ref_89 + - 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: *ref_90 + - 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: *ref_91 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: payload + description: > + The base64 encoded payload that has been encoded as a JSON. e.g how + to encode such payload encodeURIComponent + + `encodeURIComponent(btoa(JSON.stringify({a: 2})))` + in: query + schema: *ref_95 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: hash + in: path + required: true + schema: + type: string + - 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: *ref_88 + - name: tag + description: Override the tag to use + in: query + schema: *ref_89 + - 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: *ref_90 + - 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: *ref_91 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: hash + in: path + required: true + schema: + type: string + - 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: *ref_88 + - name: tag + description: Override the tag to use + in: query + schema: *ref_89 + - 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: *ref_90 + - 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: *ref_91 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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 + in: query + schema: *ref_93 + - name: payload + description: > + The base64 encoded payload that has been encoded as a JSON. e.g how + to encode such payload encodeURIComponent + + `encodeURIComponent(btoa(JSON.stringify({a: 2})))` + in: query + schema: *ref_95 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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 @@ -7958,7 +11883,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: flow_job_id in: path required: true @@ -7985,7 +11910,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: list of flow paths @@ -8005,7 +11930,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: flow list @@ -8033,23 +11958,23 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - name: path_start description: mask to filter matching starting path in: query @@ -8094,6 +12019,21 @@ paths: in: query schema: type: boolean + - name: without_description + in: query + description: | + (default false) + If true, the description field will be omitted from the response. + schema: + type: boolean + - name: dedicated_worker + in: query + description: | + (default regardless) + If true, show only flows with dedicated_worker enabled. + If false, show only flows with dedicated_worker disabled. + schema: + type: boolean responses: '200': description: All flow @@ -8103,12 +12043,15 @@ paths: type: array items: allOf: - - allOf: &ref_72 + - allOf: &ref_102 - type: object - properties: *ref_68 - required: *ref_69 + description: >- + Top-level flow definition containing metadata, + configuration, and the flow structure + properties: *ref_98 + required: *ref_99 - type: object - properties: &ref_330 + properties: &ref_449 workspace_id: type: string path: @@ -8122,7 +12065,7 @@ paths: type: boolean extra_perms: type: object - additionalProperties: &ref_329 + additionalProperties: &ref_448 type: boolean starred: type: boolean @@ -8142,7 +12085,7 @@ paths: type: boolean on_behalf_of_email: type: string - required: &ref_331 + required: &ref_450 - path - edited_by - edited_at @@ -8152,6 +12095,8 @@ paths: properties: lock_error_logs: type: string + version_id: + type: number - type: object properties: has_draft: @@ -8166,11 +12111,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 tags: - flow responses: @@ -8182,7 +12127,7 @@ paths: type: array items: type: object - properties: &ref_70 + properties: &ref_100 id: type: integer created_at: @@ -8190,7 +12135,7 @@ paths: format: date-time deployment_msg: type: string - required: &ref_71 + required: &ref_101 - id - created_at /w/{workspace}/flows/get_latest_version/{path}: @@ -8201,11 +12146,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 tags: - flow responses: @@ -8215,8 +12160,8 @@ paths: application/json: schema: type: object - properties: *ref_70 - required: *ref_71 + properties: *ref_100 + required: *ref_101 /w/{workspace}/flows/list_paths_from_workspace_runnable/{runnable_kind}/{path}: get: summary: list flow paths from workspace runnable @@ -8227,11 +12172,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_kind in: path required: true - schema: &ref_80 + schema: &ref_110 type: string enum: - script @@ -8239,7 +12184,11 @@ paths: - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 + - name: match_path_start + in: query + schema: + type: boolean responses: '200': description: list of flow paths @@ -8249,7 +12198,7 @@ paths: type: array items: type: string - /w/{workspace}/flows/get/v/{version}/p/{path}: + /w/{workspace}/flows/get/v/{version}: get: summary: get flow version operationId: getFlowVersion @@ -8257,16 +12206,12 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: version in: path required: true schema: type: number - - name: path - in: path - required: true - schema: *ref_48 tags: - flow responses: @@ -8275,8 +12220,8 @@ paths: content: application/json: schema: - allOf: *ref_72 - /w/{workspace}/flows/history_update/v/{version}/p/{path}: + allOf: *ref_102 + /w/{workspace}/flows/history_update/v/{version}: post: summary: update flow history operationId: updateFlowHistory @@ -8284,16 +12229,12 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: version in: path required: true schema: type: number - - name: path - in: path - required: true - schema: *ref_48 requestBody: description: Flow deployment message required: true @@ -8326,11 +12267,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: with_starred_info in: query schema: @@ -8341,7 +12282,7 @@ paths: content: application/json: schema: - allOf: *ref_72 + allOf: *ref_102 /w/{workspace}/flows/deployment_status/p/{path}: get: summary: get flow deployment status @@ -8352,11 +12293,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: flow status @@ -8367,6 +12308,9 @@ paths: 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 @@ -8377,11 +12321,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: triggers count @@ -8389,7 +12333,7 @@ paths: application/json: schema: type: object - properties: *ref_73 + properties: *ref_103 /w/{workspace}/flows/list_tokens/{path}: get: summary: get tokens with flow scope @@ -8400,11 +12344,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: tokens list @@ -8414,8 +12358,8 @@ paths: type: array items: type: object - properties: *ref_54 - required: *ref_55 + properties: *ref_82 + required: *ref_83 /w/{workspace}/flows/toggle_workspace_error_handler/{path}: post: summary: Toggle ON and OFF the workspace error handler for a given flow @@ -8426,11 +12370,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: Workspace error handler enabled required: true @@ -8458,11 +12402,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: flow details with draft @@ -8470,11 +12414,11 @@ paths: application/json: schema: allOf: - - allOf: *ref_72 + - allOf: *ref_102 - type: object properties: draft: - allOf: *ref_72 + allOf: *ref_102 /w/{workspace}/flows/exists/{path}: get: summary: exists flow by path @@ -8485,11 +12429,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: flow details @@ -8501,13 +12445,25 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Partially filled flow required: true @@ -8515,10 +12471,13 @@ paths: application/json: schema: allOf: - - allOf: &ref_74 + - allOf: &ref_104 - type: object - properties: *ref_68 - required: *ref_69 + description: >- + Top-level flow definition containing metadata, + configuration, and the flow structure + properties: *ref_98 + required: *ref_99 - type: object properties: path: @@ -8556,17 +12515,29 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: Partially filled flow required: true @@ -8574,7 +12545,7 @@ paths: application/json: schema: allOf: - - allOf: *ref_74 + - allOf: *ref_104 - type: object properties: deployment_message: @@ -8596,11 +12567,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: archiveFlow required: true @@ -8622,17 +12593,18 @@ paths: delete: summary: delete flow by path operationId: deleteFlowByPath + x-mcp-tool: true tags: - flow parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: keep_captures description: keep captures in: query @@ -8645,6 +12617,180 @@ paths: text/plain: schema: type: string + /w/{workspace}/flow_conversations/list: + get: + summary: list flow conversations + operationId: listFlowConversations + tags: + - flow_conversation + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + - 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: + type: object + required: &ref_333 + - id + - workspace_id + - flow_path + - created_at + - updated_at + - created_by + properties: &ref_334 + 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 + /w/{workspace}/flow_conversations/delete/{conversation_id}: + delete: + summary: delete flow conversation + operationId: deleteFlowConversation + tags: + - flow_conversation + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + - 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: + type: object + required: &ref_335 + - id + - conversation_id + - message_type + - content + - created_at + properties: &ref_336 + 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 /w/{workspace}/raw_apps/list: get: summary: list all raw apps @@ -8655,23 +12801,23 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - name: path_start description: mask to filter matching starting path in: query @@ -8698,7 +12844,7 @@ paths: type: array items: type: object - properties: &ref_341 + properties: &ref_458 workspace_id: type: string path: @@ -8716,55 +12862,29 @@ paths: edited_at: type: string format: date-time - required: &ref_342 + required: &ref_459 - workspace_id - path - summary - extra_perms - version - edited_at - /w/{workspace}/raw_apps/exists/{path}: + /w/{workspace}/apps/get_data/v/{secretWithExtension}: get: - summary: does an app exisst at path - operationId: existsRawApp - tags: - - raw_app - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - - name: path - in: path - required: true - schema: *ref_31 - responses: - '200': - description: app exists - content: - application/json: - schema: - type: boolean - /w/{workspace}/apps/get_data/{version}/{path}: - get: - summary: get app by path + summary: get raw app data by operationId: getRawAppData tags: - - raw_app + - app parameters: - name: workspace in: path required: true - schema: *ref_0 - - name: version + schema: *ref_4 + - name: secretWithExtension in: path required: true - schema: &ref_206 - type: number - - name: path - in: path - required: true - schema: *ref_48 + schema: + type: string responses: '200': description: app details @@ -8782,7 +12902,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: app list @@ -8809,23 +12929,23 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - name: path_start description: mask to filter matching starting path in: query @@ -8866,7 +12986,7 @@ paths: type: array items: type: object - properties: &ref_335 + properties: &ref_452 id: type: integer workspace_id: @@ -8894,7 +13014,7 @@ paths: - anonymous raw_app: type: boolean - required: &ref_336 + required: &ref_453 - id - workspace_id - path @@ -8907,13 +13027,23 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new app required: true @@ -8929,7 +13059,7 @@ paths: type: string policy: type: object - properties: *ref_75 + properties: *ref_105 draft_only: type: boolean deployment_message: @@ -8958,7 +13088,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new app required: true @@ -8977,7 +13107,7 @@ paths: type: string policy: type: object - properties: *ref_75 + properties: *ref_105 draft_only: type: boolean deployment_message: @@ -9010,11 +13140,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: app exists @@ -9032,11 +13162,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: with_starred_info in: query schema: @@ -9048,8 +13178,8 @@ paths: application/json: schema: type: object - properties: *ref_76 - required: *ref_77 + properties: *ref_106 + required: *ref_107 /w/{workspace}/apps/get/lite/{path}: get: summary: get app lite by path @@ -9060,11 +13190,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: app lite details @@ -9072,8 +13202,8 @@ paths: application/json: schema: type: object - properties: *ref_76 - required: *ref_77 + properties: *ref_106 + required: *ref_107 /w/{workspace}/apps/get/draft/{path}: get: summary: get app by path with draft @@ -9084,21 +13214,21 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: app details with draft content: application/json: schema: - allOf: &ref_343 + allOf: &ref_460 - type: object - properties: *ref_76 - required: *ref_77 + properties: *ref_106 + required: *ref_107 - type: object properties: draft_only: @@ -9114,11 +13244,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: app history @@ -9128,12 +13258,12 @@ paths: type: array items: type: object - properties: &ref_78 + properties: &ref_108 version: type: integer deployment_msg: type: string - required: &ref_79 + required: &ref_109 - version /w/{workspace}/apps/get_latest_version/{path}: get: @@ -9143,11 +13273,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 tags: - app responses: @@ -9157,8 +13287,8 @@ paths: application/json: schema: type: object - properties: *ref_78 - required: *ref_79 + properties: *ref_108 + required: *ref_109 /w/{workspace}/apps/list_paths_from_workspace_runnable/{runnable_kind}/{path}: get: summary: list app paths from workspace runnable @@ -9169,15 +13299,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_kind in: path required: true - schema: *ref_80 + schema: *ref_110 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 responses: '200': description: list of app paths @@ -9197,15 +13327,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_41 + schema: *ref_61 - name: version in: path required: true - schema: &ref_208 + schema: &ref_267 type: integer requestBody: description: App deployment message @@ -9234,11 +13364,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: app details @@ -9246,8 +13376,8 @@ paths: application/json: schema: type: object - properties: *ref_76 - required: *ref_77 + properties: *ref_106 + required: *ref_107 /w/{workspace}/apps_u/public_resource/{path}: get: summary: get public resource @@ -9258,11 +13388,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: resource value @@ -9279,11 +13409,33 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 responses: '200': description: app secret @@ -9301,11 +13453,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_41 + schema: *ref_61 responses: '200': description: app details @@ -9313,102 +13465,8 @@ paths: application/json: schema: type: object - properties: *ref_76 - required: *ref_77 - /w/{workspace}/raw_apps/create: - post: - summary: create raw app - operationId: createRawApp - tags: - - raw_app - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - requestBody: - description: new raw app - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - value: - type: string - summary: - type: string - required: - - path - - value - - summary - responses: - '201': - description: raw app created - content: - text/plain: - schema: - type: string - /w/{workspace}/raw_apps/update/{path}: - post: - summary: update app - operationId: updateRawApp - tags: - - raw_app - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - - name: path - in: path - required: true - schema: *ref_48 - requestBody: - description: updateraw app - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - summary: - type: string - value: - type: string - responses: - '200': - description: app updated - content: - text/plain: - schema: - type: string - /w/{workspace}/raw_apps/delete/{path}: - delete: - summary: delete raw app - operationId: deleteRawApp - tags: - - raw_app - parameters: - - name: workspace - in: path - required: true - schema: *ref_0 - - name: path - in: path - required: true - schema: *ref_31 - responses: - '200': - description: app deleted - content: - text/plain: - schema: - type: string + properties: *ref_106 + required: *ref_107 /w/{workspace}/apps/delete/{path}: delete: summary: delete app @@ -9419,11 +13477,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: app deleted @@ -9435,17 +13493,27 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: update app required: true @@ -9461,7 +13529,7 @@ paths: value: {} policy: type: object - properties: *ref_75 + properties: *ref_105 deployment_message: type: string custom_path: @@ -9483,11 +13551,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: update app required: true @@ -9506,7 +13574,7 @@ paths: value: {} policy: type: object - properties: *ref_75 + properties: *ref_105 deployment_message: type: string custom_path: @@ -9532,11 +13600,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: custom_path in: path required: true - schema: *ref_81 + schema: *ref_111 responses: '200': description: custom path exists @@ -9554,7 +13622,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: s3 objects to sign required: true @@ -9567,7 +13635,7 @@ paths: type: array items: type: object - properties: &ref_82 + properties: &ref_112 s3: type: string filename: @@ -9576,7 +13644,7 @@ paths: type: string presigned: type: string - required: &ref_83 + required: &ref_113 - s3 required: - s3_objects @@ -9589,8 +13657,8 @@ paths: type: array items: type: object - properties: *ref_82 - required: *ref_83 + properties: *ref_112 + required: *ref_113 /w/{workspace}/apps_u/execute_component/{path}: post: summary: executeComponent @@ -9601,11 +13669,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 requestBody: description: update app required: true @@ -9647,6 +13715,9 @@ paths: type: array items: type: string + run_query_params: + type: object + description: Runnable query parameters required: - args - component @@ -9667,11 +13738,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: file_key in: query required: false @@ -9737,7 +13808,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: delete_token in: query required: true @@ -9754,17 +13825,22 @@ paths: 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: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_48 + schema: *ref_74 - name: scheduled_for description: when to schedule this job (leave empty for immediate run) in: query @@ -9779,18 +13855,17 @@ paths: - name: skip_preprocessor description: skip the preprocessor in: query - schema: - type: boolean + schema: *ref_94 - 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: *ref_60 + schema: *ref_88 - name: tag description: Override the tag to use in: query - schema: *ref_62 + schema: *ref_89 - name: job_id description: >- The job id to assign to the created job. if missing, job is chosen @@ -9798,7 +13873,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -9807,12 +13882,18 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - 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 @@ -9821,7 +13902,95 @@ paths: schema: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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 + - name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 + - 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: *ref_88 + - name: tag + description: Override the tag to use + in: query + schema: *ref_89 + - 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: *ref_91 + - name: include_header + description: > + List of headers's keys (separated with ',') whove value are added to + the args + + Header's key lowercased and '-'' replaced to '_' such that + 'Content-Type' becomes the 'content_type' arg key + in: query + schema: *ref_92 + - 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true responses: '201': description: job created @@ -9840,7 +14009,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: list of job ids to re run and arg tranforms required: true @@ -9865,18 +14034,41 @@ paths: input_transforms: type: object additionalProperties: - oneOf: &ref_88 + 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_116 - type: object - properties: *ref_84 - required: *ref_85 + description: >- + Static value passed directly to the step. Use + for hardcoded values or resource references like + '$res:path/to/resource' + properties: *ref_114 + required: *ref_115 - type: object - properties: *ref_86 - required: *ref_87 - discriminator: &ref_89 + 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: *ref_66 + required: *ref_67 + - type: object + description: >- + Value resolved by the AI runtime for this input. + The AI engine decides how to satisfy the + parameter. + properties: *ref_68 + required: *ref_69 + discriminator: &ref_117 propertyName: type mapping: static: '#/components/schemas/schemas-StaticTransform' javascript: '#/components/schemas/schemas-JavascriptTransform' + ai: '#/components/schemas/schemas-AiTransform' use_latest_version: type: boolean flow_options_by_path: @@ -9887,8 +14079,12 @@ paths: input_transforms: type: object additionalProperties: - oneOf: *ref_88 - discriminator: *ref_89 + 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_116 + discriminator: *ref_117 use_latest_version: type: boolean responses: @@ -9900,7 +14096,7 @@ paths: text/event-stream: schema: type: string - /w/{workspace}/jobs/restart/f/{id}/from/{step_id}/{branch_or_iteration_n}: + /w/{workspace}/jobs/restart/f/{id}: post: summary: restart a completed flow at a given step operationId: restartFlowAtStep @@ -9910,27 +14106,13 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: &ref_123 + schema: &ref_144 type: string format: uuid - - name: step_id - description: step id to restart the flow from - required: true - in: path - schema: - type: string - - name: branch_or_iteration_n - description: >- - for branchall or loop, the iteration at which the flow should - restart - required: true - in: path - schema: - type: integer - name: scheduled_for description: when to schedule this job (leave empty for immediate run) in: query @@ -9947,11 +14129,11 @@ paths: The parent job that is at the origin and responsible for the execution of this script if any in: query - schema: *ref_60 + schema: *ref_88 - name: tag description: Override the tag to use in: query - schema: *ref_62 + schema: *ref_89 - name: job_id description: >- The job id to assign to the created job. if missing, job is chosen @@ -9959,7 +14141,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -9968,21 +14150,35 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - name: invisible_to_owner description: make the run invisible to the the flow owner (default false) in: query schema: type: boolean requestBody: - description: flow args + description: restart flow parameters required: true content: application/json: schema: type: object - description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + 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 @@ -10001,11 +14197,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: hash in: path required: true - schema: *ref_53 + schema: *ref_81 - name: scheduled_for description: when to schedule this job (leave empty for immediate run) in: query @@ -10020,24 +14216,23 @@ paths: - name: skip_preprocessor description: skip the preprocessor in: query - schema: - type: boolean + schema: *ref_94 - 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: *ref_60 + schema: *ref_88 - name: tag description: Override the tag to use in: query - schema: *ref_62 + schema: *ref_89 - 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: *ref_63 + schema: *ref_90 - name: job_id description: >- The job id to assign to the created job. if missing, job is chosen @@ -10045,7 +14240,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -10054,7 +14249,7 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query @@ -10085,7 +14280,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -10094,7 +14289,7 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query @@ -10107,7 +14302,7 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 requestBody: description: preview required: true @@ -10115,20 +14310,23 @@ paths: application/json: schema: type: object - properties: &ref_262 + properties: &ref_118 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: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true language: type: string - enum: *ref_50 + enum: *ref_76 tag: type: string kind: @@ -10141,7 +14339,7 @@ paths: type: boolean lock: type: string - required: &ref_263 + required: &ref_119 - args responses: '201': @@ -10151,6 +14349,80 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: preview + required: true + content: + application/json: + schema: + type: object + properties: &ref_368 + content: + type: string + description: The code to run + args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + language: + type: string + enum: *ref_76 + required: &ref_369 + - content + - args + - language + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: preview + required: true + content: + application/json: + schema: + type: object + properties: *ref_118 + required: *ref_119 + responses: + '200': + description: job result + content: + application/json: + schema: {} /w/{workspace}/jobs/workflow_as_code/{job_id}/{entrypoint}: post: summary: run code-workflow task @@ -10161,7 +14433,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: job_id in: path required: true @@ -10179,12 +14451,12 @@ paths: application/json: schema: type: object - properties: &ref_264 + properties: &ref_370 args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - required: &ref_265 + additionalProperties: true + required: &ref_371 - args responses: '201': @@ -10204,7 +14476,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: raw script content required: true @@ -10217,15 +14489,15 @@ paths: type: array items: type: object - properties: &ref_357 + properties: &ref_475 raw_code: type: string path: type: string language: type: string - enum: *ref_50 - required: &ref_358 + enum: *ref_76 + required: &ref_476 - raw_code - path - language @@ -10256,7 +14528,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: include_header description: > List of headers's keys (separated with ',') whove value are added to @@ -10265,7 +14537,7 @@ paths: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query @@ -10278,7 +14550,13 @@ paths: queue or as a completed job, the request to create one will fail (Bad Request) in: query - schema: *ref_61 + schema: *ref_91 + - name: memory_id + description: memory ID for chat-enabled flows + in: query + schema: + type: string + format: uuid requestBody: description: preview required: true @@ -10286,53 +14564,121 @@ paths: application/json: schema: type: object - properties: &ref_332 + properties: &ref_122 value: type: object - properties: &ref_92 + description: >- + The flow structure containing modules and optional + preprocessor/failure handlers + properties: &ref_126 modules: type: array + description: >- + Array of steps that execute in sequence. Each step can + be a script, subflow, loop, or branch items: type: object - properties: *ref_44 - required: *ref_45 + description: >- + A single step in a flow. Can be a script, subflow, + loop, or branch + properties: *ref_64 + required: *ref_65 failure_module: + description: >- + A single step in a flow. Can be a script, subflow, loop, + or branch type: object - properties: *ref_44 - required: *ref_45 + properties: *ref_64 + required: *ref_65 preprocessor_module: + description: >- + A single step in a flow. Can be a script, subflow, loop, + or branch type: object - properties: *ref_44 - required: *ref_45 + properties: *ref_64 + required: *ref_65 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 - required: &ref_93 + 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: + type: object + description: >- + A sticky note attached to a flow for documentation and + annotation + properties: *ref_120 + required: *ref_121 + required: &ref_127 - modules path: type: string args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true tag: type: string restarted_from: type: object - properties: &ref_334 + properties: &ref_451 flow_job_id: type: string format: uuid @@ -10340,7 +14686,9 @@ paths: type: string branch_or_iteration_n: type: integer - required: &ref_333 + flow_version: + type: integer + required: &ref_123 - value - content - args @@ -10352,6 +14700,110 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: object + properties: *ref_122 + required: *ref_123 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: dynamic select request + required: true + content: + application/json: + schema: + type: object + properties: &ref_463 + 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: + type: string + enum: &ref_172 + - script + - flow + required: + - source + - path + - runnable_kind + - type: object + properties: + source: + type: string + enum: + - inline + code: + type: string + description: Code content for inline execution + language: + type: string + enum: *ref_76 + required: + - source + - code + required: &ref_464 + - entrypoint_function + - runnable_ref + 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 @@ -10363,117 +14815,141 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - 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: *ref_60 + schema: *ref_88 - name: worker description: worker this job was ran on in: query - schema: &ref_94 + schema: &ref_128 type: string - name: script_path_exact description: mask to filter exact matching path in: query - schema: &ref_95 + schema: &ref_129 type: string - name: script_path_start description: mask to filter matching starting path in: query - schema: &ref_96 + schema: &ref_130 type: string - name: schedule_path description: mask to filter by schedule path in: query - schema: &ref_97 + schema: &ref_131 type: string + - name: trigger_path + description: mask to filter by trigger path + in: query + schema: &ref_268 + type: string + - name: trigger_kind + description: trigger kind (schedule, http, websocket...) + in: query + schema: &ref_160 + description: job trigger kind (schedule, http, websocket...) + type: string + enum: &ref_145 + - webhook + - default_email + - email + - schedule + - http + - websocket + - postgres + - kafka + - nats + - mqtt + - sqs + - gcp - name: script_hash description: mask to filter exact matching path in: query - schema: &ref_98 + schema: &ref_132 type: string - name: started_before description: filter on started before (inclusive) timestamp in: query - schema: &ref_99 + schema: &ref_133 type: string format: date-time - name: started_after description: filter on started after (exclusive) timestamp in: query - schema: &ref_100 + schema: &ref_134 type: string format: date-time - name: success description: filter on successful jobs in: query - schema: &ref_108 + schema: &ref_142 type: boolean - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query - schema: &ref_102 + schema: &ref_136 type: boolean - name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: &ref_103 + schema: &ref_137 type: string - name: suspended description: filter on suspended jobs in: query - schema: &ref_104 + schema: &ref_138 type: boolean - name: running description: filter on running jobs in: query - schema: &ref_101 + schema: &ref_135 type: boolean - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: &ref_105 + schema: &ref_139 type: string - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: &ref_107 + schema: &ref_141 type: string - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query - schema: &ref_109 + schema: &ref_143 type: boolean - name: tag description: filter on jobs with a given tag/worker group in: query - schema: &ref_106 + schema: &ref_140 type: string - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the @@ -10495,7 +14971,7 @@ paths: type: array items: type: object - properties: &ref_121 + properties: &ref_163 workspace_id: type: string id: @@ -10524,7 +15000,7 @@ paths: args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true logs: type: string raw_code: @@ -10551,10 +15027,14 @@ paths: - script_hub - identity - deploymentcallback - - singlescriptflow + - singlestepflow - flowscript - flownode - appscript + - aiagent + - unassigned_script + - unassigned_flow + - unassigned_singlestepflow schedule_path: type: string permissioned_as: @@ -10566,14 +15046,14 @@ paths: by extension its DT_TOKEN. flow_status: type: object - properties: &ref_111 + properties: &ref_147 step: type: integer modules: type: array items: type: object - properties: &ref_90 + properties: &ref_124 type: type: string enum: @@ -10600,6 +15080,8 @@ paths: itered: type: array items: {} + itered_len: + type: integer args: {} flow_jobs: type: array @@ -10609,6 +15091,17 @@ paths: 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: @@ -10650,20 +15143,84 @@ paths: format: uuid skipped: type: boolean - required: &ref_91 + 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: &ref_125 - type user_states: additionalProperties: true preprocessor_module: allOf: - type: object - properties: *ref_90 - required: *ref_91 + properties: *ref_124 + required: *ref_125 failure_module: allOf: - type: object - properties: *ref_90 - required: *ref_91 + properties: *ref_124 + required: *ref_125 - type: object properties: parent_module: @@ -10678,13 +15235,13 @@ paths: items: type: string format: uuid - required: &ref_112 + required: &ref_148 - step - modules - failure_module workflow_as_code_status: type: object - properties: &ref_113 + properties: &ref_149 scheduled_for: type: string format: date-time @@ -10697,13 +15254,16 @@ paths: type: string raw_flow: type: object - properties: *ref_92 - required: *ref_93 + description: >- + The flow structure containing modules and optional + preprocessor/failure handlers + properties: *ref_126 + required: *ref_127 is_flow_step: type: boolean language: type: string - enum: *ref_50 + enum: *ref_76 email: type: string visible_to_owner: @@ -10724,7 +15284,7 @@ paths: type: boolean worker: type: string - required: &ref_122 + required: &ref_164 - id - running - canceled @@ -10744,7 +15304,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the @@ -10776,7 +15336,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: completed count @@ -10799,7 +15359,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: completed_after_s_ago in: query schema: @@ -10833,132 +15393,131 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - 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: &ref_110 + schema: &ref_146 type: string - name: worker description: worker this job was ran on in: query - schema: *ref_94 + schema: *ref_128 - 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: *ref_60 + schema: *ref_88 - name: script_path_exact description: mask to filter exact matching path in: query - schema: *ref_95 + schema: *ref_129 - name: script_path_start description: mask to filter matching starting path in: query - schema: *ref_96 + schema: *ref_130 - name: schedule_path description: mask to filter by schedule path in: query - schema: *ref_97 + schema: *ref_131 - name: script_hash description: mask to filter exact matching path in: query - schema: *ref_98 + schema: *ref_132 - name: started_before description: filter on started before (inclusive) timestamp in: query - schema: *ref_99 + schema: *ref_133 - name: started_after description: filter on started after (exclusive) timestamp in: query - schema: *ref_100 + schema: *ref_134 - name: created_before description: filter on created before (inclusive) timestamp in: query - schema: &ref_114 + schema: &ref_154 type: string format: date-time - name: created_after description: filter on created after (exclusive) timestamp in: query - schema: &ref_115 + schema: &ref_155 type: string format: date-time - - name: created_or_started_before - description: >- - filter on created_at for non non started job and started_at - otherwise before (inclusive) timestamp + - name: completed_before + description: filter on started before (inclusive) timestamp in: query - schema: &ref_116 + schema: &ref_156 + type: string + format: date-time + - name: completed_after + description: filter on started after (exclusive) timestamp + in: query + schema: &ref_157 + type: string + format: date-time + - name: created_before_queue + description: filter on jobs created before X for jobs in the queue only + in: query + schema: &ref_158 + type: string + format: date-time + - name: created_after_queue + description: filter on jobs created after X for jobs in the queue only + in: query + schema: &ref_159 type: string format: date-time - name: running description: filter on running jobs in: query - schema: *ref_101 + schema: *ref_135 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query - schema: *ref_102 - - name: created_or_started_after - description: >- - filter on created_at for non non started job and started_at - otherwise after (exclusive) timestamp - in: query - schema: &ref_117 - type: string - format: date-time - - name: created_or_started_after_completed_jobs - description: >- - filter on created_at for non non started job and started_at - otherwise after (exclusive) timestamp but only for the completed - jobs - in: query - schema: &ref_118 - type: string - format: date-time + schema: *ref_136 - name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: *ref_103 + schema: *ref_137 - name: suspended description: filter on suspended jobs in: query - schema: *ref_104 + schema: *ref_138 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: tag description: filter on jobs with a given tag/worker group in: query - schema: *ref_106 + schema: *ref_140 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: *ref_107 + schema: *ref_141 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: is_skipped description: is the job skipped in: query @@ -11010,95 +15569,95 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - 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: *ref_60 + schema: *ref_88 - name: script_path_exact description: mask to filter exact matching path in: query - schema: *ref_95 + schema: *ref_129 - name: script_path_start description: mask to filter matching starting path in: query - schema: *ref_96 + schema: *ref_130 - name: schedule_path description: mask to filter by schedule path in: query - schema: *ref_97 + schema: *ref_131 - name: script_hash description: mask to filter exact matching path in: query - schema: *ref_98 + schema: *ref_132 - name: started_before description: filter on started before (inclusive) timestamp in: query - schema: *ref_99 + schema: *ref_133 - name: started_after description: filter on started after (exclusive) timestamp in: query - schema: *ref_100 + schema: *ref_134 - name: success description: filter on successful jobs in: query - schema: *ref_108 + schema: *ref_142 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query - schema: *ref_102 + schema: *ref_136 - name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: *ref_103 + schema: *ref_137 - name: suspended description: filter on suspended jobs in: query - schema: *ref_104 + schema: *ref_138 - name: running description: filter on running jobs in: query - schema: *ref_101 + schema: *ref_135 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: *ref_107 + schema: *ref_141 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query - schema: *ref_109 + schema: *ref_143 - name: tag description: filter on jobs with a given tag/worker group in: query - schema: *ref_106 + schema: *ref_140 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: concurrency_key in: query required: false @@ -11135,7 +15694,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - name: force_cancel + in: query + schema: + type: boolean requestBody: description: uuids of the jobs to cancel required: true @@ -11154,6 +15717,132 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: id + in: path + required: true + schema: *ref_144 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: trigger_kind + description: The kind of trigger + in: path + required: true + schema: + description: job trigger kind (schedule, http, websocket...) + type: string + enum: *ref_145 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: trigger_kind + description: The kind of trigger + in: path + required: true + schema: + description: job trigger kind (schedule, http, websocket...) + type: string + enum: *ref_145 + - 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 @@ -11164,94 +15853,94 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - 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: *ref_110 + schema: *ref_146 - name: worker description: worker this job was ran on in: query - schema: *ref_94 + schema: *ref_128 - 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: *ref_60 + schema: *ref_88 - name: script_path_exact description: mask to filter exact matching path in: query - schema: *ref_95 + schema: *ref_129 - name: script_path_start description: mask to filter matching starting path in: query - schema: *ref_96 + schema: *ref_130 - name: schedule_path description: mask to filter by schedule path in: query - schema: *ref_97 + schema: *ref_131 - name: script_hash description: mask to filter exact matching path in: query - schema: *ref_98 + schema: *ref_132 - name: started_before description: filter on started before (inclusive) timestamp in: query - schema: *ref_99 + schema: *ref_133 - name: started_after description: filter on started after (exclusive) timestamp in: query - schema: *ref_100 + schema: *ref_134 - name: success description: filter on successful jobs in: query - schema: *ref_108 + schema: *ref_142 - name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: *ref_103 + schema: *ref_137 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: *ref_107 + schema: *ref_141 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query - schema: *ref_109 + schema: *ref_143 - name: tag description: filter on jobs with a given tag/worker group in: query - schema: *ref_106 + schema: *ref_140 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: is_skipped description: is the job skipped in: query @@ -11281,7 +15970,7 @@ paths: type: array items: type: object - properties: &ref_119 + properties: &ref_161 workspace_id: type: string id: @@ -11298,6 +15987,9 @@ paths: started_at: type: string format: date-time + completed_at: + type: string + format: date-time duration_ms: type: integer success: @@ -11309,7 +16001,7 @@ paths: args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true result: {} logs: type: string @@ -11336,10 +16028,14 @@ paths: - script_hub - identity - deploymentcallback - - singlescriptflow + - singlestepflow - flowscript - flownode - appscript + - aiagent + - unassigned_script + - unassigned_flow + - unassigned_singlestepflow schedule_path: type: string permissioned_as: @@ -11351,20 +16047,23 @@ paths: by extension its DT_TOKEN. flow_status: type: object - properties: *ref_111 - required: *ref_112 + properties: *ref_147 + required: *ref_148 workflow_as_code_status: type: object - properties: *ref_113 + properties: *ref_149 raw_flow: type: object - properties: *ref_92 - required: *ref_93 + description: >- + The flow structure containing modules and optional + preprocessor/failure handlers + properties: *ref_126 + required: *ref_127 is_flow_step: type: boolean language: type: string - enum: *ref_50 + enum: *ref_76 is_skipped: type: boolean email: @@ -11389,7 +16088,7 @@ paths: type: boolean worker: type: string - required: &ref_120 + required: &ref_162 - id - created_by - duration_ms @@ -11404,6 +16103,436 @@ paths: - email - visible_to_owner - tag + /w/{workspace}/jobs/completed/export: + get: + summary: export all completed jobs for backup/migration + operationId: exportCompletedJobs + tags: + - job + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + responses: + '200': + description: All completed jobs exported + content: + application/json: + schema: + type: array + items: + type: object + description: Completed job with full data for export/import operations + properties: &ref_150 + 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: + type: string + enum: *ref_76 + 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: &ref_151 + - id + - created_by + - created_at + - job_kind + - permissioned_as + - email + - visible_to_owner + /w/{workspace}/jobs/completed/import: + post: + summary: import completed jobs from backup/migration + operationId: importCompletedJobs + tags: + - job + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: object + description: Completed job with full data for export/import operations + properties: *ref_150 + required: *ref_151 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + responses: + '200': + description: All queued jobs exported + content: + application/json: + schema: + type: array + items: + type: object + description: Queued job with full data for export/import operations + properties: &ref_152 + 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: + type: string + enum: *ref_76 + 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: &ref_153 + - id + - created_by + - created_at + - job_kind + - permissioned_as + - email + - visible_to_owner + /w/{workspace}/jobs/queue/import: + post: + summary: import queued jobs from backup/migration + operationId: importQueuedJobs + tags: + - job + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: object + description: Queued job with full data for export/import operations + properties: *ref_152 + required: *ref_153 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -11415,125 +16544,122 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - 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: *ref_110 + schema: *ref_146 - name: worker description: worker this job was ran on in: query - schema: *ref_94 + schema: *ref_128 - 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: *ref_60 + schema: *ref_88 - name: script_path_exact description: mask to filter exact matching path in: query - schema: *ref_95 + schema: *ref_129 - name: script_path_start description: mask to filter matching starting path in: query - schema: *ref_96 + schema: *ref_130 - name: schedule_path description: mask to filter by schedule path in: query - schema: *ref_97 + schema: *ref_131 - name: script_hash description: mask to filter exact matching path in: query - schema: *ref_98 + schema: *ref_132 - name: started_before description: filter on started before (inclusive) timestamp in: query - schema: *ref_99 + schema: *ref_133 - name: started_after description: filter on started after (exclusive) timestamp in: query - schema: *ref_100 + schema: *ref_134 - name: created_before description: filter on created before (inclusive) timestamp in: query - schema: *ref_114 + schema: *ref_154 - name: created_after description: filter on created after (exclusive) timestamp in: query - schema: *ref_115 - - name: created_or_started_before - description: >- - filter on created_at for non non started job and started_at - otherwise before (inclusive) timestamp + schema: *ref_155 + - name: completed_before + description: filter on started before (inclusive) timestamp in: query - schema: *ref_116 + schema: *ref_156 + - name: completed_after + description: filter on started after (exclusive) timestamp + in: query + schema: *ref_157 + - name: created_before_queue + description: filter on jobs created before X for jobs in the queue only + in: query + schema: *ref_158 + - name: created_after_queue + description: filter on jobs created after X for jobs in the queue only + in: query + schema: *ref_159 - name: running description: filter on running jobs in: query - schema: *ref_101 + schema: *ref_135 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query - schema: *ref_102 - - name: created_or_started_after - description: >- - filter on created_at for non non started job and started_at - otherwise after (exclusive) timestamp - in: query - schema: *ref_117 - - name: created_or_started_after_completed_jobs - description: >- - filter on created_at for non non started job and started_at - otherwise after (exclusive) timestamp but only for the completed - jobs - in: query - schema: *ref_118 + schema: *ref_136 - name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: *ref_103 + schema: *ref_137 - name: suspended description: filter on suspended jobs in: query - schema: *ref_104 + schema: *ref_138 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: tag description: filter on jobs with a given tag/worker group in: query - schema: *ref_106 + schema: *ref_140 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: *ref_107 + schema: *ref_141 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query - schema: *ref_109 - - name: page - description: which page to return (start at 1, default 1) - in: query - schema: *ref_5 + schema: *ref_143 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 + - name: trigger_kind + description: trigger kind (schedule, http, websocket...) + in: query + schema: *ref_160 - name: is_skipped description: is the job skipped in: query @@ -11574,11 +16700,11 @@ paths: schema: type: array items: - oneOf: &ref_124 + oneOf: &ref_165 - allOf: - type: object - properties: *ref_119 - required: *ref_120 + properties: *ref_161 + required: *ref_162 - type: object properties: type: @@ -11587,15 +16713,15 @@ paths: - CompletedJob - allOf: - type: object - properties: *ref_121 - required: *ref_122 + properties: *ref_163 + required: *ref_164 - type: object properties: type: type: string enum: - QueuedJob - discriminator: &ref_125 + discriminator: &ref_166 propertyName: type /jobs/db_clock: get: @@ -11658,11 +16784,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: no_logs in: query schema: @@ -11677,8 +16803,8 @@ paths: content: application/json: schema: - oneOf: *ref_124 - discriminator: *ref_125 + oneOf: *ref_165 + discriminator: *ref_166 /w/{workspace}/jobs_u/get_root_job_id/{id}: get: summary: get root job id @@ -11689,11 +16815,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 responses: '200': description: get root job id @@ -11711,11 +16837,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 + - name: remove_ansi_warnings + in: query + schema: + type: boolean responses: '200': description: job details @@ -11723,6 +16853,28 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: id + in: path + required: true + schema: *ref_144 + 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 @@ -11733,17 +16885,47 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 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: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -11754,11 +16936,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: running in: query schema: @@ -11805,11 +16987,11 @@ paths: type: string flow_status: type: object - properties: *ref_111 - required: *ref_112 + properties: *ref_147 + required: *ref_148 workflow_as_code_status: type: object - properties: *ref_113 + properties: *ref_149 /w/{workspace}/jobs_u/getupdate_sse/{id}: get: summary: get job updates via server-sent events @@ -11820,11 +17002,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: running in: query schema: @@ -11866,7 +17048,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true @@ -11889,11 +17071,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 responses: '200': description: flow debug info details @@ -11910,11 +17092,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 responses: '200': description: job details @@ -11922,8 +17104,8 @@ paths: application/json: schema: type: object - properties: *ref_119 - required: *ref_120 + properties: *ref_161 + required: *ref_162 /w/{workspace}/jobs_u/completed/get_result/{id}: get: summary: get completed job result @@ -11934,11 +17116,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: suspended_job in: query schema: @@ -11971,14 +17153,14 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: get_started in: query - schema: &ref_214 + schema: &ref_274 type: boolean responses: '200': @@ -11998,6 +17180,39 @@ paths: required: - completed - result + /w/{workspace}/jobs_u/completed/get_timing/{id}: + get: + summary: get completed job timing + operationId: getCompletedJobTiming + tags: + - job + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: id + in: path + required: true + schema: *ref_144 + 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) @@ -12008,11 +17223,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 responses: '200': description: job details @@ -12020,8 +17235,8 @@ paths: application/json: schema: type: object - properties: *ref_119 - required: *ref_120 + properties: *ref_161 + required: *ref_162 /w/{workspace}/jobs_u/queue/cancel/{id}: post: summary: cancel queued or running job @@ -12032,11 +17247,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 requestBody: description: reason required: true @@ -12064,11 +17279,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: reason required: true @@ -12096,11 +17311,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 requestBody: description: reason required: true @@ -12118,6 +17333,58 @@ paths: 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: id + in: path + required: true + schema: *ref_144 + 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 @@ -12128,11 +17395,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: resume_id in: path required: true @@ -12159,11 +17426,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: resume_id in: path required: true @@ -12173,6 +17440,14 @@ paths: 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 @@ -12201,11 +17476,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: approver in: query schema: @@ -12252,11 +17527,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: approver in: query schema: @@ -12303,11 +17578,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: payload description: > The base64 encoded payload that has been encoded as a JSON. e.g how @@ -12315,7 +17590,7 @@ paths: `encodeURIComponent(btoa(JSON.stringify({a: 2})))` in: query - schema: *ref_126 + schema: *ref_95 - name: resume_id in: path required: true @@ -12346,11 +17621,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: resume_id in: path required: true @@ -12388,11 +17663,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: key in: path required: true @@ -12420,11 +17695,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: key in: path required: true @@ -12446,11 +17721,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 requestBody: required: true content: @@ -12474,11 +17749,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: resume_id in: path required: true @@ -12509,11 +17784,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: resume_id in: path required: true @@ -12551,11 +17826,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 - name: resume_id in: path required: true @@ -12579,8 +17854,8 @@ paths: type: object properties: job: - oneOf: *ref_124 - discriminator: *ref_125 + oneOf: *ref_165 + discriminator: *ref_166 approvers: type: array items: @@ -12647,7 +17922,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new schedule required: true @@ -12655,110 +17930,155 @@ paths: application/json: schema: type: object - properties: &ref_275 + properties: &ref_381 path: type: string - description: The path where the schedule will be created + description: The unique path identifier for this schedule schedule: type: string description: >- - The cron schedule to trigger the script or flow. Should - include seconds. + 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: The timezone to use for the cron schedule + description: >- + IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', + 'America/New_York') script_path: type: string - description: The path to the script or flow to trigger + description: Path to the script or flow to execute when triggered is_flow: type: boolean - description: Whether the schedule is for a flow + description: >- + True if script_path points to a flow, false if it points to + a script args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true enabled: type: boolean - description: Whether the schedule is enabled + description: >- + Whether the schedule is currently active and will trigger + jobs on_failure: type: string - description: The path to the script or flow to trigger on failure + description: Path to a script or flow to run when the scheduled job fails on_failure_times: type: number - description: The number of times to retry on failure + description: >- + Number of consecutive failures before the on_failure handler + is triggered (default 1) on_failure_exact: type: boolean - description: Whether the schedule should only run on the exact time + description: >- + If true, trigger on_failure handler only on exactly N + failures, not on every failure after N on_failure_extra_args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true on_recovery: type: string - description: The path to the script or flow to trigger on recovery + description: >- + Path to a script or flow to run when the schedule recovers + after failures on_recovery_times: type: number - description: The number of times to retry on recovery + description: >- + Number of consecutive successes before the on_recovery + handler is triggered (default 1) on_recovery_extra_args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true on_success: type: string - description: The path to the script or flow to trigger on success + description: >- + Path to a script or flow to run after each successful + execution on_success_extra_args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true ws_error_handler_muted: type: boolean - description: Whether the WebSocket error handler is muted + description: >- + If true, the workspace-level error handler will not be + triggered for this schedule's failures retry: - description: The retry configuration for the schedule type: object - properties: &ref_127 + description: Retry configuration for failed module executions + properties: &ref_169 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: + type: object + description: Conditional retry based on error or result + properties: *ref_167 + required: *ref_168 no_flow_overlap: type: boolean description: >- - Whether the schedule should not run if a flow is already - running + If true, skip this schedule's execution if the previous run + is still in progress (prevents concurrent runs) summary: type: string - description: The summary of the schedule + description: Short summary describing the purpose of this schedule description: type: string - description: The description of the schedule + description: Detailed description of what this schedule does tag: type: string - description: The tag of the schedule + description: Worker tag to route jobs to specific worker groups paused_until: type: string - description: The date and time the schedule will be paused until format: date-time + description: >- + ISO 8601 datetime until which the schedule is paused. + Schedule resumes automatically after this time cron_version: type: string - description: The version of the cron schedule to use (last is v2) - required: &ref_276 + 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: &ref_382 - path - schedule - timezone @@ -12790,11 +18110,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated schedule required: true @@ -12802,78 +18122,103 @@ paths: application/json: schema: type: object - properties: &ref_277 + properties: &ref_383 schedule: type: string description: >- - The cron schedule to trigger the script or flow. Should - include seconds. + 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: The timezone to use for the cron schedule + description: >- + IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', + 'America/New_York') args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true on_failure: type: string - description: The path to the script or flow to trigger on failure + description: Path to a script or flow to run when the scheduled job fails on_failure_times: type: number - description: The number of times to retry on failure + description: >- + Number of consecutive failures before the on_failure handler + is triggered (default 1) on_failure_exact: type: boolean - description: Whether the schedule should only run on the exact time + description: >- + If true, trigger on_failure handler only on exactly N + failures, not on every failure after N on_failure_extra_args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true on_recovery: type: string - description: The path to the script or flow to trigger on recovery + description: >- + Path to a script or flow to run when the schedule recovers + after failures on_recovery_times: type: number - description: The number of times to retry on recovery + description: >- + Number of consecutive successes before the on_recovery + handler is triggered (default 1) on_recovery_extra_args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true on_success: type: string - description: The path to the script or flow to trigger on success + description: >- + Path to a script or flow to run after each successful + execution on_success_extra_args: - description: The arguments to pass to the script or flow type: object - additionalProperties: *ref_22 + description: The arguments to pass to the script or flow + additionalProperties: true ws_error_handler_muted: type: boolean - description: Whether the WebSocket error handler is muted + description: >- + If true, the workspace-level error handler will not be + triggered for this schedule's failures retry: - description: The retry configuration for the schedule type: object - properties: *ref_127 + description: Retry configuration for failed module executions + properties: *ref_169 no_flow_overlap: type: boolean description: >- - Whether the schedule should not run if a flow is already - running + If true, skip this schedule's execution if the previous run + is still in progress (prevents concurrent runs) summary: type: string - description: The summary of the schedule + description: Short summary describing the purpose of this schedule description: type: string - description: The description of the schedule + description: Detailed description of what this schedule does tag: type: string - description: The tag of the schedule + description: Worker tag to route jobs to specific worker groups paused_until: type: string - description: The date and time the schedule will be paused until format: date-time + description: >- + ISO 8601 datetime until which the schedule is paused. + Schedule resumes automatically after this time cron_version: type: string - description: The version of the cron schedule to use (last is v2) - required: &ref_278 + 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: &ref_384 - schedule - timezone - args @@ -12894,11 +18239,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated schedule enable required: true @@ -12929,11 +18274,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: schedule deleted @@ -12952,11 +18297,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: schedule deleted @@ -12964,79 +18309,141 @@ paths: application/json: schema: type: object - properties: &ref_128 + properties: &ref_170 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: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true 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: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true 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: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true on_success: type: string + description: >- + Path to a script or flow to run after each successful + execution on_success_extra_args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true ws_error_handler_muted: type: boolean + description: >- + If true, the workspace-level error handler will not be + triggered for this schedule's failures retry: type: object - properties: *ref_127 + description: Retry configuration for failed module executions + properties: *ref_169 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 - required: &ref_129 + 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: &ref_171 - path - edited_by - edited_at @@ -13057,11 +18464,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: schedule exists @@ -13080,21 +18487,21 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: path description: filter by path in: query @@ -13119,8 +18526,8 @@ paths: type: array items: type: object - properties: *ref_128 - required: *ref_129 + properties: *ref_170 + required: *ref_171 /w/{workspace}/schedules/list_with_jobs: get: summary: list schedules with last 20 jobs @@ -13131,15 +18538,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: schedule list @@ -13148,10 +18555,10 @@ paths: schema: type: array items: - allOf: &ref_274 + allOf: &ref_380 - type: object - properties: *ref_128 - required: *ref_129 + properties: *ref_170 + required: *ref_171 - type: object properties: jobs: @@ -13179,7 +18586,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: Handler description required: true @@ -13222,17 +18629,17 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: openapi spec info and url content: application/json: schema: type: object - properties: &ref_130 + properties: &ref_173 info: type: object - properties: &ref_285 + properties: &ref_390 title: type: string version: @@ -13261,28 +18668,28 @@ paths: type: string required: - name - required: &ref_286 + required: &ref_391 - title - version url: type: string openapi_spec_format: type: string - enum: &ref_280 + enum: &ref_385 - yaml - json http_route_filters: type: array items: type: object - properties: &ref_281 + properties: &ref_386 folder_regex: type: string path_regex: type: string route_path_regex: type: string - required: &ref_282 + required: &ref_387 - folder_regex - path_regex - route_path_regex @@ -13290,7 +18697,7 @@ paths: type: array items: type: object - properties: &ref_283 + properties: &ref_388 user_or_folder_regex: type: string enum: @@ -13303,10 +18710,8 @@ paths: type: string runnable_kind: type: string - enum: &ref_279 - - script - - flow - required: &ref_284 + enum: *ref_172 + required: &ref_389 - user_or_folder_regex - user_or_folder_regex_value - path @@ -13328,14 +18733,14 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: openapi spec info and url content: application/json: schema: type: object - properties: *ref_130 + properties: *ref_173 responses: '200': description: Downloaded OpenAPI spec @@ -13354,7 +18759,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new http trigger required: true @@ -13364,35 +18769,55 @@ paths: type: array items: type: object - properties: &ref_131 + properties: &ref_174 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: + description: >- + HTTP method (get, post, put, delete, patch) that triggers + this endpoint type: string - enum: &ref_133 + enum: &ref_176 - get - post - put @@ -13400,11 +18825,30 @@ paths: - patch 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 - authentication_method: + description: Deprecated, use request_type instead + request_type: + description: >- + How the request is handled - 'sync' waits for result, + 'async' returns job ID immediately, 'sync_sse' streams + results via Server-Sent Events type: string - enum: &ref_134 + enum: &ref_177 + - sync + - async + - sync_sse + authentication_method: + description: >- + How requests are authenticated - 'none' (public), + 'windmill' (Windmill token), 'api_key', 'basic_http', + 'custom_script', 'signature' + type: string + enum: &ref_178 - none - windmill - api_key @@ -13413,25 +18857,42 @@ paths: - 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: + description: job trigger mode + type: string + enum: &ref_179 + - enabled + - disabled + - suspended 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_132 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_175 - path - script_path - route_path - is_flow - - is_async - authentication_method - http_method - is_static_website @@ -13452,7 +18913,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new http trigger required: true @@ -13460,8 +18921,8 @@ paths: application/json: schema: type: object - properties: *ref_131 - required: *ref_132 + properties: *ref_174 + required: *ref_175 responses: '201': description: http trigger created @@ -13479,11 +18940,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -13491,63 +18952,106 @@ paths: application/json: schema: type: object - properties: &ref_287 + properties: &ref_392 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: + description: >- + HTTP method (get, post, put, delete, patch) that triggers + this endpoint type: string - enum: *ref_133 + enum: *ref_176 is_async: type: boolean - authentication_method: + description: Deprecated, use request_type instead + request_type: + description: >- + How the request is handled - 'sync' waits for result, + 'async' returns job ID immediately, 'sync_sse' streams + results via Server-Sent Events type: string - enum: *ref_134 + enum: *ref_177 + authentication_method: + description: >- + How requests are authenticated - 'none' (public), 'windmill' + (Windmill token), 'api_key', 'basic_http', 'custom_script', + 'signature' + type: string + enum: *ref_178 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_288 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_393 - path - script_path - is_flow - kind - - is_async - authentication_method - http_method - is_static_website @@ -13568,11 +19072,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: http trigger deleted @@ -13590,40 +19094,56 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: http trigger deleted content: application/json: schema: - allOf: &ref_135 + allOf: &ref_180 - type: object - properties: &ref_139 + properties: &ref_184 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 - required: &ref_140 + description: >- + True if script_path points to a flow, false if it + points to a script + mode: + description: job trigger mode + type: string + enum: *ref_179 + required: &ref_185 - path - script_path - email @@ -13632,55 +19152,95 @@ paths: - edited_by - edited_at - is_flow + - mode type: object - properties: &ref_136 + properties: &ref_181 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: + description: >- + HTTP method (get, post, put, delete, patch) that triggers + this endpoint type: string - enum: *ref_133 + enum: *ref_176 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 - is_async: - type: boolean - authentication_method: + description: Detailed description of what this trigger does + request_type: + description: >- + How the request is handled - 'sync' waits for result, + 'async' returns job ID immediately, 'sync_sse' streams + results via Server-Sent Events type: string - enum: *ref_134 + enum: *ref_177 + authentication_method: + description: >- + How requests are authenticated - 'none' (public), + 'windmill' (Windmill token), 'api_key', 'basic_http', + 'custom_script', 'signature' + type: string + enum: *ref_178 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_137 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_182 - route_path - - is_async + - request_type - authentication_method - http_method - is_static_website @@ -13697,15 +19257,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -13727,10 +19287,10 @@ paths: schema: type: array items: - allOf: *ref_135 + allOf: *ref_180 type: object - properties: *ref_136 - required: *ref_137 + properties: *ref_181 + required: *ref_182 /w/{workspace}/http_triggers/exists/{path}: get: summary: does http trigger exists @@ -13741,11 +19301,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: http trigger exists @@ -13763,7 +19323,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: route exists request required: true @@ -13776,7 +19336,7 @@ paths: type: string http_method: type: string - enum: *ref_133 + enum: *ref_176 trigger_path: type: string workspaced_route: @@ -13791,6 +19351,41 @@ paths: application/json: schema: type: boolean + /w/{workspace}/http_triggers/setmode/{path}: + post: + summary: enable/disable http trigger + operationId: setHttpTriggerMode + tags: + - http_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + mode: + description: job trigger mode + type: string + enum: *ref_179 + 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 @@ -13801,7 +19396,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new websocket trigger required: true @@ -13809,19 +19404,34 @@ paths: application/json: schema: type: object - properties: &ref_289 + properties: &ref_394 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 - enabled: - type: boolean + description: >- + The WebSocket URL to connect to (can be a static URL or + computed by a runnable) + mode: + description: job trigger mode + type: string + enum: *ref_179 filters: type: array + description: >- + Array of key-value filters to match incoming messages (only + matching messages trigger the script) items: type: object properties: @@ -13833,8 +19443,11 @@ paths: - value initial_messages: type: array + description: >- + Messages to send immediately after connecting (can be raw + strings or computed by runnables) items: - anyOf: &ref_138 + anyOf: &ref_183 - type: object properties: raw_message: @@ -13851,7 +19464,7 @@ paths: args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true is_flow: type: boolean required: @@ -13861,27 +19474,36 @@ paths: required: - runnable_result url_runnable_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + type: object + additionalProperties: true 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_290 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_395 - path - script_path - url - is_flow - filters - can_return_message + - can_return_error_result responses: '201': description: websocket trigger created @@ -13899,11 +19521,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -13911,17 +19533,30 @@ paths: application/json: schema: type: object - properties: &ref_291 + properties: &ref_396 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: @@ -13933,30 +19568,42 @@ paths: - value initial_messages: type: array + description: >- + Messages to send immediately after connecting (can be raw + strings or computed by runnables) items: - anyOf: *ref_138 + anyOf: *ref_183 url_runnable_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + type: object + additionalProperties: true 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_292 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_397 - path - script_path - url - is_flow - filters - can_return_message + - can_return_error_result responses: '200': description: websocket trigger updated @@ -13974,11 +19621,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: websocket trigger deleted @@ -13996,36 +19643,45 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: websocket trigger deleted content: application/json: schema: - allOf: &ref_141 + allOf: &ref_186 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_142 + properties: &ref_187 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 - enabled: - type: boolean + 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: @@ -14037,28 +19693,41 @@ paths: - value initial_messages: type: array + description: >- + Messages to send immediately after connecting (can be raw + strings or computed by runnables) items: - anyOf: *ref_138 + anyOf: *ref_183 url_runnable_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + type: object + additionalProperties: true 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_143 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_188 - url - - enabled - filters - can_return_message + - can_return_error_result /w/{workspace}/websocket_triggers/list: get: summary: list websocket triggers @@ -14069,15 +19738,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -14099,10 +19768,10 @@ paths: schema: type: array items: - allOf: *ref_141 + allOf: *ref_186 type: object - properties: *ref_142 - required: *ref_143 + properties: *ref_187 + required: *ref_188 /w/{workspace}/websocket_triggers/exists/{path}: get: summary: does websocket trigger exists @@ -14113,11 +19782,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: websocket trigger exists @@ -14125,21 +19794,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/websocket_triggers/setenabled/{path}: + /w/{workspace}/websocket_triggers/setmode/{path}: post: summary: set enabled websocket trigger - operationId: setWebsocketTriggerEnabled + operationId: setWebsocketTriggerMode tags: - websocket_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated websocket trigger enable required: true @@ -14148,10 +19817,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: websocket trigger enabled set @@ -14169,7 +19840,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test websocket connection required: true @@ -14183,7 +19854,7 @@ paths: url_runnable_args: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true can_return_message: type: boolean required: @@ -14206,7 +19877,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new kafka trigger required: true @@ -14214,39 +19885,67 @@ paths: application/json: schema: type: object - properties: &ref_315 + properties: &ref_421 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 - enabled: - type: boolean + description: Array of Kafka topic names to subscribe to + filters: + type: array + items: + type: object + properties: + key: + type: string + value: {} + required: + - key + - value + mode: + description: job trigger mode + type: string + enum: *ref_179 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_316 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_422 - path - script_path - is_flow - kafka_resource_path - group_id - topics + - filters responses: '201': description: kafka trigger created @@ -14264,11 +19963,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -14276,36 +19975,62 @@ paths: application/json: schema: type: object - properties: &ref_317 + properties: &ref_423 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_318 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_424 - path - script_path - kafka_resource_path - group_id - topics + - filters - is_flow responses: '200': @@ -14324,11 +20049,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: kafka trigger deleted @@ -14346,54 +20071,77 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: kafka trigger deleted content: application/json: schema: - allOf: &ref_144 + allOf: &ref_189 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_145 + properties: &ref_190 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 - enabled: - type: boolean + 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_146 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_191 - kafka_resource_path - group_id - topics - - enabled + - filters /w/{workspace}/kafka_triggers/list: get: summary: list kafka triggers @@ -14404,15 +20152,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -14434,10 +20182,10 @@ paths: schema: type: array items: - allOf: *ref_144 + allOf: *ref_189 type: object - properties: *ref_145 - required: *ref_146 + properties: *ref_190 + required: *ref_191 /w/{workspace}/kafka_triggers/exists/{path}: get: summary: does kafka trigger exists @@ -14448,11 +20196,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: kafka trigger exists @@ -14460,21 +20208,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/kafka_triggers/setenabled/{path}: + /w/{workspace}/kafka_triggers/setmode/{path}: post: summary: set enabled kafka trigger - operationId: setKafkaTriggerEnabled + operationId: setKafkaTriggerMode tags: - kafka_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated kafka trigger enable required: true @@ -14483,10 +20231,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: kafka trigger enabled set @@ -14504,7 +20254,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test kafka connection required: true @@ -14534,7 +20284,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new nats trigger required: true @@ -14542,37 +20292,57 @@ paths: application/json: schema: type: object - properties: &ref_319 + properties: &ref_425 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 - enabled: - type: boolean + description: Array of NATS subjects to subscribe to + mode: + description: job trigger mode + type: string + enum: *ref_179 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_320 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_426 - path - script_path - is_flow @@ -14596,11 +20366,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -14608,35 +20378,53 @@ paths: application/json: schema: type: object - properties: &ref_321 + properties: &ref_427 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_322 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_428 - path - script_path - nats_resource_path @@ -14660,11 +20448,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: nats trigger deleted @@ -14682,58 +20470,75 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: nats trigger deleted content: application/json: schema: - allOf: &ref_147 + allOf: &ref_192 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_148 + properties: &ref_193 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 - enabled: - type: boolean + 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_149 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_194 - nats_resource_path - use_jetstream - subjects - - enabled /w/{workspace}/nats_triggers/list: get: summary: list nats triggers @@ -14744,15 +20549,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -14774,10 +20579,10 @@ paths: schema: type: array items: - allOf: *ref_147 + allOf: *ref_192 type: object - properties: *ref_148 - required: *ref_149 + properties: *ref_193 + required: *ref_194 /w/{workspace}/nats_triggers/exists/{path}: get: summary: does nats trigger exists @@ -14788,11 +20593,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: nats trigger exists @@ -14800,21 +20605,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/nats_triggers/setenabled/{path}: + /w/{workspace}/nats_triggers/setmode/{path}: post: summary: set enabled nats trigger - operationId: setNatsTriggerEnabled + operationId: setNatsTriggerMode tags: - nats_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated nats trigger enable required: true @@ -14823,10 +20628,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: nats trigger enabled set @@ -14844,7 +20651,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test nats connection required: true @@ -14874,7 +20681,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new sqs trigger required: true @@ -14882,38 +20689,59 @@ paths: application/json: schema: type: object - properties: &ref_302 + properties: &ref_408 queue_url: type: string + description: The full URL of the AWS SQS queue to poll for messages aws_auth_resource_type: + description: >- + Authentication type - 'credentials' for access key/secret, + 'oidc' for OpenID Connect type: string - enum: &ref_150 + enum: &ref_195 - oidc - credentials 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script + mode: + description: job trigger mode + type: string + enum: *ref_179 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_303 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_409 - queue_url - aws_resource_path - path @@ -14937,11 +20765,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -14949,36 +20777,57 @@ paths: application/json: schema: type: object - properties: &ref_304 + properties: &ref_410 queue_url: type: string + description: The full URL of the AWS SQS queue to poll for messages aws_auth_resource_type: + description: >- + Authentication type - 'credentials' for access key/secret, + 'oidc' for OpenID Connect type: string - enum: *ref_150 + enum: *ref_195 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script + mode: + description: job trigger mode + type: string + enum: *ref_179 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_305 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_411 - queue_url - aws_resource_path - path @@ -15003,11 +20852,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: sqs trigger deleted @@ -15025,56 +20874,72 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: sqs trigger deleted content: application/json: schema: - allOf: &ref_151 + allOf: &ref_196 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_152 + properties: &ref_197 queue_url: type: string + description: The full URL of the AWS SQS queue to poll for messages aws_auth_resource_type: + description: >- + Authentication type - 'credentials' for access key/secret, + 'oidc' for OpenID Connect type: string - enum: *ref_150 + enum: *ref_195 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 - enabled: - type: boolean + 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_153 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_198 - queue_url - aws_resource_path - - enabled - aws_auth_resource_type /w/{workspace}/sqs_triggers/list: get: @@ -15086,15 +20951,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -15116,10 +20981,10 @@ paths: schema: type: array items: - allOf: *ref_151 + allOf: *ref_196 type: object - properties: *ref_152 - required: *ref_153 + properties: *ref_197 + required: *ref_198 /w/{workspace}/sqs_triggers/exists/{path}: get: summary: does sqs trigger exists @@ -15130,11 +20995,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: sqs trigger exists @@ -15142,21 +21007,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/sqs_triggers/setenabled/{path}: + /w/{workspace}/sqs_triggers/setmode/{path}: post: summary: set enabled sqs trigger - operationId: setSqsTriggerEnabled + operationId: setSqsTriggerMode tags: - sqs_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated sqs trigger enable required: true @@ -15165,10 +21030,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: sqs trigger enabled set @@ -15186,7 +21053,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test sqs connection required: true @@ -15206,6 +21073,648 @@ paths: text/plain: schema: type: string + /w/{workspace}/native_triggers/integrations/list: + get: + summary: list available native trigger services + operationId: listNativeTriggerServices + tags: + - workspace_integration + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + responses: + '200': + description: native trigger services list + content: + application/json: + schema: + type: array + items: + type: object + properties: &ref_506 + service_name: + type: string + enum: &ref_199 + - nextcloud + oauth_data: + nullable: true + type: object + properties: &ref_200 + 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: &ref_201 + - client_id + - client_secret + - base_url + - redirect_uri + required: &ref_507 + - service_name + /w/{workspace}/native_triggers/integrations/{service_name}/exists: + get: + summary: check if integrations for a particular service exists + operationId: checkIfNativeTriggersServiceExists + tags: + - workspace_integration + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + requestBody: + description: new native trigger service + required: true + content: + application/json: + schema: + type: object + properties: *ref_200 + required: *ref_201 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + requestBody: + description: redirect_uri + required: true + content: + application/json: + schema: + type: object + properties: &ref_202 + redirect_uri: + type: string + required: &ref_203 + - redirect_uri + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + - 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: + type: object + properties: *ref_202 + required: *ref_203 + 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. + + Requires write access to the script or flow that the trigger will be + associated with. + operationId: createNativeTrigger + tags: + - native_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + requestBody: + description: new native trigger configuration + required: true + content: + application/json: + schema: + type: object + description: Data for creating or updating a native trigger + properties: &ref_204 + 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: &ref_205 + - script_path + - is_flow + - service_config + responses: + '201': + description: native trigger created + content: + application/json: + schema: + type: object + description: Response returned when a native trigger is created + properties: &ref_509 + external_id: + type: string + description: >- + The external ID of the created trigger from the external + service + required: &ref_510 + - external_id + /w/{workspace}/native_triggers/{service_name}/update/{external_id}: + post: + summary: update native trigger + description: > + Updates an existing native trigger. + + Requires write access to the script or flow that the trigger is + associated with. + operationId: updateNativeTrigger + tags: + - native_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + - 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: + type: object + description: Data for creating or updating a native trigger + properties: *ref_204 + required: *ref_205 + 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. + + Requires write access to the script or flow that the trigger is + associated with. + operationId: getNativeTrigger + tags: + - native_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + - 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: + type: object + description: >- + Full trigger response containing both Windmill data and + external service data + properties: &ref_504 + 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: + type: string + enum: *ref_199 + 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: &ref_505 + - external_id + - workspace_id + - service_name + - script_path + - is_flow + - service_config + - external_data + /w/{workspace}/native_triggers/{service_name}/delete/{external_id}: + delete: + summary: delete native trigger + description: > + Deletes a native trigger by its external ID. + + Requires write access to the script or flow that the trigger is + associated with. + operationId: deleteNativeTrigger + tags: + - native_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + - 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: + type: object + description: A native trigger stored in Windmill + properties: &ref_502 + 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: + type: string + enum: *ref_199 + 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: &ref_503 + - external_id + - workspace_id + - service_name + - script_path + - is_flow + - service_config + /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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: service_name + in: path + required: true + schema: + type: string + enum: *ref_199 + 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: + type: object + properties: &ref_511 + id: + type: string + name: + type: string + description: + type: string + category: + type: string + path: + type: string + required: &ref_512 + - id + - name + - path + /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: + type: string + enum: *ref_199 + - 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 @@ -15216,7 +21725,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new mqtt trigger required: true @@ -15224,35 +21733,46 @@ paths: application/json: schema: type: object - properties: &ref_294 + properties: &ref_399 mqtt_resource_path: type: string + description: >- + Path to the MQTT resource containing broker connection + configuration subscribe_topics: type: array items: type: object - properties: &ref_154 + properties: &ref_206 qos: type: string - enum: &ref_293 + enum: &ref_398 - qos0 - qos1 - qos2 topic: type: string - required: &ref_155 + required: &ref_207 - qos - topic + 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: + description: MQTT v3 specific configuration (clean_session) type: object - properties: &ref_156 + properties: &ref_208 clean_session: type: boolean v5_config: + description: >- + MQTT v5 specific configuration (clean_start, + topic_alias_maximum, session_expiry_interval) type: object - properties: &ref_157 + properties: &ref_209 clean_start: type: boolean topic_alias_maximum: @@ -15260,28 +21780,40 @@ paths: session_expiry_interval: type: number client_version: + description: MQTT protocol version ('v3' or 'v5') type: string - enum: &ref_158 + enum: &ref_210 - v3 - 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script + mode: + description: job trigger mode + type: string + enum: *ref_179 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_295 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_400 - path - script_path - is_flow @@ -15304,11 +21836,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -15316,44 +21848,67 @@ paths: application/json: schema: type: object - properties: &ref_296 + properties: &ref_401 mqtt_resource_path: type: string + description: >- + Path to the MQTT resource containing broker connection + configuration subscribe_topics: type: array items: type: object - properties: *ref_154 - required: *ref_155 + properties: *ref_206 + required: *ref_207 + 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: + description: MQTT v3 specific configuration (clean_session) type: object - properties: *ref_156 + properties: *ref_208 v5_config: + description: >- + MQTT v5 specific configuration (clean_start, + topic_alias_maximum, session_expiry_interval) type: object - properties: *ref_157 + properties: *ref_209 client_version: + description: MQTT protocol version ('v3' or 'v5') type: string - enum: *ref_158 + enum: *ref_210 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script + mode: + description: job trigger mode + type: string + enum: *ref_179 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_297 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_402 - path - script_path - is_flow @@ -15377,11 +21932,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: mqtt trigger deleted @@ -15399,62 +21954,80 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: mqtt trigger deleted content: application/json: schema: - allOf: &ref_159 + allOf: &ref_211 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_160 + properties: &ref_212 mqtt_resource_path: type: string + description: >- + Path to the MQTT resource containing broker connection + configuration subscribe_topics: type: array items: type: object - properties: *ref_154 - required: *ref_155 + properties: *ref_206 + required: *ref_207 + description: >- + Array of MQTT topics to subscribe to, each with topic name + and QoS level v3_config: + description: MQTT v3 specific configuration (clean_session) type: object - properties: *ref_156 + properties: *ref_208 v5_config: + description: >- + MQTT v5 specific configuration (clean_start, + topic_alias_maximum, session_expiry_interval) type: object - properties: *ref_157 + properties: *ref_209 client_id: type: string + description: MQTT client ID for this connection client_version: + description: MQTT protocol version ('v3' or 'v5') type: string - enum: *ref_158 + enum: *ref_210 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 - enabled: - type: boolean + 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_161 - - enabled + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_213 - subscribe_topics - mqtt_resource_path /w/{workspace}/mqtt_triggers/list: @@ -15467,15 +22040,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -15497,10 +22070,10 @@ paths: schema: type: array items: - allOf: *ref_159 + allOf: *ref_211 type: object - properties: *ref_160 - required: *ref_161 + properties: *ref_212 + required: *ref_213 /w/{workspace}/mqtt_triggers/exists/{path}: get: summary: does mqtt trigger exists @@ -15511,11 +22084,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: mqtt trigger exists @@ -15523,21 +22096,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/mqtt_triggers/setenabled/{path}: + /w/{workspace}/mqtt_triggers/setmode/{path}: post: summary: set enabled mqtt trigger - operationId: setMqttTriggerEnabled + operationId: setMqttTriggerMode tags: - mqtt_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated mqtt trigger enable required: true @@ -15546,10 +22119,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: mqtt trigger enabled set @@ -15567,7 +22142,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test mqtt connection required: true @@ -15597,7 +22172,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new gcp trigger required: true @@ -15605,12 +22180,16 @@ paths: application/json: schema: type: object - properties: &ref_162 + description: Data for creating or updating a Google Cloud Pub/Sub trigger. + properties: &ref_214 gcp_resource_path: type: string + description: >- + Path to the GCP resource containing service account + credentials for authentication. subscription_mode: type: string - enum: &ref_167 + enum: &ref_219 - existing - create_update description: >- @@ -15619,45 +22198,84 @@ paths: updating a new subscription. 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: type: string - enum: &ref_164 + enum: &ref_216 - 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. delivery_config: type: object - properties: &ref_165 + description: Configuration for push delivery mode. + properties: &ref_217 audience: type: string + description: >- + The audience claim for OIDC tokens used in push + authentication. authenticate: type: boolean - required: &ref_166 + description: >- + If true, push messages will include OIDC authentication + tokens. + required: &ref_218 - authenticate - base_endpoint 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script. + mode: + description: job trigger mode + type: string + enum: *ref_179 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_163 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_215 - path - script_path - is_flow @@ -15681,11 +22299,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -15693,8 +22311,9 @@ paths: application/json: schema: type: object - properties: *ref_162 - required: *ref_163 + description: Data for creating or updating a Google Cloud Pub/Sub trigger. + properties: *ref_214 + required: *ref_215 responses: '200': description: gcp trigger updated @@ -15712,11 +22331,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: gcp trigger deleted @@ -15734,41 +22353,57 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: gcp trigger deleted content: application/json: schema: - allOf: &ref_168 + allOf: &ref_220 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_169 + description: >- + A Google Cloud Pub/Sub trigger that executes a script or flow + when messages are received. + properties: &ref_221 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: type: string - enum: *ref_164 + enum: *ref_216 + 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. delivery_config: type: object - properties: *ref_165 - required: *ref_166 + description: Configuration for push delivery mode. + properties: *ref_217 + required: *ref_218 subscription_mode: type: string - enum: *ref_167 + enum: *ref_219 description: >- The mode of subscription. 'existing' means using an existing GCP subscription, while 'create_update' involves @@ -15776,24 +22411,27 @@ paths: last_server_ping: type: string format: date-time + description: Timestamp of last server heartbeat (internal use). error: type: string - enabled: - type: boolean + 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_170 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_222 - gcp_resource_path - topic_id - subscription_id - - enabled - delivery_type - subscription_mode /w/{workspace}/gcp_triggers/list: @@ -15806,15 +22444,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -15836,10 +22474,13 @@ paths: schema: type: array items: - allOf: *ref_168 + allOf: *ref_220 type: object - properties: *ref_169 - required: *ref_170 + description: >- + A Google Cloud Pub/Sub trigger that executes a script or + flow when messages are received. + properties: *ref_221 + required: *ref_222 /w/{workspace}/gcp_triggers/exists/{path}: get: summary: does gcp trigger exists @@ -15850,11 +22491,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: gcp trigger exists @@ -15862,21 +22503,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/gcp_triggers/setenabled/{path}: + /w/{workspace}/gcp_triggers/setmode/{path}: post: summary: set enabled gcp trigger - operationId: setGcpTriggerEnabled + operationId: setGcpTriggerMode tags: - gcp_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated gcp trigger enable required: true @@ -15885,10 +22526,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: gcp trigger enabled set @@ -15906,7 +22549,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test gcp connection required: true @@ -15936,11 +22579,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: args to delete subscription from google cloud required: true @@ -15948,10 +22591,10 @@ paths: application/json: schema: type: object - properties: &ref_300 + properties: &ref_405 subscription_id: type: string - required: &ref_301 + required: &ref_406 - subscription_id responses: '200': @@ -15970,11 +22613,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: get all google topics @@ -15994,11 +22637,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: args to get subscription's topic from google cloud required: true @@ -16006,10 +22649,10 @@ paths: application/json: schema: type: object - properties: &ref_298 + properties: &ref_403 topic_id: type: string - required: &ref_299 + required: &ref_404 - topic_id responses: '200': @@ -16030,11 +22673,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: postgres version @@ -16052,11 +22695,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: boolean that indicates if postgres is set to logical level or not @@ -16074,7 +22717,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: template script required: true @@ -16082,19 +22725,19 @@ paths: application/json: schema: type: object - properties: &ref_309 + properties: &ref_415 postgres_resource_path: type: string relations: type: array items: type: object - properties: &ref_172 + properties: &ref_224 schema_name: type: string table_to_track: type: array - items: &ref_307 + items: &ref_413 type: object properties: table_name: @@ -16107,14 +22750,14 @@ paths: type: string required: - table_name - required: &ref_173 + required: &ref_225 - schema_name - table_to_track language: type: string - enum: &ref_308 + enum: &ref_414 - Typescript - required: &ref_310 + required: &ref_416 - postgres_resource_path - relations - language @@ -16135,11 +22778,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: &ref_205 + schema: &ref_265 type: string responses: '200': @@ -16158,11 +22801,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: list postgres slot @@ -16172,7 +22815,7 @@ paths: type: array items: type: object - properties: &ref_306 + properties: &ref_412 slot_name: type: string active: @@ -16187,11 +22830,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: new slot for postgres required: true @@ -16199,7 +22842,7 @@ paths: application/json: schema: type: object - properties: &ref_171 + properties: &ref_223 name: type: string responses: @@ -16219,11 +22862,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: replication slot of postgres required: true @@ -16231,7 +22874,7 @@ paths: application/json: schema: type: object - properties: *ref_171 + properties: *ref_223 responses: '200': description: postgres replication slot deleted @@ -16249,11 +22892,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: database publication list @@ -16273,16 +22916,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: publication in: path required: true description: The name of the publication - schema: &ref_174 + schema: &ref_226 type: string responses: '200': @@ -16291,18 +22934,18 @@ paths: application/json: schema: type: object - properties: &ref_175 + properties: &ref_227 table_to_track: type: array items: type: object - properties: *ref_172 - required: *ref_173 + properties: *ref_224 + required: *ref_225 transaction_to_track: type: array items: type: string - required: &ref_176 + required: &ref_228 - transaction_to_track /w/{workspace}/postgres_triggers/publication/create/{publication}/{path}: post: @@ -16314,16 +22957,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: publication in: path required: true description: The name of the publication - schema: *ref_174 + schema: *ref_226 requestBody: description: new publication for postgres required: true @@ -16331,8 +22974,8 @@ paths: application/json: schema: type: object - properties: *ref_175 - required: *ref_176 + properties: *ref_227 + required: *ref_228 responses: '201': description: publication created @@ -16350,16 +22993,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: publication in: path required: true description: The name of the publication - schema: *ref_174 + schema: *ref_226 requestBody: description: update publication for postgres required: true @@ -16367,8 +23010,8 @@ paths: application/json: schema: type: object - properties: *ref_175 - required: *ref_176 + properties: *ref_227 + required: *ref_228 responses: '201': description: publication updated @@ -16386,16 +23029,16 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: publication in: path required: true description: The name of the publication - schema: *ref_174 + schema: *ref_226 responses: '200': description: postgres publication deleted @@ -16413,7 +23056,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: new postgres trigger required: true @@ -16421,35 +23064,56 @@ paths: application/json: schema: type: object - properties: &ref_311 + properties: &ref_417 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script + mode: + description: job trigger mode + type: string + enum: *ref_179 postgres_resource_path: type: string + description: >- + Path to the PostgreSQL resource containing connection + configuration publication: + description: >- + Configuration for creating/managing the publication (tables, + operations) type: object - properties: *ref_175 - required: *ref_176 + properties: *ref_227 + required: *ref_228 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_312 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_418 - path - script_path - is_flow @@ -16472,11 +23136,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated trigger required: true @@ -16484,35 +23148,56 @@ paths: application/json: schema: type: object - properties: &ref_313 + properties: &ref_419 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 - enabled: - type: boolean + description: >- + True if script_path points to a flow, false if it points to + a script + mode: + description: job trigger mode + type: string + enum: *ref_179 postgres_resource_path: type: string + description: >- + Path to the PostgreSQL resource containing connection + configuration publication: + description: >- + Configuration for creating/managing the publication (tables, + operations) type: object - properties: *ref_175 - required: *ref_176 + properties: *ref_227 + required: *ref_228 error_handler_path: type: string + description: Path to a script or flow to run when the triggered job fails error_handler_args: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_314 + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_420 - path - script_path - is_flow @@ -16537,11 +23222,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: postgres trigger deleted @@ -16559,49 +23244,62 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: get postgres trigger content: application/json: schema: - allOf: &ref_177 + allOf: &ref_229 - type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 type: object - properties: &ref_178 - enabled: - type: boolean + properties: &ref_230 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: - type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 - retry: type: object - properties: *ref_127 - required: &ref_179 - - enabled + additionalProperties: true + retry: + description: Retry configuration for failed module executions + type: object + properties: *ref_169 + required: &ref_231 - postgres_resource_path - replication_slot_name - publication_name @@ -16615,15 +23313,15 @@ paths: - required: true name: workspace in: path - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: path description: filter by path in: query @@ -16645,10 +23343,10 @@ paths: schema: type: array items: - allOf: *ref_177 + allOf: *ref_229 type: object - properties: *ref_178 - required: *ref_179 + properties: *ref_230 + required: *ref_231 /w/{workspace}/postgres_triggers/exists/{path}: get: summary: does postgres trigger exists @@ -16659,11 +23357,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: postgres trigger exists @@ -16671,21 +23369,21 @@ paths: application/json: schema: type: boolean - /w/{workspace}/postgres_triggers/setenabled/{path}: + /w/{workspace}/postgres_triggers/setmode/{path}: post: summary: set enabled postgres trigger - operationId: setPostgresTriggerEnabled + operationId: setPostgresTriggerMode tags: - postgres_trigger parameters: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: updated postgres trigger enable required: true @@ -16694,10 +23392,12 @@ paths: schema: type: object properties: - enabled: - type: boolean + mode: + description: job trigger mode + type: string + enum: *ref_179 required: - - enabled + - mode responses: '200': description: postgres trigger enabled set @@ -16715,7 +23415,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: test postgres connection required: true @@ -16735,6 +23435,315 @@ paths: text/plain: schema: type: string + /w/{workspace}/email_triggers/create: + post: + summary: create email trigger + operationId: createEmailTrigger + tags: + - email_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + requestBody: + description: new email trigger + required: true + content: + application/json: + schema: + type: object + properties: &ref_429 + 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + retry: + type: object + description: Retry configuration for failed module executions + properties: *ref_169 + mode: + description: job trigger mode + type: string + enum: *ref_179 + required: &ref_430 + - path + - script_path + - local_part + - is_flow + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + requestBody: + description: updated trigger + required: true + content: + application/json: + schema: + type: object + properties: &ref_431 + 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: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + retry: + type: object + description: Retry configuration for failed module executions + properties: *ref_169 + required: &ref_432 + - path + - script_path + - is_flow + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + responses: + '200': + description: email trigger retrieved + content: + application/json: + schema: + allOf: &ref_232 + - type: object + properties: *ref_184 + required: *ref_185 + type: object + properties: &ref_233 + local_part: + type: string + workspaced_local_part: + type: boolean + error_handler_path: + type: string + error_handler_args: + type: object + description: The arguments to pass to the script or flow + additionalProperties: true + retry: + type: object + description: Retry configuration for failed module executions + properties: *ref_169 + required: &ref_234 + - local_part + /w/{workspace}/email_triggers/list: + get: + summary: list email triggers + operationId: listEmailTriggers + tags: + - email_trigger + parameters: + - required: true + name: workspace + in: path + schema: *ref_4 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + - 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: + allOf: *ref_232 + type: object + properties: *ref_233 + required: *ref_234 + /w/{workspace}/email_triggers/exists/{path}: + get: + summary: does email trigger exists + operationId: existsEmailTrigger + tags: + - email_trigger + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: path + in: path + required: true + schema: *ref_48 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + mode: + description: job trigger mode + type: string + enum: *ref_179 + required: + - mode + responses: + '200': + description: email trigger enable/disable + content: + text/plain: + schema: + type: string /groups/list: get: summary: list instance groups @@ -16750,7 +23759,9 @@ paths: type: array items: type: object - properties: &ref_181 + required: &ref_236 + - name + properties: &ref_237 name: type: string summary: @@ -16759,8 +23770,45 @@ paths: type: array items: type: string - required: &ref_182 + /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: + type: object + required: &ref_433 - name + properties: &ref_434 + name: + type: string + summary: + type: string + emails: + type: array + items: + type: string + workspaces: + type: array + items: + type: object + properties: &ref_435 + workspace_id: + type: string + workspace_name: + type: string + role: + type: string + required: &ref_436 + - name /groups/get/{name}: get: summary: get instance group @@ -16771,7 +23819,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: instance group @@ -16779,8 +23827,8 @@ paths: application/json: schema: type: object - properties: *ref_181 - required: *ref_182 + required: *ref_236 + properties: *ref_237 /groups/create: post: summary: create instance group @@ -16818,7 +23866,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: update instance group required: true @@ -16848,7 +23896,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: instance group deleted @@ -16866,7 +23914,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: user to add to instance group required: true @@ -16896,7 +23944,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: user to remove from instance group required: true @@ -16931,7 +23979,7 @@ paths: type: array items: type: object - properties: &ref_183 + properties: &ref_238 name: type: string summary: @@ -16946,7 +23994,7 @@ paths: type: string external_id: type: string - required: &ref_184 + required: &ref_239 - name /groups/overwrite: post: @@ -16963,8 +24011,8 @@ paths: type: array items: type: object - properties: *ref_183 - required: *ref_184 + properties: *ref_238 + required: *ref_239 responses: '200': description: success message @@ -16982,15 +24030,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: group list @@ -17000,7 +24048,7 @@ paths: type: array items: type: object - properties: &ref_185 + properties: &ref_240 name: type: string summary: @@ -17013,7 +24061,7 @@ paths: type: object additionalProperties: type: boolean - required: &ref_186 + required: &ref_241 - name /w/{workspace}/groups/listnames: get: @@ -17025,7 +24073,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: only_member_of in: query description: only list the groups the user is member of (default false) @@ -17050,7 +24098,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: create group required: true @@ -17082,11 +24130,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: updated group required: true @@ -17114,11 +24162,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: group deleted @@ -17136,11 +24184,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: group @@ -17148,8 +24196,8 @@ paths: application/json: schema: type: object - properties: *ref_185 - required: *ref_186 + properties: *ref_240 + required: *ref_241 /w/{workspace}/groups/adduser/{name}: post: summary: add user to group @@ -17160,11 +24208,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: added user to group required: true @@ -17192,11 +24240,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: added user to group required: true @@ -17214,6 +24262,51 @@ paths: text/plain: schema: type: string + /w/{workspace}/groups_history/get/{name}: + get: + summary: get group permission history + operationId: getGroupPermissionHistory + tags: + - group + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: name + in: path + required: true + schema: *ref_235 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + 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 @@ -17224,15 +24317,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: folder list @@ -17242,7 +24335,7 @@ paths: type: array items: type: object - properties: &ref_187 + properties: &ref_242 name: type: string owners: @@ -17260,7 +24353,7 @@ paths: edited_at: type: string format: date-time - required: &ref_188 + required: &ref_243 - name - owners - extra_perms @@ -17274,7 +24367,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: only_member_of in: query description: only list the folders the user is member of (default false) @@ -17299,7 +24392,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: create folder required: true @@ -17338,11 +24431,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: update folder required: true @@ -17377,11 +24470,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: folder deleted @@ -17399,11 +24492,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: folder @@ -17411,8 +24504,8 @@ paths: application/json: schema: type: object - properties: *ref_187 - required: *ref_188 + properties: *ref_242 + required: *ref_243 /w/{workspace}/folders/exists/{name}: get: summary: exists folder @@ -17423,11 +24516,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: folder exists @@ -17445,11 +24538,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: folder @@ -17487,11 +24580,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: owner user to folder required: true @@ -17521,11 +24614,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: added owner to folder required: true @@ -17547,6 +24640,51 @@ paths: text/plain: schema: type: string + /w/{workspace}/folders_history/get/{name}: + get: + summary: get folder permission history + operationId: getFolderPermissionHistory + tags: + - folder + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - name: name + in: path + required: true + schema: *ref_235 + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 + 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 @@ -17558,11 +24696,11 @@ paths: - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: ping_since in: query required: false @@ -17580,7 +24718,7 @@ paths: type: array items: type: object - properties: &ref_323 + properties: &ref_437 worker: type: string worker_instance: @@ -17622,7 +24760,9 @@ paths: type: number wm_memory_usage: type: number - required: &ref_324 + job_isolation: + type: string + required: &ref_438 - worker - worker_instance - ping_at @@ -17631,25 +24771,36 @@ paths: - jobs_executed - worker_group - wm_version - /workers/exists_worker_with_tag: + /workers/exists_workers_with_tags: get: - summary: exists worker with tag - operationId: existsWorkerWithTag + summary: exists workers with tags + operationId: existsWorkersWithTags tags: - worker parameters: - - name: tag + - 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: whether a worker with the tag exists + description: map of tags to whether at least one worker with the tag exists content: application/json: schema: - type: boolean + type: object + additionalProperties: + type: boolean /workers/queue_metrics: get: summary: get queue metrics @@ -17698,6 +24849,21 @@ paths: 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 @@ -17730,7 +24896,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: a config @@ -17739,12 +24905,12 @@ paths: schema: type: object nullable: true - properties: &ref_242 + properties: &ref_344 alerts: type: array items: type: object - properties: &ref_240 + properties: &ref_342 name: type: string tags_to_monitor: @@ -17757,7 +24923,7 @@ paths: type: integer alert_time_threshold_seconds: type: integer - required: &ref_241 + required: &ref_343 - name - tags_to_monitor - jobs_num_threshold @@ -17773,7 +24939,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 requestBody: description: worker group required: true @@ -17796,7 +24962,7 @@ paths: - name: name in: path required: true - schema: *ref_180 + schema: *ref_235 responses: '200': description: Delete config @@ -17819,12 +24985,12 @@ paths: type: array items: type: object - properties: &ref_365 + properties: &ref_483 name: type: string config: type: object - required: &ref_366 + required: &ref_484 - name /configs/list_autoscaling_events/{worker_group}: get: @@ -17838,6 +25004,14 @@ paths: required: true schema: type: string + - name: page + description: which page to return (start at 1, default 1) + in: query + schema: *ref_13 + - name: per_page + description: number of items to return for a given page (default 30, max 100) + in: query + schema: *ref_14 responses: '200': description: List of autoscaling events @@ -17847,7 +25021,7 @@ paths: type: array items: type: object - properties: &ref_369 + properties: &ref_487 id: type: integer format: int64 @@ -17862,6 +25036,21 @@ paths: applied_at: type: string format: date-time + /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. @@ -18000,6 +25189,20 @@ paths: - 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 @@ -18010,11 +25213,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: kind in: path required: true @@ -18038,6 +25241,7 @@ paths: - mqtt_trigger - gcp_trigger - sqs_trigger + - email_trigger responses: '200': description: acls @@ -18057,11 +25261,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: kind in: path required: true @@ -18085,6 +25289,7 @@ paths: - mqtt_trigger - gcp_trigger - sqs_trigger + - email_trigger requestBody: description: acl to add required: true @@ -18116,11 +25321,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: kind in: path required: true @@ -18144,6 +25349,7 @@ paths: - mqtt_trigger - gcp_trigger - sqs_trigger + - email_trigger requestBody: description: acl to add required: true @@ -18173,7 +25379,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: capture config required: true @@ -18184,17 +25390,18 @@ paths: properties: trigger_kind: type: string - enum: &ref_189 + enum: &ref_244 - webhook - http - websocket - kafka - - email + - default_email - nats - postgres - sqs - mqtt - gcp + - email path: type: string is_flow: @@ -18222,21 +25429,21 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: trigger_kind in: path required: true schema: type: string - enum: *ref_189 + enum: *ref_244 - name: runnable_kind in: path required: true - schema: *ref_80 + schema: *ref_110 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: capture config pinged @@ -18250,15 +25457,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_kind in: path required: true - schema: *ref_80 + schema: *ref_110 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: capture configs for a script or flow @@ -18268,17 +25475,17 @@ paths: type: array items: type: object - properties: &ref_370 + properties: &ref_488 trigger_config: {} trigger_kind: type: string - enum: *ref_189 + enum: *ref_244 error: type: string last_server_ping: type: string format: date-time - required: &ref_371 + required: &ref_489 - trigger_kind /w/{workspace}/capture/list/{runnable_kind}/{path}: get: @@ -18290,28 +25497,28 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_kind in: path required: true - schema: *ref_80 + schema: *ref_110 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: trigger_kind in: query schema: type: string - enum: *ref_189 + enum: *ref_244 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: list of captures for a script or flow @@ -18321,10 +25528,10 @@ paths: type: array items: type: object - properties: &ref_190 + properties: &ref_245 trigger_kind: type: string - enum: *ref_189 + enum: *ref_244 main_args: {} preprocessor_args: {} id: @@ -18332,7 +25539,7 @@ paths: created_at: type: string format: date-time - required: &ref_191 + required: &ref_246 - trigger_kind - main_args - preprocessor_args @@ -18348,15 +25555,15 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_kind in: path required: true - schema: *ref_80 + schema: *ref_110 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 requestBody: description: move captures and configs to a new path required: true @@ -18384,7 +25591,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true @@ -18397,8 +25604,8 @@ paths: application/json: schema: type: object - properties: *ref_190 - required: *ref_191 + properties: *ref_245 + required: *ref_246 delete: summary: delete a capture operationId: deleteCapture @@ -18408,7 +25615,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true @@ -18427,7 +25634,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: content: application/json: @@ -18443,6 +25650,7 @@ paths: - app - script - raw_app + - asset responses: '200': description: star item @@ -18456,7 +25664,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: content: application/json: @@ -18472,6 +25680,7 @@ paths: - app - script - raw_app + - asset responses: '200': description: unstar item @@ -18485,33 +25694,33 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_id in: query - schema: &ref_192 + schema: &ref_247 type: string - name: runnable_type in: query - schema: &ref_193 + schema: &ref_248 type: string - enum: &ref_248 + enum: &ref_352 - ScriptHash - ScriptPath - FlowPath - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: include_preview in: query schema: @@ -18525,7 +25734,7 @@ paths: type: array items: type: object - properties: &ref_194 + properties: &ref_249 id: type: string name: @@ -18539,7 +25748,7 @@ paths: type: boolean success: type: boolean - required: &ref_195 + required: &ref_250 - id - name - args @@ -18556,7 +25765,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: jobOrInputId in: path required: true @@ -18586,21 +25795,21 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_id in: query - schema: *ref_192 + schema: *ref_247 - name: runnable_type in: query - schema: *ref_193 + schema: *ref_248 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 responses: '200': description: Saved Inputs for a Runnable @@ -18610,8 +25819,8 @@ paths: type: array items: type: object - properties: *ref_194 - required: *ref_195 + properties: *ref_249 + required: *ref_250 /w/{workspace}/inputs/create: post: summary: Create an Input for future use in a script or flow @@ -18622,13 +25831,13 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: runnable_id in: query - schema: *ref_192 + schema: *ref_247 - name: runnable_type in: query - schema: *ref_193 + schema: *ref_248 requestBody: description: Input required: true @@ -18636,12 +25845,12 @@ paths: application/json: schema: type: object - properties: &ref_244 + properties: &ref_348 name: type: string args: type: object - required: &ref_245 + required: &ref_349 - name - args - created_by @@ -18663,7 +25872,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: UpdateInput required: true @@ -18671,14 +25880,14 @@ paths: application/json: schema: type: object - properties: &ref_246 + properties: &ref_350 id: type: string name: type: string is_public: type: boolean - required: &ref_247 + required: &ref_351 - id - name - is_public @@ -18700,11 +25909,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: input in: path required: true - schema: &ref_213 + schema: &ref_273 type: string responses: '200': @@ -18726,7 +25935,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: S3 resource to connect to required: true @@ -18737,7 +25946,7 @@ paths: properties: s3_resource: type: object - properties: &ref_196 + properties: &ref_251 bucket: type: string region: @@ -18752,7 +25961,7 @@ paths: type: string pathStyle: type: boolean - required: &ref_197 + required: &ref_252 - bucket - region - endPoint @@ -18780,7 +25989,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: >- S3 resource path to use to generate the connection settings. If empty, @@ -18819,7 +26028,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: S3 resource to connect to required: true @@ -18830,8 +26039,8 @@ paths: properties: s3_resource: type: object - properties: *ref_196 - required: *ref_197 + properties: *ref_251 + required: *ref_252 responses: '200': description: Connection settings @@ -18852,10 +26061,10 @@ paths: type: boolean client_kwargs: type: object - properties: &ref_198 + properties: &ref_253 region_name: type: string - required: &ref_199 + required: &ref_254 - region_name required: - endpoint_url @@ -18874,7 +26083,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: >- S3 resource path to use to generate the connection settings. If empty, @@ -18910,8 +26119,8 @@ paths: type: boolean client_kwargs: type: object - properties: *ref_198 - required: *ref_199 + properties: *ref_253 + required: *ref_254 required: - endpoint_url - use_ssl @@ -18949,7 +26158,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: >- S3 resource path to use. If empty, the S3 resource defined in the @@ -18969,8 +26178,8 @@ paths: application/json: schema: type: object - properties: *ref_196 - required: *ref_197 + properties: *ref_251 + required: *ref_252 /w/{workspace}/job_helpers/test_connection: get: summary: Test connection to the workspace object storage @@ -18981,7 +26190,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: storage in: query schema: @@ -19002,7 +26211,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: max_keys in: query required: true @@ -19034,10 +26243,10 @@ paths: type: array items: type: object - properties: &ref_344 + properties: &ref_255 s3: type: string - required: &ref_345 + required: &ref_256 - s3 restricted_access: type: boolean @@ -19053,7 +26262,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: file_key in: query required: true @@ -19070,7 +26279,7 @@ paths: application/json: schema: type: object - properties: &ref_346 + properties: &ref_259 mime_type: type: string size_in_bytes: @@ -19093,7 +26302,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: file_key in: query required: true @@ -19134,7 +26343,7 @@ paths: application/json: schema: type: object - properties: &ref_347 + properties: &ref_257 msg: type: string content: @@ -19146,8 +26355,183 @@ paths: - Csv - Parquet - Unknown - required: &ref_348 + required: &ref_258 - content_type + /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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: object + properties: *ref_255 + required: *ref_256 + 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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: object + properties: *ref_257 + required: *ref_258 + /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: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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: + type: object + properties: *ref_259 + /w/{workspace}/job_helpers/check_s3_folder_exists: + get: + summary: Check if S3 path exists and is a folder + operationId: checkS3FolderExists + tags: + - helpers + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + - 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 @@ -19158,11 +26542,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: offset in: query schema: @@ -19206,11 +26590,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: search_col in: query schema: @@ -19243,11 +26627,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 - name: offset in: query schema: @@ -19295,7 +26679,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: file_key in: query required: true @@ -19321,7 +26705,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: src_file_key in: query required: true @@ -19352,7 +26736,70 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - 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: + - name: workspace + in: path + required: true + schema: *ref_4 - name: file_key in: query required: false @@ -19415,7 +26862,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: file_key in: query required: true @@ -19453,7 +26900,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: file_key in: query required: true @@ -19486,11 +26933,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 requestBody: description: parameters for statistics retrieval required: true @@ -19519,46 +26966,46 @@ paths: type: array items: type: object - properties: &ref_349 + properties: &ref_467 id: type: string name: type: string - required: &ref_350 + required: &ref_468 - id scalar_metrics: type: array items: type: object - properties: &ref_351 + properties: &ref_469 metric_id: type: string value: type: number - required: &ref_352 + required: &ref_470 - id - value timeseries_metrics: type: array items: type: object - properties: &ref_353 + properties: &ref_471 metric_id: type: string values: type: array items: type: object - properties: &ref_355 + properties: &ref_473 timestamp: type: string format: date-time value: type: number - required: &ref_356 + required: &ref_474 - timestamp - value - required: &ref_354 + required: &ref_472 - id - values /w/{workspace}/job_metrics/set_progress/{id}: @@ -19571,11 +27018,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 requestBody: description: parameters for statistics retrieval required: true @@ -19605,11 +27052,11 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 responses: '200': description: job progress between 0 and 99 @@ -19627,11 +27074,11 @@ paths: - name: before description: filter on started before (inclusive) timestamp in: query - schema: *ref_200 + schema: *ref_260 - name: after description: filter on created after (exclusive) timestamp in: query - schema: *ref_201 + schema: *ref_261 - name: with_error in: query required: false @@ -19680,7 +27127,7 @@ paths: - name: path in: path required: true - schema: *ref_31 + schema: *ref_48 responses: '200': description: log stream @@ -19703,12 +27150,12 @@ paths: type: array items: type: object - properties: &ref_359 + properties: &ref_477 concurrency_key: type: string total_running: type: number - required: &ref_360 + required: &ref_478 - concurrency_key - total_running /concurrency_groups/prune/{concurrency_id}: @@ -19721,7 +27168,7 @@ paths: - name: concurrency_id in: path required: true - schema: &ref_215 + schema: &ref_275 type: string responses: '200': @@ -19741,7 +27188,7 @@ paths: - name: id in: path required: true - schema: *ref_123 + schema: *ref_144 responses: '200': description: concurrency key for given job @@ -19770,109 +27217,110 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 - 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: *ref_110 + schema: *ref_146 - 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: *ref_60 + schema: *ref_88 - name: script_path_exact description: mask to filter exact matching path in: query - schema: *ref_95 + schema: *ref_129 - name: script_path_start description: mask to filter matching starting path in: query - schema: *ref_96 + schema: *ref_130 - name: schedule_path description: mask to filter by schedule path in: query - schema: *ref_97 + schema: *ref_131 - name: script_hash description: mask to filter exact matching path in: query - schema: *ref_98 + schema: *ref_132 - name: started_before description: filter on started before (inclusive) timestamp in: query - schema: *ref_99 + schema: *ref_133 - name: started_after description: filter on started after (exclusive) timestamp in: query - schema: *ref_100 - - name: created_or_started_before - description: >- - filter on created_at for non non started job and started_at - otherwise before (inclusive) timestamp - in: query - schema: *ref_116 + schema: *ref_134 - name: running description: filter on running jobs in: query - schema: *ref_101 + schema: *ref_135 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query - schema: *ref_102 - - name: created_or_started_after - description: >- - filter on created_at for non non started job and started_at - otherwise after (exclusive) timestamp + schema: *ref_136 + - name: completed_before + description: filter on started before (inclusive) timestamp in: query - schema: *ref_117 - - name: created_or_started_after_completed_jobs - description: >- - filter on created_at for non non started job and started_at - otherwise after (exclusive) timestamp but only for the completed - jobs + schema: *ref_156 + - name: completed_after + description: filter on started after (exclusive) timestamp in: query - schema: *ref_118 + schema: *ref_157 + - name: created_before_queue + description: filter on jobs created before X for jobs in the queue only + in: query + schema: *ref_158 + - name: created_after_queue + description: filter on jobs created after X for jobs in the queue only + in: query + schema: *ref_159 - name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: *ref_103 + schema: *ref_137 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 - name: tag description: filter on jobs with a given tag/worker group in: query - schema: *ref_106 + schema: *ref_140 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: *ref_107 + schema: *ref_141 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query - schema: *ref_109 + schema: *ref_143 - name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 + - name: trigger_kind + description: trigger kind (schedule, http, websocket...) + in: query + schema: *ref_160 - name: is_skipped description: is the job skipped in: query @@ -19912,17 +27360,17 @@ paths: application/json: schema: type: object - properties: &ref_361 + properties: &ref_479 jobs: type: array items: - oneOf: *ref_124 - discriminator: *ref_125 + oneOf: *ref_165 + discriminator: *ref_166 obscured_jobs: type: array items: type: object - properties: &ref_249 + properties: &ref_353 typ: type: string started_at: @@ -19935,7 +27383,7 @@ paths: Obscured jobs omitted for security because of too specific filtering type: boolean - required: &ref_362 + required: &ref_480 - jobs - obscured_jobs /srch/w/{workspace}/index/search/job: @@ -19948,7 +27396,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 - name: search_query in: query required: true @@ -19979,7 +27427,7 @@ paths: type: array items: type: object - properties: &ref_367 + properties: &ref_485 dancer: type: string hit_count: @@ -20055,7 +27503,7 @@ paths: type: array items: type: object - properties: &ref_368 + properties: &ref_486 dancer: type: string /srch/index/search/count_service_logs: @@ -20124,7 +27572,7 @@ paths: type: string /w/{workspace}/assets/list: get: - summary: List all assets in the workspace + summary: List all assets in the workspace with cursor pagination operationId: listAssets tags: - asset @@ -20132,52 +27580,136 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 + - 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: all assets in the workspace + description: paginated assets in the workspace content: application/json: schema: - type: array - items: - type: object - required: - - path - - kind - - usages - properties: - path: - type: string - kind: - type: string - enum: *ref_202 - usages: - type: array - items: - type: object - required: - - path - - kind - properties: - path: - type: string - kind: - type: string - enum: &ref_203 - - script - - flow - access_type: - type: string - enum: &ref_204 - - r - - w - - rw - metadata: + type: object + required: + - assets + properties: + assets: + type: array + items: type: object + required: + - path + - kind + - usages properties: - resource_type: + path: type: string + kind: + type: string + enum: *ref_262 + usages: + type: array + items: + type: object + required: + - path + - kind + properties: + path: + type: string + kind: + type: string + enum: &ref_264 + - script + - flow + - job + access_type: + type: string + enum: &ref_263 + - r + - w + - rw + nullable: true + columns: + type: object + description: The columns used (for tables) + additionalProperties: + type: string + enum: *ref_263 + nullable: true + 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 @@ -20188,7 +27720,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 requestBody: description: list assets by usages required: true @@ -20211,7 +27743,7 @@ paths: type: string kind: type: string - enum: *ref_203 + enum: *ref_264 responses: '200': description: all assets used by the given usage paths, in the same order @@ -20231,10 +27763,37 @@ paths: type: string kind: type: string - enum: *ref_202 + enum: *ref_262 access_type: type: string - enum: *ref_204 + enum: *ref_263 + nullable: true + /w/{workspace}/assets/list_favorites: + get: + summary: List all favorite assets for the authenticated user + operationId: listFavoriteAssets + tags: + - asset + parameters: + - name: workspace + in: path + required: true + schema: *ref_4 + 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 @@ -20245,7 +27804,7 @@ paths: - name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 responses: '200': description: list of MCP tools available for the workspace @@ -20255,13 +27814,13 @@ paths: type: array items: type: object - required: &ref_235 + required: &ref_337 - name - description - instructions - path - method - properties: &ref_236 + properties: &ref_338 name: type: string description: The tool name/operation ID @@ -20289,6 +27848,101 @@ paths: type: object description: JSON schema for request body nullable: true + /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: @@ -20303,103 +27957,109 @@ components: name: id in: path required: true - schema: *ref_205 + schema: *ref_265 Key: name: key in: path required: true - schema: *ref_9 + schema: *ref_21 WorkspaceId: name: workspace in: path required: true - schema: *ref_0 + schema: *ref_4 PublicationName: name: publication in: path required: true description: The name of the publication - schema: *ref_174 + schema: *ref_226 VersionId: name: version in: path required: true - schema: *ref_206 + schema: + type: number Token: name: token in: path required: true - schema: *ref_207 + schema: *ref_266 AccountId: name: id in: path required: true - schema: *ref_38 + schema: *ref_58 ClientName: name: client_name in: path required: true - schema: *ref_35 + schema: *ref_55 ScriptPath: name: path in: path required: true - schema: *ref_48 + schema: *ref_74 ScriptHash: name: hash in: path required: true - schema: *ref_53 + schema: *ref_81 JobId: name: id in: path required: true - schema: *ref_123 + schema: *ref_144 Path: name: path in: path required: true - schema: *ref_31 + schema: *ref_48 CustomPath: name: custom_path in: path required: true - schema: *ref_81 + schema: *ref_111 PathId: name: id in: path required: true - schema: *ref_41 + schema: *ref_61 PathVersion: name: version in: path required: true - schema: *ref_208 + schema: *ref_267 Name: name: name in: path required: true - schema: *ref_180 + schema: *ref_235 Page: name: page description: which page to return (start at 1, default 1) in: query - schema: *ref_5 + schema: *ref_13 PerPage: name: per_page description: number of items to return for a given page (default 30, max 100) in: query - schema: *ref_6 + schema: *ref_14 + JobTriggerKind: + name: trigger_kind + description: trigger kind (schedule, http, websocket...) + in: query + schema: *ref_160 OrderDesc: name: order_desc description: order by desc order (default true) in: query - schema: *ref_66 + schema: *ref_96 CreatedBy: name: created_by description: mask to filter exact matching user creator in: query - schema: *ref_67 + schema: *ref_97 Label: name: label description: >- @@ -20407,31 +28067,31 @@ components: with as a result an object containing a string in the array at key 'wm_labels') in: query - schema: *ref_110 + schema: *ref_146 Worker: name: worker description: worker this job was ran on in: query - schema: *ref_94 + schema: *ref_128 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: *ref_60 + schema: *ref_88 WorkerTag: name: tag description: Override the tag to use in: query - schema: *ref_62 + schema: *ref_89 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: *ref_63 + schema: *ref_90 NewJobId: name: job_id description: >- @@ -20439,7 +28099,7 @@ components: 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: *ref_61 + schema: *ref_91 IncludeHeader: name: include_header description: > @@ -20449,14 +28109,19 @@ components: Header's key lowercased and '-'' replaced to '_' such that 'Content-Type' becomes the 'content_type' arg key in: query - schema: *ref_64 + schema: *ref_92 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 in: query - schema: *ref_65 + schema: *ref_93 + SkipPreprocessor: + name: skip_preprocessor + description: skip the preprocessor + in: query + schema: *ref_94 Payload: name: payload description: > @@ -20465,287 +28130,368 @@ components: `encodeURIComponent(btoa(JSON.stringify({a: 2})))` in: query - schema: *ref_126 + schema: *ref_95 ScriptStartPath: name: script_path_start description: mask to filter matching starting path in: query - schema: *ref_96 + schema: *ref_130 SchedulePath: name: schedule_path description: mask to filter by schedule path in: query - schema: *ref_97 + schema: *ref_131 + TriggerPath: + name: trigger_path + description: mask to filter by trigger path + in: query + schema: *ref_268 ScriptExactPath: name: script_path_exact description: mask to filter exact matching path in: query - schema: *ref_95 + schema: *ref_129 ScriptExactHash: name: script_hash description: mask to filter exact matching path in: query - schema: *ref_98 + schema: *ref_132 CreatedBefore: name: created_before description: filter on created before (inclusive) timestamp in: query - schema: *ref_114 + schema: *ref_154 CreatedAfter: name: created_after description: filter on created after (exclusive) timestamp in: query - schema: *ref_115 + schema: *ref_155 StartedBefore: name: started_before description: filter on started before (inclusive) timestamp in: query - schema: *ref_99 + schema: *ref_133 StartedAfter: name: started_after description: filter on started after (exclusive) timestamp in: query - schema: *ref_100 + schema: *ref_134 Before: name: before description: filter on started before (inclusive) timestamp in: query - schema: *ref_200 - CreatedOrStartedAfter: - name: created_or_started_after - description: >- - filter on created_at for non non started job and started_at otherwise - after (exclusive) timestamp + schema: *ref_260 + CompletedBefore: + name: completed_before + description: filter on started before (inclusive) timestamp in: query - schema: *ref_117 - CreatedOrStartedAfterCompletedJob: - name: created_or_started_after_completed_jobs - description: >- - filter on created_at for non non started job and started_at otherwise - after (exclusive) timestamp but only for the completed jobs + schema: *ref_156 + CompletedAfter: + name: completed_after + description: filter on started after (exclusive) timestamp in: query - schema: *ref_118 - CreatedOrStartedBefore: - name: created_or_started_before - description: >- - filter on created_at for non non started job and started_at otherwise - before (inclusive) timestamp + schema: *ref_157 + CreatedAfterQueue: + name: created_after_queue + description: filter on jobs created after X for jobs in the queue only in: query - schema: *ref_116 + schema: *ref_159 + CreatedBeforeQueue: + name: created_before_queue + description: filter on jobs created before X for jobs in the queue only + in: query + schema: *ref_158 Success: name: success description: filter on successful jobs in: query - schema: *ref_108 + schema: *ref_142 ScheduledForBeforeNow: name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query - schema: *ref_102 + schema: *ref_136 Suspended: name: suspended description: filter on suspended jobs in: query - schema: *ref_104 + schema: *ref_138 Running: name: running description: filter on running jobs in: query - schema: *ref_101 + schema: *ref_135 AllowWildcards: name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query - schema: *ref_109 + schema: *ref_143 ArgsFilter: name: args description: filter on jobs containing those args as a json subset (@> in postgres) in: query - schema: *ref_105 + schema: *ref_139 Tag: name: tag description: filter on jobs with a given tag/worker group in: query - schema: *ref_106 + schema: *ref_140 ResultFilter: name: result description: filter on jobs containing those result as a json subset (@> in postgres) in: query - schema: *ref_107 + schema: *ref_141 After: name: after description: filter on created after (exclusive) timestamp in: query - schema: *ref_201 + schema: *ref_261 Username: name: username description: filter on exact username of user in: query - schema: *ref_209 + schema: *ref_269 Operation: name: operation description: filter on exact or prefix name of operation in: query - schema: *ref_210 + schema: *ref_270 ResourceName: name: resource description: filter on exact or prefix name of resource in: query - schema: *ref_211 + schema: *ref_271 ActionKind: name: action_kind description: filter on type of operation in: query - schema: *ref_212 + schema: *ref_272 JobKinds: name: job_kinds description: >- filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, in: query - schema: *ref_103 + schema: *ref_137 RunnableId: name: runnable_id in: query - schema: *ref_192 + schema: *ref_247 RunnableTypeQuery: name: runnable_type in: query - schema: *ref_193 + schema: *ref_248 InputId: name: input in: path required: true - schema: *ref_213 + schema: *ref_273 GetStarted: name: get_started in: query - schema: *ref_214 + schema: *ref_274 ConcurrencyId: name: concurrency_id in: path required: true - schema: *ref_215 + schema: *ref_275 RunnableKind: name: runnable_kind in: path required: true - schema: *ref_80 + schema: *ref_110 schemas: OpenFlow: type: object - properties: *ref_68 - required: *ref_69 + description: >- + Top-level flow definition containing metadata, configuration, and the + flow structure + properties: *ref_98 + required: *ref_99 FlowValue: type: object - properties: *ref_92 - required: *ref_93 + description: >- + The flow structure containing modules and optional preprocessor/failure + handlers + properties: *ref_126 + required: *ref_127 Retry: type: object - properties: *ref_127 + description: Retry configuration for failed module executions + properties: *ref_169 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: - oneOf: *ref_216 - discriminator: *ref_217 + description: >- + The actual implementation of a flow step. Can be a script (inline or + referenced), subflow, loop, branch, or special module type + oneOf: *ref_70 + discriminator: *ref_71 stop_after_if: + description: Early termination condition for a module type: object - properties: *ref_46 - required: *ref_47 + properties: *ref_72 + required: *ref_73 stop_after_all_iters_if: + description: Early termination condition for a module type: object - properties: *ref_46 - required: *ref_47 + properties: *ref_72 + required: *ref_73 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.' required: - expr sleep: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 cache_ttl: type: number + description: Cache duration in seconds for this step's results + cache_ignore_s3_path: + type: boolean timeout: - type: number + 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_62 + discriminator: *ref_63 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 - return_value: {} + 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: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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 for failed module executions type: object - properties: *ref_218 + properties: *ref_276 required: - value - id InputTransform: - oneOf: *ref_88 - discriminator: *ref_89 + 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_116 + discriminator: *ref_117 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: {} + value: + description: The static value. For resources, use format '$res:path/to/resource' type: type: string enum: - static required: - - value - 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: @@ -20753,32 +28499,129 @@ components: required: - expr - type - FlowModuleValue: + 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: + type: string + description: Supported AI provider types + enum: *ref_277 + 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: - type: object - properties: *ref_219 - required: *ref_220 + description: No conversation memory/context + properties: *ref_278 + required: *ref_279 - type: object - properties: *ref_221 - required: *ref_222 + description: Automatic context management + properties: *ref_280 + required: *ref_281 - type: object - properties: *ref_223 - required: *ref_224 + description: Explicit message history + properties: *ref_282 + required: *ref_283 + 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: - type: object - properties: *ref_225 - required: *ref_226 + 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: *ref_284 + required: *ref_285 - type: object - properties: *ref_227 - required: *ref_228 + description: >- + Reference to an existing script by path. Use this when calling a + previously saved script instead of writing inline code + properties: *ref_286 + required: *ref_287 - type: object - properties: *ref_229 - required: *ref_230 + description: >- + Reference to an existing flow by path. Use this to call another flow + as a subflow + properties: *ref_288 + required: *ref_289 - type: object - properties: *ref_231 - required: *ref_232 + 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: *ref_290 + required: *ref_291 - type: object - properties: *ref_233 - required: *ref_234 + 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: *ref_292 + required: *ref_293 + - 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: *ref_294 + required: *ref_295 + - 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: *ref_296 + required: *ref_297 + - type: object + description: >- + Pass-through module that returns its input unchanged. Useful for + flow structure or as a placeholder + properties: *ref_298 + required: *ref_299 + - 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: *ref_300 + required: *ref_301 discriminator: propertyName: type mapping: @@ -20790,18 +28633,32 @@ components: 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: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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 @@ -20818,26 +28675,43 @@ components: - 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: @@ -20846,20 +28720,27 @@ components: 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 @@ -20871,38 +28752,63 @@ components: - 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: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 path: type: string + description: Path to the flow in the workspace (e.g., 'f/flows/process_user') type: type: string enum: @@ -20913,26 +28819,52 @@ components: - 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: type: object - properties: *ref_44 - required: *ref_45 + description: A single step in a flow. Can be a script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 iterator: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 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: - type: integer + 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_62 + discriminator: *ref_63 + squash: + type: boolean required: - modules - iterator @@ -20940,56 +28872,92 @@ components: - 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: type: object - properties: *ref_44 - required: *ref_45 + description: A single step in a flow. Can be a script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 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: - type: integer + 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_62 + discriminator: *ref_63 + 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: type: object - properties: *ref_44 - required: *ref_45 + description: >- + A single step in a flow. Can be a script, subflow, loop, or + branch + properties: *ref_64 + required: *ref_65 required: - modules - expr default: type: array + description: Steps to execute if no branch expressions match items: type: object - properties: *ref_44 - required: *ref_45 - required: - - modules + description: A single step in a flow. Can be a script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 type: type: string enum: @@ -21000,22 +28968,35 @@ components: - 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: type: object - properties: *ref_44 - required: *ref_45 + description: >- + A single step in a flow. Can be a script, subflow, loop, or + branch + properties: *ref_64 + required: *ref_65 required: - modules type: @@ -21024,11 +29005,175 @@ components: - 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: + description: >- + Provider configuration - can be static (ProviderConfig), + JavaScript expression, or AI-determined + oneOf: *ref_302 + discriminator: *ref_303 + output_type: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Output format type. + + Valid values: 'text' (default) - plain text response, 'image' - + image generation + user_message: + allOf: + - 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_62 + discriminator: *ref_63 + description: >- + The user's prompt/message to the AI agent. Supports variable + interpolation with flow.input syntax. + system_prompt: + allOf: + - 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_62 + discriminator: *ref_63 + description: >- + System instructions that guide the AI's behavior, persona, and + response style. Optional. + streaming: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Boolean. If true, stream the AI response incrementally. + + Streaming events include: token_delta, tool_call, + tool_call_arguments, tool_execution, tool_result + memory: + description: >- + Memory configuration - can be static (MemoryConfig), JavaScript + expression, or AI-determined + oneOf: *ref_304 + discriminator: *ref_305 + output_schema: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + JSON Schema object defining structured output format. Used when + you need the AI to return data in a specific shape. + + Supports standard JSON Schema properties: type, properties, + required, items, enum, pattern, minLength, maxLength, minimum, + maximum, etc. + + Example: { type: 'object', properties: { name: { type: 'string' + }, age: { type: 'integer' } }, required: ['name'] } + user_images: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Array of image references for vision-capable models. + + Format: Array<{ bucket: string, key: string }> - S3 object + references + + Example: [{ bucket: 'my-bucket', key: 'images/photo.jpg' }] + max_completion_tokens: + allOf: + - 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_62 + discriminator: *ref_63 + description: > + Integer. Maximum number of tokens the AI will generate in its + response. + + Range: 1 to 4,294,967,295. Typical values: 256-4096 for most use + cases. + temperature: + allOf: + - 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_62 + discriminator: *ref_63 + description: | + Float. Controls randomness/creativity of responses. + Range: 0.0 to 2.0 (provider-dependent) + - 0.0 = deterministic, focused responses + - 0.7 = balanced (common default) + - 1.0+ = more creative/random + 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: + type: object + description: >- + A tool available to an AI agent. Can be a flow module or an + external MCP (Model Context Protocol) tool + properties: *ref_306 + required: *ref_307 + 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 @@ -21036,12 +29181,13 @@ components: - identity flow: type: boolean + description: If true, marks this as a flow identity (special handling) required: - type FlowStatus: type: object - properties: *ref_111 - required: *ref_112 + properties: *ref_147 + required: *ref_148 FlowStatusModule: type: object properties: @@ -21071,6 +29217,8 @@ components: itered: type: array items: {} + itered_len: + type: integer args: {} flow_jobs: type: array @@ -21080,6 +29228,17 @@ components: 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: @@ -21121,128 +29280,385 @@ components: 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: *ref_0 + properties: *ref_1 + DetailedHealthResponse: + type: object + description: Detailed health status response (always fresh, no caching) + required: *ref_2 + properties: *ref_3 + HealthChecks: + type: object + description: Detailed health checks + required: *ref_308 + properties: *ref_309 + DatabaseHealth: + type: object + description: Database health status + required: *ref_310 + properties: *ref_311 + PoolStats: + type: object + description: Database connection pool statistics + required: *ref_312 + properties: *ref_313 + WorkersHealth: + type: object + description: Workers health status + required: *ref_314 + properties: *ref_315 + QueueHealth: + type: object + description: Job queue status + required: *ref_316 + properties: *ref_317 + ReadinessHealth: + type: object + description: Server readiness status + required: *ref_318 + properties: *ref_319 + AutoInviteConfig: + type: object + description: Configuration for auto-inviting users to the workspace + properties: *ref_320 + ErrorHandlerConfig: + type: object + description: Configuration for the workspace error handler + properties: *ref_321 + SuccessHandlerConfig: + type: object + description: Configuration for the workspace success handler + properties: *ref_322 + EditErrorHandler: + description: >- + Request body for editing the workspace error handler. Accepts both new + grouped format and legacy flat format for backward compatibility. + oneOf: *ref_323 + EditErrorHandlerNew: + type: object + description: New grouped format for editing error handler + properties: *ref_324 + EditErrorHandlerLegacy: + type: object + description: >- + Legacy flat format for editing error handler (deprecated, use new + format) + properties: *ref_325 + EditSuccessHandler: + description: >- + Request body for editing the workspace success handler. Accepts both new + grouped format and legacy flat format for backward compatibility. + oneOf: *ref_326 + EditSuccessHandlerNew: + type: object + description: New grouped format for editing success handler + properties: *ref_327 + EditSuccessHandlerLegacy: + type: object + description: >- + Legacy flat format for editing success handler (deprecated, use new + format) + properties: *ref_328 + VaultSettings: + type: object + required: *ref_22 + properties: *ref_23 + SecretMigrationFailure: + type: object + required: *ref_329 + properties: *ref_330 + SecretMigrationReport: + type: object + required: *ref_24 + properties: *ref_25 + JwksResponse: + type: object + required: *ref_331 + properties: *ref_332 + FlowConversation: + type: object + required: *ref_333 + properties: *ref_334 + FlowConversationMessage: + type: object + required: *ref_335 + properties: *ref_336 EndpointTool: type: object - required: *ref_235 - properties: *ref_236 + required: *ref_337 + properties: *ref_338 AIProvider: type: string - enum: *ref_237 + enum: *ref_339 GitSyncObjectType: type: string - enum: *ref_20 + enum: *ref_36 AIProviderModel: type: object - properties: *ref_18 - required: *ref_19 + properties: *ref_34 + required: *ref_35 AIProviderConfig: type: object - properties: *ref_238 - required: *ref_239 + properties: *ref_340 + required: *ref_341 AIConfig: type: object - properties: *ref_21 + properties: *ref_37 Alert: type: object - properties: *ref_240 - required: *ref_241 + properties: *ref_342 + required: *ref_343 Configs: type: object nullable: true - properties: *ref_242 + properties: *ref_344 + WorkspaceDependencies: + type: object + properties: *ref_77 + required: *ref_78 + NewWorkspaceDependencies: + type: object + properties: *ref_345 + required: *ref_346 Script: type: object - properties: *ref_51 - required: *ref_52 + properties: *ref_79 + required: *ref_80 NewScript: type: object - properties: *ref_56 - required: *ref_57 + properties: *ref_84 + required: *ref_85 NewScriptWithDraft: - allOf: *ref_243 + allOf: *ref_347 ScriptHistory: type: object - properties: *ref_58 - required: *ref_59 + properties: *ref_86 + required: *ref_87 ScriptArgs: type: object description: The arguments to pass to the script or flow - additionalProperties: *ref_22 + additionalProperties: true Input: type: object - properties: *ref_194 - required: *ref_195 + properties: *ref_249 + required: *ref_250 CreateInput: type: object - properties: *ref_244 - required: *ref_245 + properties: *ref_348 + required: *ref_349 UpdateInput: type: object - properties: *ref_246 - required: *ref_247 + properties: *ref_350 + required: *ref_351 RunnableType: type: string - enum: *ref_248 + enum: *ref_352 QueuedJob: type: object - properties: *ref_121 - required: *ref_122 + properties: *ref_163 + required: *ref_164 CompletedJob: type: object - properties: *ref_119 - required: *ref_120 + properties: *ref_161 + required: *ref_162 + ExportableCompletedJob: + type: object + description: Completed job with full data for export/import operations + properties: *ref_150 + required: *ref_151 + ExportableQueuedJob: + type: object + description: Queued job with full data for export/import operations + properties: *ref_152 + required: *ref_153 ObscuredJob: type: object - properties: *ref_249 + properties: *ref_353 Job: - oneOf: *ref_124 - discriminator: *ref_125 + oneOf: *ref_165 + discriminator: *ref_166 User: type: object - properties: *ref_10 - required: *ref_11 + properties: *ref_26 + required: *ref_27 + UserSource: + type: object + properties: *ref_354 + required: *ref_355 UserUsage: type: object - properties: *ref_250 + properties: *ref_356 Login: type: object - properties: *ref_251 - required: *ref_252 + properties: *ref_357 + required: *ref_358 + PasswordResetResponse: + type: object + properties: *ref_7 + required: *ref_8 EditWorkspaceUser: type: object - properties: *ref_253 + properties: *ref_359 TruncatedToken: type: object - properties: *ref_54 - required: *ref_55 + properties: *ref_82 + required: *ref_83 NewToken: type: object - properties: *ref_254 + properties: *ref_360 NewTokenImpersonate: type: object - properties: *ref_255 - required: *ref_256 + properties: *ref_361 + required: *ref_362 ListableVariable: type: object - properties: *ref_32 - required: *ref_33 + properties: *ref_49 + required: *ref_50 ContextualVariable: type: object - properties: *ref_257 - required: *ref_258 + properties: *ref_363 + required: *ref_364 CreateVariable: type: object - properties: *ref_259 - required: *ref_260 + properties: *ref_365 + required: *ref_366 EditVariable: type: object - properties: *ref_261 + properties: *ref_367 AuditLog: type: object - properties: *ref_1 - required: *ref_2 + properties: *ref_5 + required: *ref_6 MainArgSignature: type: object properties: @@ -21375,51 +29791,55 @@ components: - has_preprocessor ScriptLang: type: string - enum: *ref_50 + enum: *ref_76 Preview: type: object - properties: *ref_262 - required: *ref_263 + properties: *ref_118 + required: *ref_119 + PreviewInline: + type: object + properties: *ref_368 + required: *ref_369 WorkflowTask: type: object - properties: *ref_264 - required: *ref_265 + properties: *ref_370 + required: *ref_371 WorkflowStatusRecord: type: object additionalProperties: type: object - properties: *ref_113 + properties: *ref_149 WorkflowStatus: type: object - properties: *ref_113 + properties: *ref_149 CreateResource: type: object - properties: *ref_266 - required: *ref_267 + properties: *ref_372 + required: *ref_373 EditResource: type: object - properties: *ref_268 + properties: *ref_374 Resource: type: object - properties: *ref_269 - required: *ref_270 + properties: *ref_375 + required: *ref_376 ListableResource: type: object - properties: *ref_271 - required: *ref_272 + properties: *ref_377 + required: *ref_378 ResourceType: type: object - properties: *ref_39 - required: *ref_40 + properties: *ref_59 + required: *ref_60 EditResourceType: type: object - properties: *ref_273 + properties: *ref_379 Schedule: type: object - properties: *ref_128 - required: *ref_129 + properties: *ref_170 + required: *ref_171 ScheduleWJobs: - allOf: *ref_274 + allOf: *ref_380 ErrorHandler: type: string enum: @@ -21429,300 +29849,369 @@ components: - email NewSchedule: type: object - properties: *ref_275 - required: *ref_276 + properties: *ref_381 + required: *ref_382 EditSchedule: type: object - properties: *ref_277 - required: *ref_278 + properties: *ref_383 + required: *ref_384 + JobTriggerKind: + description: job trigger kind (schedule, http, websocket...) + type: string + enum: *ref_145 + TriggerMode: + description: job trigger mode + type: string + enum: *ref_179 TriggerExtraProperty: type: object - properties: *ref_139 - required: *ref_140 + properties: *ref_184 + required: *ref_185 AuthenticationMethod: type: string - enum: *ref_134 + enum: *ref_178 RunnableKind: type: string - enum: *ref_279 + enum: *ref_172 OpenapiSpecFormat: type: string - enum: *ref_280 + enum: *ref_385 OpenapiHttpRouteFilters: type: object - properties: *ref_281 - required: *ref_282 + properties: *ref_386 + required: *ref_387 WebhookFilters: type: object - properties: *ref_283 - required: *ref_284 + properties: *ref_388 + required: *ref_389 OpenapiV3Info: type: object - properties: *ref_285 - required: *ref_286 + properties: *ref_390 + required: *ref_391 GenerateOpenapiSpec: type: object - properties: *ref_130 + properties: *ref_173 HttpMethod: type: string - enum: *ref_133 + enum: *ref_176 + HttpRequestType: + type: string + enum: *ref_177 HttpTrigger: - allOf: *ref_135 + allOf: *ref_180 type: object - properties: *ref_136 - required: *ref_137 + properties: *ref_181 + required: *ref_182 NewHttpTrigger: type: object - properties: *ref_131 - required: *ref_132 + properties: *ref_174 + required: *ref_175 EditHttpTrigger: type: object - properties: *ref_287 - required: *ref_288 + properties: *ref_392 + required: *ref_393 TriggersCount: type: object - properties: *ref_73 + properties: *ref_103 WebsocketTrigger: - allOf: *ref_141 + allOf: *ref_186 type: object - properties: *ref_142 - required: *ref_143 + properties: *ref_187 + required: *ref_188 NewWebsocketTrigger: type: object - properties: *ref_289 - required: *ref_290 + properties: *ref_394 + required: *ref_395 EditWebsocketTrigger: type: object - properties: *ref_291 - required: *ref_292 + properties: *ref_396 + required: *ref_397 WebsocketTriggerInitialMessage: - anyOf: *ref_138 + anyOf: *ref_183 MqttQoS: type: string - enum: *ref_293 + enum: *ref_398 MqttV3Config: type: object - properties: *ref_156 + properties: *ref_208 MqttV5Config: type: object - properties: *ref_157 + properties: *ref_209 MqttSubscribeTopic: type: object - properties: *ref_154 - required: *ref_155 + properties: *ref_206 + required: *ref_207 MqttClientVersion: type: string - enum: *ref_158 + enum: *ref_210 MqttTrigger: - allOf: *ref_159 + allOf: *ref_211 type: object - properties: *ref_160 - required: *ref_161 + properties: *ref_212 + required: *ref_213 NewMqttTrigger: type: object - properties: *ref_294 - required: *ref_295 + properties: *ref_399 + required: *ref_400 EditMqttTrigger: type: object - properties: *ref_296 - required: *ref_297 + properties: *ref_401 + required: *ref_402 DeliveryType: type: string - enum: *ref_164 + enum: *ref_216 + 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 - properties: *ref_165 - required: *ref_166 + description: Configuration for push delivery mode. + properties: *ref_217 + required: *ref_218 GcpTrigger: - allOf: *ref_168 + allOf: *ref_220 type: object - properties: *ref_169 - required: *ref_170 + description: >- + A Google Cloud Pub/Sub trigger that executes a script or flow when + messages are received. + properties: *ref_221 + required: *ref_222 SubscriptionMode: type: string - enum: *ref_167 + enum: *ref_219 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 - properties: *ref_162 - required: *ref_163 + description: Data for creating or updating a Google Cloud Pub/Sub trigger. + properties: *ref_214 + required: *ref_215 GetAllTopicSubscription: type: object - properties: *ref_298 - required: *ref_299 + properties: *ref_403 + required: *ref_404 DeleteGcpSubscription: type: object - properties: *ref_300 - required: *ref_301 + properties: *ref_405 + required: *ref_406 AwsAuthResourceType: type: string - enum: *ref_150 + enum: *ref_195 SqsTrigger: - allOf: *ref_151 + allOf: *ref_196 type: object - properties: *ref_152 - required: *ref_153 + properties: *ref_197 + required: *ref_198 + LoggedWizardStatus: + type: string + enum: *ref_17 + CustomInstanceDbLogs: + type: object + properties: *ref_407 + CustomInstanceDbTag: + type: string + enum: *ref_18 + CustomInstanceDb: + type: object + required: *ref_19 + properties: *ref_20 NewSqsTrigger: type: object - properties: *ref_302 - required: *ref_303 + properties: *ref_408 + required: *ref_409 EditSqsTrigger: type: object - properties: *ref_304 - required: *ref_305 + properties: *ref_410 + required: *ref_411 Slot: type: object - properties: *ref_171 + properties: *ref_223 SlotList: type: object - properties: *ref_306 + properties: *ref_412 PublicationData: type: object - properties: *ref_175 - required: *ref_176 + properties: *ref_227 + required: *ref_228 TableToTrack: type: array - items: *ref_307 + items: *ref_413 Relations: type: object - properties: *ref_172 - required: *ref_173 + properties: *ref_224 + required: *ref_225 Language: type: string - enum: *ref_308 + enum: *ref_414 TemplateScript: type: object - properties: *ref_309 - required: *ref_310 + properties: *ref_415 + required: *ref_416 PostgresTrigger: - allOf: *ref_177 + allOf: *ref_229 type: object - properties: *ref_178 - required: *ref_179 + properties: *ref_230 + required: *ref_231 NewPostgresTrigger: type: object - properties: *ref_311 - required: *ref_312 + properties: *ref_417 + required: *ref_418 EditPostgresTrigger: type: object - properties: *ref_313 - required: *ref_314 + properties: *ref_419 + required: *ref_420 KafkaTrigger: - allOf: *ref_144 + allOf: *ref_189 type: object - properties: *ref_145 - required: *ref_146 + properties: *ref_190 + required: *ref_191 NewKafkaTrigger: type: object - properties: *ref_315 - required: *ref_316 + properties: *ref_421 + required: *ref_422 EditKafkaTrigger: type: object - properties: *ref_317 - required: *ref_318 + properties: *ref_423 + required: *ref_424 NatsTrigger: - allOf: *ref_147 + allOf: *ref_192 type: object - properties: *ref_148 - required: *ref_149 + properties: *ref_193 + required: *ref_194 NewNatsTrigger: type: object - properties: *ref_319 - required: *ref_320 + properties: *ref_425 + required: *ref_426 EditNatsTrigger: type: object - properties: *ref_321 - required: *ref_322 + properties: *ref_427 + required: *ref_428 + EmailTrigger: + allOf: *ref_232 + type: object + properties: *ref_233 + required: *ref_234 + NewEmailTrigger: + type: object + properties: *ref_429 + required: *ref_430 + EditEmailTrigger: + type: object + properties: *ref_431 + required: *ref_432 Group: type: object - properties: *ref_185 - required: *ref_186 + properties: *ref_240 + required: *ref_241 InstanceGroup: type: object - properties: *ref_181 - required: *ref_182 + required: *ref_236 + properties: *ref_237 + InstanceGroupWithWorkspaces: + type: object + required: *ref_433 + properties: *ref_434 + WorkspaceInfo: + type: object + properties: *ref_435 + required: *ref_436 Folder: type: object - properties: *ref_187 - required: *ref_188 + properties: *ref_242 + required: *ref_243 WorkerPing: type: object - properties: *ref_323 - required: *ref_324 + properties: *ref_437 + required: *ref_438 UserWorkspaceList: type: object - properties: *ref_325 - required: *ref_326 + properties: *ref_439 + required: *ref_440 CreateWorkspace: type: object - properties: *ref_327 - required: *ref_328 + properties: *ref_441 + required: *ref_442 + CreateWorkspaceFork: + type: object + properties: *ref_15 + required: *ref_16 Workspace: type: object - properties: *ref_7 - required: *ref_8 + properties: *ref_11 + required: *ref_12 + DependencyMap: + type: object + properties: *ref_443 + DependencyDependent: + type: object + properties: *ref_444 + required: *ref_445 + DependentsAmount: + type: object + properties: *ref_446 + required: *ref_447 WorkspaceInvite: type: object - properties: *ref_16 - required: *ref_17 + properties: *ref_32 + required: *ref_33 GlobalUserInfo: type: object - properties: *ref_14 - required: *ref_15 + properties: *ref_30 + required: *ref_31 Flow: - allOf: *ref_72 + allOf: *ref_102 ExtraPerms: type: object - additionalProperties: *ref_329 + additionalProperties: *ref_448 FlowMetadata: type: object - properties: *ref_330 - required: *ref_331 + properties: *ref_449 + required: *ref_450 OpenFlowWPath: - allOf: *ref_74 + allOf: *ref_104 FlowPreview: type: object - properties: *ref_332 - required: *ref_333 + properties: *ref_122 + required: *ref_123 RestartedFrom: type: object - properties: *ref_334 + properties: *ref_451 Policy: type: object - properties: *ref_75 + properties: *ref_105 ListableApp: type: object - properties: *ref_335 - required: *ref_336 + properties: *ref_452 + required: *ref_453 ScopeDefinition: type: object - properties: *ref_337 - required: *ref_338 + properties: *ref_454 + required: *ref_455 ScopeDomain: type: object - properties: *ref_339 - required: *ref_340 + properties: *ref_456 + required: *ref_457 ListableRawApp: type: object - properties: *ref_341 - required: *ref_342 + properties: *ref_458 + required: *ref_459 AppWithLastVersion: type: object - properties: *ref_76 - required: *ref_77 + properties: *ref_106 + required: *ref_107 AppWithLastVersionWDraft: - allOf: *ref_343 + allOf: *ref_460 AppHistory: type: object - properties: *ref_78 - required: *ref_79 + properties: *ref_108 + required: *ref_109 FlowVersion: type: object - properties: *ref_70 - required: *ref_71 + properties: *ref_100 + required: *ref_101 SlackToken: type: object properties: @@ -21744,143 +30233,200 @@ components: - bot TokenResponse: type: object - properties: *ref_36 - required: *ref_37 + properties: *ref_56 + required: *ref_57 HubScriptKind: type: string - enum: *ref_49 + enum: *ref_75 PolarsClientKwargs: type: object - properties: *ref_198 - required: *ref_199 + properties: *ref_253 + required: *ref_254 LargeFileStorage: type: object - properties: *ref_23 + properties: *ref_38 DucklakeSettings: type: object - required: *ref_24 - properties: *ref_25 + required: *ref_39 + properties: *ref_40 + DataTableSettings: + type: object + required: *ref_41 + properties: *ref_42 + DataTableSchema: + type: object + required: *ref_461 + properties: *ref_462 + DynamicInputData: + type: object + properties: *ref_463 + required: *ref_464 WindmillLargeFile: type: object - properties: *ref_344 - required: *ref_345 + properties: *ref_255 + required: *ref_256 WindmillFileMetadata: type: object - properties: *ref_346 + properties: *ref_259 WindmillFilePreview: type: object - properties: *ref_347 - required: *ref_348 + properties: *ref_257 + required: *ref_258 S3Resource: type: object - properties: *ref_196 - required: *ref_197 + properties: *ref_251 + required: *ref_252 WorkspaceGitSyncSettings: type: object - properties: *ref_26 + properties: *ref_43 WorkspaceDeployUISettings: type: object - properties: *ref_29 + properties: *ref_46 WorkspaceDefaultScripts: type: object - properties: *ref_30 + properties: *ref_47 + S3PermissionRule: + type: object + properties: *ref_465 + required: *ref_466 GitRepositorySettings: type: object - properties: *ref_27 - required: *ref_28 - UploadFilePart: - type: object - properties: - part_number: - type: integer - tag: - type: string - required: - - part_number - - tag + properties: *ref_44 + required: *ref_45 MetricMetadata: type: object - properties: *ref_349 - required: *ref_350 + properties: *ref_467 + required: *ref_468 ScalarMetric: type: object - properties: *ref_351 - required: *ref_352 + properties: *ref_469 + required: *ref_470 TimeseriesMetric: type: object - properties: *ref_353 - required: *ref_354 + properties: *ref_471 + required: *ref_472 MetricDataPoint: type: object - properties: *ref_355 - required: *ref_356 + properties: *ref_473 + required: *ref_474 RawScriptForDependencies: type: object - properties: *ref_357 - required: *ref_358 + properties: *ref_475 + required: *ref_476 ConcurrencyGroup: type: object - properties: *ref_359 - required: *ref_360 + properties: *ref_477 + required: *ref_478 ExtendedJobs: type: object - properties: *ref_361 - required: *ref_362 + properties: *ref_479 + required: *ref_480 ExportedUser: type: object - properties: *ref_3 - required: *ref_4 + properties: *ref_9 + required: *ref_10 GlobalSetting: type: object - properties: *ref_363 - required: *ref_364 + properties: *ref_481 + required: *ref_482 Config: type: object - properties: *ref_365 - required: *ref_366 + properties: *ref_483 + required: *ref_484 ExportedInstanceGroup: type: object - properties: *ref_183 - required: *ref_184 + properties: *ref_238 + required: *ref_239 JobSearchHit: type: object - properties: *ref_367 + properties: *ref_485 LogSearchHit: type: object - properties: *ref_368 + properties: *ref_486 AutoscalingEvent: type: object - properties: *ref_369 + properties: *ref_487 CriticalAlert: type: object - properties: *ref_34 + properties: *ref_51 CaptureTriggerKind: type: string - enum: *ref_189 + enum: *ref_244 Capture: type: object - properties: *ref_190 - required: *ref_191 + properties: *ref_245 + required: *ref_246 CaptureConfig: type: object - properties: *ref_370 - required: *ref_371 + properties: *ref_488 + required: *ref_489 OperatorSettings: nullable: true type: object - required: *ref_12 - properties: *ref_13 + required: *ref_28 + properties: *ref_29 + WorkspaceComparison: + type: object + required: *ref_490 + properties: *ref_491 + WorkspaceItemDiff: + type: object + required: *ref_492 + properties: *ref_493 + CompareSummary: + type: object + required: *ref_494 + properties: *ref_495 TeamInfo: type: object - required: *ref_372 - properties: *ref_373 + 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: + type: object + required: &ref_496 + - channel_id + - channel_name + - tenant_id + - service_url + properties: &ref_497 + 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/ ChannelInfo: type: object - required: *ref_374 - properties: *ref_375 + required: *ref_496 + properties: *ref_497 GithubInstallations: type: array - items: *ref_376 + items: *ref_498 WorkspaceGithubInstallation: type: object properties: @@ -21893,8 +30439,8 @@ components: - installation_id S3Object: type: object - properties: *ref_82 - required: *ref_83 + properties: *ref_112 + required: *ref_113 TeamsChannel: type: object required: @@ -21921,13 +30467,14 @@ components: minLength: 1 AssetUsageKind: type: string - enum: *ref_203 + enum: *ref_264 AssetUsageAccessType: type: string - enum: *ref_204 + enum: *ref_263 + nullable: true AssetKind: type: string - enum: *ref_202 + enum: *ref_262 Asset: type: object properties: @@ -21935,72 +30482,337 @@ components: type: string kind: type: string - enum: *ref_202 + enum: *ref_262 required: - path - kind + ProtectionRuleset: + type: object + description: A workspace protection rule defining restrictions and bypass permissions + required: *ref_499 + properties: *ref_500 + ProtectionRules: + type: array + description: Configuration of protection restrictions + items: *ref_52 + ProtectionRuleKind: + type: string + enum: *ref_501 + RuleBypasserGroups: + type: array + description: Groups that can bypass this ruleset + items: *ref_53 + RuleBypasserUsers: + type: array + description: Users that can bypass this ruleset + items: *ref_54 + NativeServiceName: + type: string + enum: *ref_199 + NativeTrigger: + type: object + description: A native trigger stored in Windmill + properties: *ref_502 + required: *ref_503 + NativeTriggerWithExternal: + type: object + description: >- + Full trigger response containing both Windmill data and external service + data + properties: *ref_504 + required: *ref_505 + WorkspaceIntegrations: + type: object + properties: *ref_506 + required: *ref_507 + WorkspaceOAuthConfig: + type: object + properties: *ref_200 + required: *ref_201 + WebhookEvent: + type: object + properties: + type: + type: string + enum: + - webhook + request_type: + type: string + description: The type of webhook request (define possible values here) + enum: &ref_508 + - async + - sync + required: + - type + - request_type + WebhookRequestType: + type: string + description: The type of webhook request (define possible values here) + enum: *ref_508 + RedirectUri: + type: object + properties: *ref_202 + required: *ref_203 + NativeTriggerData: + type: object + description: Data for creating or updating a native trigger + properties: *ref_204 + required: *ref_205 + CreateTriggerResponse: + type: object + description: Response returned when a native trigger is created + properties: *ref_509 + required: *ref_510 + 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: *ref_511 + required: *ref_512 schemas-StaticTransform: type: object - properties: *ref_84 - required: *ref_85 + description: >- + Static value passed directly to the step. Use for hardcoded values or + resource references like '$res:path/to/resource' + properties: *ref_114 + required: *ref_115 schemas-JavascriptTransform: type: object - properties: *ref_86 - required: *ref_87 + 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: *ref_66 + required: *ref_67 + schemas-AiTransform: + type: object + description: >- + Value resolved by the AI runtime for this input. The AI engine decides + how to satisfy the parameter. + properties: *ref_68 + required: *ref_69 schemas-InputTransform: - oneOf: *ref_42 - discriminator: *ref_43 + 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_62 + discriminator: *ref_63 schemas-RawScript: type: object - properties: *ref_219 - required: *ref_220 + 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: *ref_284 + required: *ref_285 schemas-PathScript: type: object - properties: *ref_221 - required: *ref_222 + description: >- + Reference to an existing script by path. Use this when calling a + previously saved script instead of writing inline code + properties: *ref_286 + required: *ref_287 schemas-PathFlow: type: object - properties: *ref_223 - required: *ref_224 + description: >- + Reference to an existing flow by path. Use this to call another flow as + a subflow + properties: *ref_288 + required: *ref_289 schemas-FlowModule: type: object - properties: *ref_44 - required: *ref_45 + description: A single step in a flow. Can be a script, subflow, loop, or branch + properties: *ref_64 + required: *ref_65 schemas-ForloopFlow: type: object - properties: *ref_225 - required: *ref_226 + 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: *ref_290 + required: *ref_291 schemas-WhileloopFlow: type: object - properties: *ref_227 - required: *ref_228 + 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: *ref_292 + required: *ref_293 schemas-BranchOne: type: object - properties: *ref_229 - required: *ref_230 + 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: *ref_294 + required: *ref_295 schemas-BranchAll: type: object - properties: *ref_231 - required: *ref_232 + description: >- + Parallel branching where all branches execute simultaneously. Unlike + BranchOne, all branches run regardless of conditions. Useful for + executing independent tasks concurrently + properties: *ref_296 + required: *ref_297 schemas-Identity: type: object - properties: *ref_233 - required: *ref_234 + description: >- + Pass-through module that returns its input unchanged. Useful for flow + structure or as a placeholder + properties: *ref_298 + required: *ref_299 + AIProviderKind: + type: string + description: Supported AI provider types + enum: *ref_277 + schemas-ProviderConfig: + type: object + description: >- + Complete AI provider configuration with resource reference and model + selection + properties: *ref_513 + required: *ref_514 + StaticProviderTransform: + type: object + description: Static provider configuration passed directly to the AI agent + properties: *ref_515 + required: *ref_516 + ProviderTransform: + description: >- + Provider configuration - can be static (ProviderConfig), JavaScript + expression, or AI-determined + oneOf: *ref_302 + discriminator: *ref_303 + MemoryOff: + type: object + description: No conversation memory/context + properties: *ref_278 + required: *ref_279 + MemoryAuto: + type: object + description: Automatic context management + properties: *ref_280 + required: *ref_281 + MemoryMessage: + type: object + description: A single message in conversation history + properties: *ref_517 + required: *ref_518 + MemoryManual: + type: object + description: Explicit message history + properties: *ref_282 + required: *ref_283 + schemas-MemoryConfig: + description: Conversation memory configuration + oneOf: *ref_519 + discriminator: *ref_520 + StaticMemoryTransform: + type: object + description: Static memory configuration passed directly to the AI agent + properties: *ref_521 + required: *ref_522 + MemoryTransform: + description: >- + Memory configuration - can be static (MemoryConfig), JavaScript + expression, or AI-determined + oneOf: *ref_304 + discriminator: *ref_305 schemas-FlowModuleValue: - oneOf: *ref_216 - discriminator: *ref_217 + description: >- + The actual implementation of a flow step. Can be a script (inline or + referenced), subflow, loop, branch, or special module type + oneOf: *ref_70 + discriminator: *ref_71 + FlowModuleTool: + description: >- + A tool implemented as a flow module (script, flow, etc.). The AI can + call this like any other flow module + allOf: *ref_523 + McpToolValue: + type: object + description: >- + Reference to an external MCP (Model Context Protocol) tool. The AI can + call tools from MCP servers + properties: *ref_524 + required: *ref_525 + WebsearchToolValue: + type: object + description: >- + A tool implemented as a websearch tool. The AI can call this like any + other websearch tool + properties: *ref_526 + required: *ref_527 + ToolValue: + description: >- + The implementation of a tool. Can be a flow module (script/flow) or an + MCP tool reference + oneOf: *ref_528 + discriminator: *ref_529 + 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: *ref_306 + required: *ref_307 + 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: *ref_300 + required: *ref_301 schemas-StopAfterIf: type: object - properties: *ref_46 - required: *ref_47 + description: Early termination condition for a module + properties: *ref_72 + required: *ref_73 + RetryIf: + type: object + description: Conditional retry based on error or result + properties: *ref_167 + required: *ref_168 schemas-Retry: type: object - properties: *ref_218 + description: Retry configuration for failed module executions + properties: *ref_276 + schemas-FlowNote: + type: object + description: A sticky note attached to a flow for documentation and annotation + properties: *ref_120 + required: *ref_121 schemas-FlowValue: type: object - properties: *ref_377 - required: *ref_378 + description: >- + The flow structure containing modules and optional preprocessor/failure + handlers + properties: *ref_530 + required: *ref_531 schemas-FlowStatusModule: type: object - properties: *ref_90 - required: *ref_91 + properties: *ref_124 + required: *ref_125