openapi: 3.0.3 info: version: 1.708.0 title: Windmill API contact: name: Windmill Team email: contact@windmill.dev url: https://windmill.dev license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html x-logo: url: https://windmill.dev/img/windmill.svg externalDocs: description: documentation portal url: https://windmill.dev servers: - url: /api security: - bearerAuth: [] - cookieAuth: [] paths: /version: get: summary: get backend version operationId: backendVersion tags: - settings responses: '200': description: git version of backend content: text/plain: schema: type: string /health/status: get: summary: health status description: > Health status endpoint. Returns cached health status (database connectivity, worker count). 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_347 - database - readiness properties: &ref_348 database: type: object description: Database health status required: &ref_349 - healthy - latency_ms - pool properties: &ref_350 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_351 - size - idle - max_connections properties: &ref_352 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_353 - healthy - active_count - worker_groups - min_version - versions properties: &ref_354 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_355 - pending_jobs - running_jobs properties: &ref_356 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_357 - healthy properties: &ref_358 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 operationId: backendUptodate tags: - settings responses: '200': description: is backend up to date content: text/plain: schema: type: string /ee_license: get: summary: get license id operationId: getLicenseId tags: - settings responses: '200': description: get license id (empty if not ee) content: text/plain: schema: type: string /inkeep: post: summary: query Windmill AI documentation assistant (EE only) operationId: queryDocumentation x-mcp-tool: true tags: - documentation requestBody: description: query to send to the AI documentation assistant required: true content: application/json: schema: type: object properties: query: type: string description: The documentation query to send to the AI assistant required: - query responses: '200': description: AI documentation assistant response content: application/json: schema: type: object description: Response from Inkeep service '403': description: Enterprise Edition required content: text/plain: schema: type: string /openapi.yaml: get: summary: get openapi yaml spec operationId: getOpenApiYaml tags: - settings responses: '200': description: openapi yaml file content content: text/plain: schema: type: string /w/{workspace}/audit/get/{id}: get: summary: get audit log (requires admin privilege) operationId: getAuditLog tags: - audit parameters: - name: workspace in: path required: true schema: &ref_4 type: string - name: id in: path required: true schema: &ref_79 type: integer responses: '200': description: an audit log content: application/json: schema: type: object properties: &ref_5 workspace_id: type: string id: type: integer timestamp: type: string format: date-time username: type: string operation: type: string enum: - jobs.run - jobs.run.script - jobs.run.preview - jobs.run.flow - jobs.run.flow_preview - jobs.run.script_hub - jobs.run.dependencies - jobs.run.identity - jobs.run.noop - jobs.flow_dependencies - jobs - jobs.cancel - jobs.force_cancel - jobs.disapproval - jobs.delete - account.delete - ai.request - resources.create - resources.update - resources.delete - resource_types.create - resource_types.update - resource_types.delete - schedule.create - schedule.setenabled - schedule.edit - schedule.delete - scripts.create - scripts.update - scripts.archive - scripts.delete - users.create - users.delete - users.update - users.login - users.login_failure - users.logout - users.accept_invite - users.decline_invite - users.token.create - users.token.delete - users.add_to_workspace - users.add_global - users.setpassword - users.impersonate - users.leave_workspace - oauth.login - oauth.login_failure - oauth.signup - variables.create - variables.delete - variables.update - flows.create - flows.update - flows.delete - flows.archive - apps.create - apps.update - apps.delete - folder.create - folder.update - folder.delete - folder.add_owner - folder.remove_owner - group.create - group.delete - group.edit - group.adduser - group.removeuser - igroup.create - igroup.delete - igroup.adduser - igroup.removeuser - variables.decrypt_secret - workspaces.edit_command_script - workspaces.edit_deploy_to - workspaces.edit_auto_invite_domain - workspaces.edit_webhook - workspaces.edit_copilot_config - workspaces.edit_error_handler - workspaces.create - workspaces.update - workspaces.archive - workspaces.unarchive - workspaces.delete action_kind: type: string enum: - Created - Updated - Delete - Execute resource: type: string parameters: type: object span: type: string required: &ref_6 - workspace_id - id - timestamp - username - operation - action_kind /w/{workspace}/audit/list: get: summary: list audit logs (requires admin privilege) operationId: listAuditLogs tags: - audit 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_17 type: integer - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: &ref_18 type: integer - name: before description: filter on started before (inclusive) timestamp in: query schema: &ref_299 type: string format: date-time - name: after description: filter on created after (exclusive) timestamp in: query schema: &ref_300 type: string format: date-time - name: username description: filter on exact username of user in: query schema: &ref_308 type: string - name: operation description: filter on exact or prefix name of operation in: query schema: &ref_309 type: string - name: operations in: query description: comma separated list of exact operations to include schema: type: string - name: exclude_operations in: query description: comma separated list of operations to exclude schema: type: string - name: resource description: filter on exact or prefix name of resource in: query schema: &ref_310 type: string - name: action_kind description: filter on type of operation in: query schema: &ref_311 type: string enum: - Create - Update - Delete - Execute - name: all_workspaces in: query description: get audit logs for all workspaces schema: type: boolean responses: '200': description: a list of audit logs content: application/json: schema: type: array items: type: object properties: *ref_5 required: *ref_6 /auth/login: post: security: [] summary: login with password operationId: login tags: - user requestBody: description: credentials required: true content: application/json: schema: type: object properties: &ref_397 email: type: string password: type: string required: &ref_398 - email - password responses: '200': description: > Successfully authenticated. The session ID is returned in a cookie named `token` and as plaintext response. Preferred method of authorization is through the bearer token. The cookie is only for browser convenience. headers: Set-Cookie: schema: type: string example: token=abcde12345; Path=/; HttpOnly content: text/plain: schema: type: string /auth/logout: post: security: [] summary: logout operationId: logout tags: - user responses: '200': description: clear cookies and clear token (if applicable) headers: Set-Cookie: schema: type: string content: text/plain: schema: type: string /auth/is_smtp_configured: get: security: [] summary: check if SMTP is configured for password reset operationId: isSmtpConfigured tags: - user responses: '200': description: returns true if SMTP is configured content: application/json: schema: type: boolean /auth/is_password_login_disabled: get: security: [] summary: check if password login is disabled instance-wide operationId: isPasswordLoginDisabled tags: - user responses: '200': description: returns true if password login is disabled 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) operationId: getUser 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: user created content: application/json: schema: type: object properties: &ref_35 email: type: string username: type: string is_admin: type: boolean name: type: string is_super_admin: type: boolean created_at: type: string format: date-time operator: type: boolean disabled: type: boolean groups: type: array items: type: string folders: type: array items: type: string folders_owners: type: array items: type: string added_via: nullable: true allOf: - type: object properties: &ref_394 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_395 - source is_service_account: type: boolean required: &ref_36 - email - username - is_admin - is_super_admin - created_at - operator - disabled - folders - folders_owners /w/{workspace}/users/update/{username}: post: summary: update user (require admin privilege) operationId: updateUser tags: - user - admin parameters: - name: workspace in: path required: true schema: *ref_4 - name: username in: path required: true schema: type: string requestBody: description: new user required: true content: application/json: schema: type: object properties: &ref_399 is_admin: type: boolean operator: type: boolean disabled: type: boolean responses: '200': description: edited user content: text/plain: schema: type: string /w/{workspace}/users/is_owner/{path}: get: summary: is owner of path operationId: isOwnerOfPath tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: &ref_60 type: string responses: '200': description: is owner content: application/json: schema: type: boolean /users/setpassword: post: summary: set password operationId: setPassword tags: - user requestBody: description: set password required: true content: application/json: schema: type: object properties: password: type: string required: - password responses: '200': description: password set content: text/plain: schema: type: string /users/set_password_of/{user}: post: summary: set password for a specific user (require super admin) operationId: setPasswordForUser tags: - user parameters: - name: user in: path required: true schema: type: string requestBody: description: set password required: true content: application/json: schema: type: object properties: password: type: string required: - password responses: '200': description: password set content: text/plain: schema: type: string /users/set_login_type/{user}: post: summary: set login type for a specific user (require super admin) operationId: setLoginTypeForUser tags: - user parameters: - name: user in: path required: true schema: type: string requestBody: description: set login type required: true content: application/json: schema: type: object properties: login_type: type: string required: - login_type responses: '200': description: login type set content: text/plain: schema: type: string /users/create: post: summary: create user operationId: createUserGlobally tags: - user requestBody: description: user info required: true content: application/json: schema: type: object properties: email: type: string password: type: string super_admin: type: boolean name: type: string company: type: string skip_email: type: boolean description: Skip sending email notifications to the user required: - email - password - super_admin responses: '201': description: user created content: text/plain: schema: type: string /users/update/{email}: post: summary: global update user (require super admin) operationId: globalUserUpdate tags: - user parameters: - name: email in: path required: true schema: type: string requestBody: description: new user info required: true content: application/json: schema: type: object properties: is_super_admin: type: boolean is_devops: type: boolean name: type: string disabled: type: boolean responses: '200': description: user updated content: text/plain: schema: type: string /users/username_info/{email}: get: summary: global username info (require super admin) operationId: globalUsernameInfo tags: - user parameters: - name: email in: path required: true schema: type: string responses: '200': description: user renamed content: application/json: schema: type: object properties: username: type: string workspace_usernames: type: array items: type: object properties: workspace_id: type: string username: type: string required: - workspace_id - username required: - username - workspace_usernames /users/rename/{email}: post: summary: global rename user (require super admin) operationId: globalUserRename tags: - user parameters: - name: email in: path required: true schema: type: string requestBody: description: new username required: true content: application/json: schema: type: object properties: new_username: type: string required: - new_username responses: '200': description: user renamed content: text/plain: schema: type: string /users/delete/{email}: delete: summary: global delete user (require super admin) operationId: globalUserDelete tags: - user parameters: - name: email in: path required: true schema: type: string responses: '200': description: user deleted content: text/plain: schema: type: string /users/overwrite: post: summary: global overwrite users (require super admin and EE) operationId: globalUsersOverwrite tags: - user requestBody: description: List of users required: true content: application/json: schema: type: array items: type: object properties: &ref_9 email: type: string password_hash: type: string super_admin: type: boolean verified: type: boolean name: type: string company: type: string first_time_user: type: boolean username: type: string required: &ref_10 - email - super_admin - verified - first_time_user responses: '200': description: Success message content: text/plain: schema: type: string /users/export: get: summary: global export users (require super admin and EE) operationId: globalUsersExport tags: - user responses: '200': description: exported users content: application/json: schema: type: array items: type: object properties: *ref_9 required: *ref_10 /users/ext_jwt_tokens: get: summary: list external JWT tokens (ee only) operationId: listExtJwtTokens tags: - user parameters: - name: page in: query schema: type: integer - name: per_page in: query schema: type: integer - name: active_only in: query description: only tokens used in the last 30 days schema: type: boolean responses: '200': description: list of external JWT tokens content: application/json: schema: type: array items: type: object properties: &ref_413 jwt_hash: type: integer format: int64 email: type: string username: type: string is_admin: type: boolean is_operator: type: boolean workspace_id: type: string label: type: string scopes: type: array items: type: string last_used_at: type: string format: date-time required: &ref_414 - jwt_hash - email - username - is_admin - is_operator - last_used_at /users/onboarding: post: summary: Submit user onboarding data operationId: submitOnboardingData tags: - user requestBody: required: true content: application/json: schema: type: object properties: touch_point: type: string use_case: type: string responses: '200': description: Onboarding data submitted successfully content: application/json: schema: type: string /w/{workspace}/users/delete/{username}: delete: summary: delete user (require admin privilege) operationId: deleteUser tags: - user - admin parameters: - name: workspace in: path required: true schema: *ref_4 - name: username in: path required: true schema: type: string responses: '200': description: delete user content: text/plain: schema: type: string /w/{workspace}/users/offboard_preview/{username}: get: summary: preview offboarding for a workspace user (require admin privilege) operationId: offboardPreview 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: offboard preview with object counts content: application/json: schema: type: object properties: &ref_12 owned: description: Objects under u/{username}/ that will be reassigned type: object properties: &ref_11 scripts: type: array items: type: string flows: type: array items: type: string apps: type: array items: type: string resources: type: array items: type: string variables: type: array items: type: string schedules: type: array items: type: string triggers: type: object additionalProperties: type: array items: type: string executing_on_behalf: description: >- Objects not under the user's path but that execute on behalf of this user (permissioned_as/on_behalf_of will be updated) type: object properties: *ref_11 referencing: description: >- Scripts/flows/apps/resources whose content or value references this user's paths (may break after reassignment) type: object properties: *ref_11 tokens: type: array items: type: object properties: &ref_400 label: type: string scopes: type: array items: type: string expiration: type: string required: &ref_401 - label - scopes description: Tokens owned by this user (will be deleted) http_triggers: type: integer description: >- HTTP triggers under the user's path (webhook URLs will change) email_triggers: type: integer description: >- Email triggers under the user's path (email addresses will change) required: &ref_13 - owned - executing_on_behalf - referencing - tokens - http_triggers - email_triggers /w/{workspace}/users/offboard/{username}: post: summary: offboard a workspace user (reassign objects, optionally delete user) operationId: offboardWorkspaceUser tags: - user - admin parameters: - name: workspace in: path required: true schema: *ref_4 - name: username in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object properties: &ref_402 reassign_to: type: string description: 'Target for reassignment: ''u/{username}'' or ''f/{folder}''' new_on_behalf_of_user: type: string description: >- Required when reassign_to is a folder. The username whose identity will be used as permissioned_as for schedules and triggers. delete_user: type: boolean default: true description: Whether to also remove the user from the workspace required: &ref_403 - reassign_to responses: '200': description: offboard response with conflicts or summary content: application/json: schema: type: object properties: &ref_14 conflicts: type: array items: type: string description: >- List of path conflicts that block the offboarding. Empty on success. summary: type: object properties: &ref_404 scripts_reassigned: type: integer flows_reassigned: type: integer apps_reassigned: type: integer resources_reassigned: type: integer variables_reassigned: type: integer schedules_reassigned: type: integer triggers_reassigned: type: integer drafts_deleted: type: integer required: &ref_405 - scripts_reassigned - flows_reassigned - apps_reassigned - resources_reassigned - variables_reassigned - schedules_reassigned - triggers_reassigned - drafts_deleted /users/offboard_preview/{email}: get: summary: >- preview global offboarding for a user across all workspaces (require super admin) operationId: globalOffboardPreview tags: - user parameters: - name: email in: path required: true schema: type: string responses: '200': description: per-workspace offboard previews content: application/json: schema: type: object properties: &ref_406 workspaces: type: array items: type: object properties: &ref_408 workspace_id: type: string username: type: string preview: type: object properties: *ref_12 required: *ref_13 required: &ref_409 - workspace_id - username - preview required: &ref_407 - workspaces /users/offboard/{email}: post: summary: >- offboard a user globally (reassign objects across workspaces, optionally delete) operationId: offboardGlobalUser tags: - user parameters: - name: email in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object properties: &ref_410 reassignments: type: object additionalProperties: type: object properties: &ref_411 reassign_to: type: string description: 'Target: ''u/{username}'' or ''f/{folder}''' new_on_behalf_of_user: type: string description: >- Required when reassign_to is a folder. Username to use as permissioned_as. required: &ref_412 - reassign_to description: Map of workspace_id to reassignment config delete_user: type: boolean default: true description: Whether to also remove the user from the instance responses: '200': description: offboard result content: application/json: schema: type: object properties: *ref_14 /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 content: application/json: schema: type: array items: &ref_562 type: object properties: workspace_id: type: string installation_id: type: number account_id: type: string repositories: type: array items: type: object properties: name: type: string url: type: string required: - name - url total_count: type: number description: >- Total number of repositories available for this installation per_page: type: number description: Number of repositories loaded per page error: type: string description: Error message if token retrieval failed github_base_url: type: string nullable: true description: >- Set for self-managed (GHES) installs. Cloud installs omit this field. provisioned_by_admin: type: boolean description: >- True when the installation was assigned by the instance super-admin from instance settings. Workspace admins cannot remove these. required: - installation_id - account_id - repositories - total_count - per_page /workspaces/list: get: summary: list all workspaces visible to me operationId: listWorkspaces tags: - workspace responses: '200': description: all workspaces content: application/json: schema: type: array items: type: object properties: &ref_15 id: type: string name: type: string owner: type: string domain: type: string color: type: string parent_workspace_id: type: string nullable: true required: &ref_16 - id - name - owner - created_at /workspaces/allowed_domain_auto_invite: get: summary: is domain allowed for auto invi operationId: isDomainAllowed tags: - workspace responses: '200': description: domain allowed or not content: application/json: schema: type: boolean /workspaces/users: get: summary: list all workspaces visible to me with user info operationId: listUserWorkspaces tags: - workspace responses: '200': description: workspace with associated username content: application/json: schema: type: object properties: &ref_502 email: type: string workspaces: type: array items: type: object properties: id: type: string name: type: string username: type: string color: type: string operator_settings: nullable: true type: object required: &ref_37 - runs - schedules - resources - assets - variables - triggers - audit_logs - groups - folders - workers properties: &ref_38 runs: type: boolean description: Whether operators can view runs schedules: type: boolean description: Whether operators can view schedules resources: type: boolean description: Whether operators can view resources variables: type: boolean description: Whether operators can view variables assets: type: boolean description: Whether operators can view assets audit_logs: type: boolean description: Whether operators can view audit logs triggers: type: boolean description: Whether operators can view triggers groups: type: boolean description: Whether operators can view groups page folders: type: boolean description: Whether operators can view folders page workers: type: boolean description: Whether operators can view workers page parent_workspace_id: type: string nullable: true created_by: type: string nullable: true disabled: type: boolean required: - id - name - username - color - disabled required: &ref_503 - 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_15 required: *ref_16 /workspaces/list_as_superadmin: get: summary: list all workspaces as super admin (require to be super admin) operationId: listWorkspacesAsSuperAdmin tags: - workspace parameters: - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: workspaces content: application/json: schema: type: array items: type: object properties: *ref_15 required: *ref_16 /workspaces/create: post: summary: create workspace operationId: createWorkspace tags: - workspace requestBody: description: new token required: true content: application/json: schema: type: object properties: &ref_504 id: type: string name: type: string username: type: string color: type: string required: &ref_505 - id - name responses: '201': description: token created content: text/plain: schema: type: string /w/{workspace}/workspaces/create_workspace_fork_branch: post: summary: create forked workspace branch with git sync operationId: createWorkspaceForkGitBranch tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new forked workspace required: true content: application/json: schema: type: object properties: &ref_19 id: type: string name: type: string color: type: string forked_datatables: type: array items: type: object required: - name - new_dbname properties: name: type: string description: Datatable name new_dbname: type: string description: New database name for the fork required: &ref_20 - 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_19 required: *ref_20 responses: '201': description: forked workspace created content: text/plain: schema: type: string /workspaces/exists: post: summary: exists workspace operationId: existsWorkspace tags: - workspace requestBody: description: id of workspace required: true content: application/json: schema: type: object properties: id: type: string required: - id responses: '200': description: status content: text/plain: schema: type: boolean /workspaces/exists_username: post: summary: exists username operationId: existsUsername tags: - workspace requestBody: required: true content: application/json: schema: type: object properties: id: type: string username: type: string required: - id - username responses: '200': description: status content: text/plain: schema: type: boolean /settings/refresh_custom_instance_user_pwd: post: summary: Refreshes the password for the custom_instance_user operationId: refreshCustomInstanceUserPwd tags: - setting responses: '200': description: Success content: application/json: schema: type: object /settings/list_custom_instance_pg_databases: post: summary: Returns the set-up statuses of custom instance pg databases operationId: listCustomInstanceDbs tags: - setting responses: '200': description: Statuses of all custom instance dbs content: application/json: schema: type: object additionalProperties: type: object required: &ref_23 - logs - success properties: &ref_24 logs: type: object properties: &ref_470 super_admin: type: string enum: &ref_21 - OK - SKIP - FAIL database_credentials: type: string enum: *ref_21 valid_dbname: type: string enum: *ref_21 created_database: type: string enum: *ref_21 db_connect: type: string enum: *ref_21 grant_permissions: type: string enum: *ref_21 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_22 - 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: required: true content: application/json: schema: type: object properties: tag: type: string enum: *ref_22 parameters: - in: path name: name required: true schema: type: string description: The name of the database to create responses: '200': description: status content: application/json: schema: type: object required: *ref_23 properties: *ref_24 /settings/drop_custom_instance_pg_database/{name}: post: summary: Drops a custom instance database (superadmin only, irreversible) operationId: dropCustomInstanceDb tags: - setting parameters: - in: path name: name required: true schema: type: string description: The name of the database to drop responses: '200': description: status content: text/plain: schema: type: string /settings/global/{key}: get: summary: get global settings operationId: getGlobal tags: - setting parameters: - name: key in: path required: true schema: &ref_25 type: string responses: '200': description: status content: application/json: schema: {} post: summary: post global settings operationId: setGlobal tags: - setting parameters: - name: key in: path required: true schema: *ref_25 requestBody: description: value set required: true content: application/json: schema: type: object properties: value: {} responses: '200': description: status content: text/plain: schema: type: string /settings_u/ruff_config: get: summary: get instance ruff config (unauthenticated) description: | Returns the instance-level ruff.toml content as plain text. Intentionally unauthenticated so the LSP extra container can poll it across any deployment topology. Responds with an empty body when the instance config is unset. Ruff configuration is lint/format policy, not a credential. operationId: getRuffConfig tags: - setting responses: '200': description: ruff.toml content (may be empty) content: text/plain: schema: type: string /settings/local: get: summary: get local settings operationId: getLocal tags: - setting responses: '200': description: status content: application/json: schema: {} /settings/test_smtp: post: summary: test smtp operationId: testSmtp tags: - setting requestBody: description: test smtp payload required: true content: application/json: schema: type: object properties: to: type: string smtp: type: object properties: host: type: string username: type: string password: type: string port: type: integer from: type: string tls_implicit: type: boolean disable_tls: type: boolean required: - host - username - password - port - from - tls_implicit - disable_tls required: - to - smtp responses: '200': description: status content: text/plain: schema: type: string /settings/test_critical_channels: post: summary: test critical channels operationId: testCriticalChannels tags: - setting requestBody: description: test critical channel payload required: true content: application/json: schema: type: array items: type: object properties: email: type: string slack_channel: type: string responses: '200': description: status content: text/plain: schema: type: string /settings/critical_alerts: get: summary: Get all critical alerts operationId: getCriticalAlerts tags: - setting parameters: - in: query name: page schema: type: integer default: 1 description: The page number to retrieve (minimum value is 1) - in: query name: page_size schema: type: integer default: 10 maximum: 100 description: Number of alerts per page (maximum is 100) - in: query name: acknowledged schema: type: boolean nullable: true description: >- Filter by acknowledgment status; true for acknowledged, false for unacknowledged, and omit for all alerts responses: '200': description: Successfully retrieved all critical alerts content: application/json: schema: type: object properties: alerts: type: array items: type: object properties: &ref_63 id: type: integer description: Unique identifier for the alert alert_type: type: string description: Type of alert (e.g., critical_error) message: type: string description: The message content of the alert created_at: type: string format: date-time description: Time when the alert was created acknowledged: type: boolean nullable: true description: >- Acknowledgment status of the alert, can be true, false, or null if not set workspace_id: type: string nullable: true description: >- Workspace id if the alert is in the scope of a workspace total_rows: type: integer description: Total number of rows matching the query. example: 100 total_pages: type: integer description: Total number of pages based on the page size. example: 10 /settings/critical_alerts/{id}/acknowledge: post: summary: Acknowledge a critical alert operationId: acknowledgeCriticalAlert tags: - setting parameters: - in: path name: id required: true schema: type: integer description: The ID of the critical alert to acknowledge responses: '200': description: Successfully acknowledged the critical alert content: application/json: schema: type: string example: Critical alert acknowledged /settings/critical_alerts/acknowledge_all: post: summary: Acknowledge all unacknowledged critical alerts operationId: acknowledgeAllCriticalAlerts tags: - setting responses: '200': description: Successfully acknowledged all unacknowledged critical alerts. content: application/json: schema: type: string example: All unacknowledged critical alerts acknowledged /settings/test_license_key: post: summary: test license key operationId: testLicenseKey tags: - setting requestBody: description: test license key required: true content: application/json: schema: type: object properties: license_key: type: string required: - license_key responses: '200': description: status content: text/plain: schema: type: string /settings/test_object_storage_config: post: summary: test object storage config operationId: testObjectStorageConfig tags: - setting requestBody: description: test object storage config required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: status content: text/plain: schema: type: string /settings/object_storage_usage: get: summary: get current or last object storage usage computation (null if never run) operationId: getObjectStorageUsage tags: - setting responses: '200': description: current or last storage-usage computation state content: application/json: schema: nullable: true type: object properties: running: type: boolean started_at: type: string format: date-time finished_at: type: string format: date-time nullable: true current_prefix: type: string nullable: true scanned_objects: type: integer format: int64 folders: type: array items: type: object properties: prefix: type: string size: type: integer format: int64 partial: type: boolean required: - prefix - size error: type: string nullable: true required: - running - started_at - scanned_objects - folders post: summary: >- start a background computation of object storage usage by top-level folder operationId: computeObjectStorageUsage tags: - setting responses: '202': description: computation started content: text/plain: schema: type: string /settings/run_log_cleanup: post: summary: start a manual cleanup of expired logs from object storage operationId: runLogCleanup tags: - setting responses: '202': description: cleanup started content: text/plain: schema: type: string /settings/log_cleanup_status: get: summary: get status of the manual log cleanup task operationId: getLogCleanupStatus tags: - setting responses: '200': description: current or last log cleanup status (null if never run) content: application/json: schema: nullable: true type: object properties: running: type: boolean started_at: type: string format: date-time finished_at: type: string format: date-time nullable: true phase: type: string total_service: type: integer format: int64 processed_service: type: integer format: int64 total_jobs: type: integer format: int64 processed_jobs: type: integer format: int64 s3_deleted: type: integer format: int64 orphans_scanned: type: integer format: int64 orphans_deleted: type: integer format: int64 errors: type: integer format: int64 last_error: type: string nullable: true required: - running - started_at - phase - total_service - processed_service - total_jobs - processed_jobs - s3_deleted - orphans_scanned - orphans_deleted - errors /settings/audit_logs_s3_status: get: summary: get status of the audit-log object-store export cursor operationId: getAuditLogsS3Status tags: - setting responses: '200': description: current export status (null if the feature was never enabled) content: application/json: schema: nullable: true type: object properties: last_xmin: type: integer format: int64 last_ts: type: string format: date-time nullable: true bootstrapping: type: boolean last_exported_audit_ts: type: string format: date-time nullable: true last_run_at: type: string format: date-time nullable: true last_run_exported: type: integer format: int64 updated_at: type: string format: date-time owner: type: string nullable: true required: - last_xmin - bootstrapping - last_run_exported - updated_at /settings/send_stats: post: summary: send stats operationId: sendStats tags: - setting responses: '200': description: status content: text/plain: schema: type: string /settings/restart_worker_group/{worker_group}: post: summary: restart worker group description: >- Send a restart signal to all workers in the specified worker group. Workers will gracefully shut down and are expected to be restarted by their supervisor. Requires devops role. operationId: restartWorkerGroup tags: - setting parameters: - name: worker_group in: path required: true schema: type: string description: the name of the worker group to restart responses: '200': description: restart signal sent content: text/plain: schema: type: string /settings/get_stats: get: summary: get telemetry stats with HMAC signature (EE only) operationId: getStats tags: - setting responses: '200': description: telemetry stats JSON with signature content: application/json: schema: type: object properties: signature: type: string data: type: string /settings/latest_key_renewal_attempt: get: summary: get latest key renewal attempt operationId: getLatestKeyRenewalAttempt tags: - setting responses: '200': description: status content: application/json: schema: type: object properties: result: type: string attempted_at: type: string format: date-time required: - result - attempted_at nullable: true /settings/renew_license_key: post: summary: renew license key operationId: renewLicenseKey tags: - setting parameters: - name: license_key in: query required: false schema: type: string responses: '200': description: status content: text/plain: schema: type: string /settings/offline_license_status: get: summary: get cap-usage status for the currently-loaded offline license description: | Returns the live cap status (seats used vs cap, current CU vs cap) for the offline license key currently in use. Returns `null` if no offline license is loaded. Super-admin only. operationId: getOfflineLicenseStatus tags: - setting responses: '200': description: cap status (or null when no offline license) content: application/json: schema: type: object nullable: true properties: seats_used: type: number description: >- Author-equivalent seats consumed (authors + 0.5 × operators) seats_cap: type: integer author_count: type: integer operator_count: type: integer current_cu: type: number description: >- Sum of CU rate across workers that pinged in the last 2 minutes. cu_cap: type: number cu_over_cap: type: boolean /settings/instance_hash: get: summary: per-instance binding hash for offline license issuance description: | Returns the hash a superadmin shares with Windmill support when requesting an offline license. Super-admin only. operationId: getInstanceHash tags: - setting responses: '200': description: instance hash content: application/json: schema: type: object properties: instance_hash: type: string nullable: true /settings/customer_portal: post: summary: create customer portal session operationId: createCustomerPortalSession tags: - setting parameters: - name: license_key in: query required: false schema: type: string responses: '200': description: url to portal content: text/plain: schema: type: string /saml/test_metadata: post: summary: test metadata operationId: testMetadata tags: - setting requestBody: description: test metadata required: true content: application/json: schema: type: string responses: '200': description: status content: text/plain: schema: type: string /settings/list_global: get: summary: list global settings operationId: listGlobalSettings tags: - setting responses: '200': description: list of settings content: application/json: schema: type: array items: type: object properties: &ref_545 name: type: string value: {} required: &ref_546 - name - value /settings/instance_config: get: summary: get full instance config (global settings + worker configs) operationId: getInstanceConfig tags: - setting responses: '200': description: full instance configuration content: application/json: schema: type: object description: >- Unified instance configuration combining global settings and worker group configs properties: &ref_26 global_settings: type: object description: > Global settings keyed by setting name. Known fields include base_url, license_key, retention_period_secs, smtp_settings, otel, etc. Unknown fields are preserved as-is. additionalProperties: true worker_configs: type: object description: > Worker group configurations keyed by group name (e.g. "default", "gpu"). Each value contains worker_tags, init_bash, autoscaling, etc. additionalProperties: type: object additionalProperties: true put: summary: >- update instance config (bulk upsert, no deletes). Empty or missing global_settings/worker_configs are skipped. operationId: setInstanceConfig tags: - setting requestBody: description: full instance configuration to apply required: true content: application/json: schema: type: object description: >- Unified instance configuration combining global settings and worker group configs properties: *ref_26 responses: '200': description: instance config updated content: text/plain: schema: type: string /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_370 - keys properties: &ref_371 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_27 - address - mount_path properties: &ref_28 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) kv_secret_path_prefix: type: string description: >- Optional path prefix inserted between the KV data/metadata segment and the workspace id (e.g., "apps/windmill"). When set, secrets are stored at `/data///`, allowing a Vault policy scoped to exactly `/data//*`. jwt_role: type: string description: >- Vault JWT auth role name for Windmill (optional, if not provided token auth is used) jwt_mount_path: type: string description: >- Mount path for the JWT auth method in Vault (optional, defaults to "jwt"). Set this when the JWT auth method is mounted at a non-default path, e.g. via `vault auth enable -path= jwt`. 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) skip_ssl_verify: type: boolean description: >- Skip TLS certificate verification when connecting to Vault. Only use for self-signed certificates in development environments. 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_27 properties: *ref_28 responses: '200': description: migration report content: application/json: schema: type: object required: &ref_29 - total_secrets - migrated_count - failed_count - failures properties: &ref_30 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_368 - workspace_id - path - error properties: &ref_369 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_27 properties: *ref_28 responses: '200': description: migration report content: application/json: schema: type: object required: *ref_29 properties: *ref_30 /settings/test_azure_kv_backend: post: summary: test Azure Key Vault connection operationId: testAzureKvBackend tags: - setting requestBody: description: Azure Key Vault settings to test required: true content: application/json: schema: type: object required: &ref_31 - vault_url - tenant_id - client_id properties: &ref_32 vault_url: type: string description: Azure Key Vault URL (e.g., https://myvault.vault.azure.net) tenant_id: type: string description: Azure AD tenant ID client_id: type: string description: Azure AD application (client) ID client_secret: type: string description: >- Azure AD client secret. Optional — when omitted, the integration falls back to Azure Workload Identity Federation, exchanging the Kubernetes-projected service-account JWT at AZURE_FEDERATED_TOKEN_FILE for an access token (no long-lived secret stored). token: type: string description: >- Static Bearer token for testing/development (optional, if provided this is used instead of OAuth2 authentication) responses: '200': description: connection successful content: text/plain: schema: type: string /settings/migrate_secrets_to_azure_kv: post: summary: migrate secrets from database to Azure Key Vault operationId: migrateSecretsToAzureKv tags: - setting requestBody: description: Azure Key Vault settings for migration target required: true content: application/json: schema: type: object required: *ref_31 properties: *ref_32 responses: '200': description: migration report content: application/json: schema: type: object required: *ref_29 properties: *ref_30 /settings/migrate_secrets_from_azure_kv: post: summary: migrate secrets from Azure Key Vault to database operationId: migrateSecretsFromAzureKv tags: - setting requestBody: description: Azure Key Vault settings for migration source required: true content: application/json: schema: type: object required: *ref_31 properties: *ref_32 responses: '200': description: migration report content: application/json: schema: type: object required: *ref_29 properties: *ref_30 /settings/test_aws_sm_backend: post: summary: test connection to AWS Secrets Manager operationId: testAwsSmBackend tags: - setting requestBody: required: true content: application/json: schema: type: object required: &ref_33 - region properties: &ref_34 region: type: string description: AWS region (e.g., us-east-1) access_key_id: type: string description: >- AWS Access Key ID (optional, uses default credential chain if not provided) secret_access_key: type: string description: AWS Secret Access Key (optional) endpoint_url: type: string description: Custom endpoint URL for testing (e.g., LocalStack) prefix: type: string description: Prefix for secret names (e.g., windmill/) responses: '200': description: connection test result content: text/plain: schema: type: string /settings/migrate_secrets_to_aws_sm: post: summary: migrate secrets from database to AWS Secrets Manager operationId: migrateSecretsToAwsSm tags: - setting requestBody: required: true content: application/json: schema: type: object required: *ref_33 properties: *ref_34 responses: '200': description: migration report content: application/json: schema: type: object required: *ref_29 properties: *ref_30 /settings/migrate_secrets_from_aws_sm: post: summary: migrate secrets from AWS Secrets Manager to database operationId: migrateSecretsFromAwsSm tags: - setting requestBody: required: true content: application/json: schema: type: object required: *ref_33 properties: *ref_34 responses: '200': description: migration report content: application/json: schema: type: object required: *ref_29 properties: *ref_30 /users/email: get: summary: get current user email (if logged in) operationId: getCurrentEmail tags: - user responses: '200': description: user email content: text/plain: schema: type: string /users/refresh_token: get: summary: refresh the current token operationId: refreshUserToken tags: - user parameters: - name: if_expiring_in_less_than_s in: query required: false schema: type: integer responses: '200': description: new token content: text/plain: schema: type: string /users/tutorial_progress: get: summary: get tutorial progress operationId: getTutorialProgress tags: - user responses: '200': description: tutorial progress content: application/json: schema: type: object properties: progress: type: integer skipped_all: type: boolean post: summary: update tutorial progress operationId: updateTutorialProgress tags: - user requestBody: description: progress update required: true content: application/json: schema: type: object properties: progress: type: integer skipped_all: type: boolean responses: '200': description: tutorial progress content: text/plain: schema: type: string /users/leave_instance: post: summary: leave instance operationId: leaveInstance tags: - user responses: '200': description: status content: text/plain: schema: type: string /users/usage: get: summary: get current usage outside of premium workspaces operationId: getUsage tags: - user responses: '200': description: free usage content: text/plain: schema: type: number /users/all_runnables: get: summary: get all runnables in every workspace operationId: getRunnable tags: - user responses: '200': description: free all runnables content: application/json: schema: type: object properties: workspace: type: string endpoint_async: type: string endpoint_sync: type: string summary: type: string description: type: string kind: type: string required: - workspace - endpoint_async - endpoint_sync - summary - kind /users/whoami: get: summary: get current global whoami (if logged in) operationId: globalWhoami tags: - user responses: '200': description: user email content: application/json: schema: type: object properties: &ref_39 email: type: string login_type: type: string enum: - password - github - service_account super_admin: type: boolean devops: type: boolean verified: type: boolean name: type: string company: type: string username: type: string operator_only: type: boolean is_workspace_admin: type: boolean description: >- Populated only for service accounts. True if the service account has workspace admin in its (single) workspace. first_time_user: type: boolean role_source: type: string enum: - manual - instance_group - service_account disabled: type: boolean workspace_id: type: string required: &ref_40 - email - login_type - super_admin - verified - first_time_user - role_source - disabled /users/list_invites: get: summary: list all workspace invites operationId: listWorkspaceInvites tags: - user responses: '200': description: list all workspace invites content: application/json: schema: type: array items: type: object properties: &ref_41 workspace_id: type: string email: type: string is_admin: type: boolean operator: type: boolean parent_workspace_id: type: string nullable: true required: &ref_42 - workspace_id - email - is_admin - operator /w/{workspace}/users/whoami: get: summary: whoami operationId: whoami tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: user content: application/json: schema: type: object properties: *ref_35 required: *ref_36 /w/{workspace}/github_app/token: post: summary: get github app token operationId: getGithubAppToken tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: jwt job token required: true content: application/json: schema: type: object properties: job_token: type: string required: - job_token responses: '200': description: github app token content: application/json: schema: type: object properties: token: type: string required: - token /w/{workspace}/github_app/install_from_workspace: post: tags: - Git Sync summary: Install a GitHub installation from another workspace operationId: installFromWorkspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: source_workspace_id: type: string description: The ID of the workspace containing the installation to copy installation_id: type: number description: The ID of the GitHub installation to copy required: - source_workspace_id - installation_id responses: '200': description: Installation successfully copied /w/{workspace}/github_app/installation/{installation_id}: delete: summary: Delete a GitHub installation from a workspace operationId: deleteFromWorkspace description: >- Removes a GitHub installation from the specified workspace. Requires admin privileges. tags: - Git Sync parameters: - name: workspace in: path required: true schema: *ref_4 - name: installation_id in: path required: true schema: type: integer format: int64 description: The ID of the GitHub installation to delete responses: '200': description: Installation successfully deleted /w/{workspace}/github_app/export/{installationId}: get: summary: Export GitHub installation JWT token description: >- Exports the JWT token for a specific GitHub installation in the workspace operationId: exportInstallation tags: - Git Sync parameters: - name: workspace in: path required: true schema: type: string - name: installationId in: path required: true schema: type: integer responses: '200': description: Successfully exported the JWT token content: application/json: schema: type: object properties: jwt_token: type: string /w/{workspace}/github_app/import: post: summary: Import GitHub installation from JWT token description: >- Imports a GitHub installation from a JWT token exported from another instance operationId: importInstallation tags: - Git Sync parameters: - name: workspace in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object required: - jwt_token properties: jwt_token: type: string responses: '200': description: Successfully imported the installation /w/{workspace}/github_app/ghes_installation_callback: post: summary: GHES installation callback description: >- Register a self-managed GitHub App installation from GitHub Enterprise Server operationId: ghesInstallationCallback tags: - Git Sync parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - installation_id properties: installation_id: type: integer format: int64 description: The GitHub App installation ID from GHES responses: '200': description: GHES installation registered successfully /github_app/ghes_config: get: summary: Get GHES app config description: >- Returns the GitHub Enterprise Server app configuration (without private key) for constructing the installation URL operationId: getGhesConfig tags: - Git Sync responses: '200': description: GHES app configuration content: application/json: schema: type: object properties: base_url: type: string app_slug: type: string client_id: type: string app_owner: type: string nullable: true required: - base_url - app_slug - client_id /github_app/ghes/discover: get: summary: Discover GHES App installations description: | Lists every installation the configured self-managed GitHub App can see, annotated with the workspaces in this Windmill instance the installation is currently assigned to. Super-admin only. operationId: discoverGhesInstallations tags: - Git Sync responses: '200': description: Discovered installations content: application/json: schema: type: array items: type: object required: - installation_id - account_id - assigned_workspaces properties: installation_id: type: integer format: int64 account_id: type: string description: GitHub login of the installation's account (org or user) assigned_workspaces: type: array items: type: object required: - workspace_id - provisioned_by_admin properties: workspace_id: type: string provisioned_by_admin: type: boolean /github_app/ghes/assign: post: summary: Assign GHES installation to a workspace description: | Assigns a discovered GHES App installation to a workspace. The resulting installation is marked as admin-provisioned, so workspace admins cannot remove it. Super-admin only. operationId: assignGhesInstallation tags: - Git Sync requestBody: required: true content: application/json: schema: type: object required: - workspace_id - installation_id properties: workspace_id: type: string installation_id: type: integer format: int64 responses: '200': description: Installation assigned /github_app/ghes/assign/{workspace_id}/{installation_id}: delete: summary: Unassign GHES installation from a workspace description: | Removes an installation (admin-provisioned or otherwise) from a workspace. Super-admin only. Does not affect the installation on the GitHub side. operationId: unassignGhesInstallation tags: - Git Sync parameters: - name: workspace_id in: path required: true schema: type: string - name: installation_id in: path required: true schema: type: integer format: int64 responses: '200': description: Installation unassigned /users/accept_invite: post: summary: accept invite to workspace operationId: acceptInvite tags: - user requestBody: description: accept invite required: true content: application/json: schema: type: object properties: workspace_id: type: string username: type: string required: - workspace_id responses: '200': description: status content: text/plain: schema: type: string /users/decline_invite: post: summary: decline invite to workspace operationId: declineInvite tags: - user requestBody: description: decline invite required: true content: application/json: schema: type: object properties: workspace_id: type: string required: - workspace_id responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/invite_user: post: summary: invite user to workspace operationId: inviteUser tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceInvite required: true content: application/json: schema: type: object properties: email: type: string is_admin: type: boolean operator: type: boolean parent_workspace_id: type: string nullable: true required: - email - is_admin - operator responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/add_user: post: summary: add user to workspace operationId: addUser tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceInvite required: true content: application/json: schema: type: object properties: email: type: string is_admin: type: boolean username: type: string operator: type: boolean required: - email - is_admin - operator responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/create_service_account: post: summary: create a service account operationId: createServiceAccount tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: username: type: string is_admin: type: boolean description: >- Grant the service account workspace admin. Defaults to false. Cannot be combined with operator=true. operator: type: boolean description: >- Make the service account an operator. Defaults to true for backward compatibility. Set to false to count as a developer (1 seat) instead of 0.5 seat. add_to_deployers: type: boolean description: >- Add the service account to the workspace `wm_deployers` group on creation. Recommended when the account will be used as a CLI sync / CI deploy identity so it can deploy on behalf of other users. required: - username responses: '201': description: service account created content: text/plain: schema: type: string /w/{workspace}/users/impersonate_service_account: post: summary: impersonate a service account operationId: impersonateServiceAccount tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: username: type: string required: - username responses: '201': description: impersonation token content: text/plain: schema: type: string /w/{workspace}/users/exit_impersonation: post: summary: exit service account impersonation operationId: exitImpersonation tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: token: type: string required: - token responses: '200': description: exited impersonation content: text/plain: schema: type: string /w/{workspace}/workspaces/delete_invite: post: summary: delete user invite operationId: delete invite tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceInvite required: true content: application/json: schema: type: object properties: email: type: string is_admin: type: boolean operator: type: boolean required: - email - is_admin - operator responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/archive: post: summary: archive workspace operationId: archiveWorkspace tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: text/plain: schema: type: string /workspaces/unarchive/{workspace}: post: summary: unarchive workspace operationId: unarchiveWorkspace tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: text/plain: schema: type: string /workspaces/delete/{workspace}: delete: summary: delete workspace (require super admin) operationId: deleteWorkspace tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: only_delete_forks in: query required: false schema: type: boolean responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/leave: post: summary: leave workspace operationId: leaveWorkspace tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/get_workspace_name: get: summary: get workspace name operationId: getWorkspaceName tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/change_workspace_name: post: summary: change workspace name operationId: changeWorkspaceName tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: content: application/json: schema: type: object properties: new_name: type: string required: - username responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/change_workspace_id: post: summary: change workspace id operationId: changeWorkspaceId tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: content: application/json: schema: type: object properties: new_id: type: string new_name: type: string required: - username responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/change_workspace_color: post: summary: change workspace id operationId: changeWorkspaceColor tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: content: application/json: schema: type: object properties: color: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/users/whois/{username}: get: summary: whois operationId: whois tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 - name: username in: path required: true schema: type: string responses: '200': description: user content: application/json: schema: type: object properties: *ref_35 required: *ref_36 /w/{workspace}/workspaces/operator_settings: post: operationId: updateOperatorSettings summary: Update operator settings for a workspace description: >- Updates the operator settings for a specific workspace. Requires workspace admin privileges. tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: nullable: true type: object required: *ref_37 properties: *ref_38 responses: '200': description: Operator settings updated successfully content: text/plain: schema: type: string /w/{workspace}/workspaces/compare/{target_workspace_id}: get: operationId: compareWorkspaces summary: Compare two workspaces description: >- Compares the current workspace with a target workspace to find differences in scripts, flows, apps, resources, and variables. Returns information about items that are ahead, behind, or in conflict. tags: - workspace parameters: - 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_554 - all_ahead_items_visible - all_behind_items_visible - skipped_comparison - diffs - summary properties: &ref_555 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_556 - kind - path - ahead - behind - has_changes - exists_in_source - exists_in_fork properties: &ref_557 kind: type: string enum: - script - flow - app - raw_app - resource - variable - resource_type - folder - schedule - http_trigger - websocket_trigger - kafka_trigger - nats_trigger - postgres_trigger - mqtt_trigger - sqs_trigger - gcp_trigger - azure_trigger - email_trigger 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_558 - total_diffs - total_ahead - total_behind - scripts_changed - flows_changed - apps_changed - resources_changed - variables_changed - resource_types_changed - folders_changed - schedules_changed - triggers_changed - conflicts properties: &ref_559 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 schedules_changed: type: integer description: Number of schedules with differences triggers_changed: type: integer description: >- Number of triggers with differences (sum across all trigger kinds) 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 operationId: existsEmail tags: - user parameters: - name: email in: path required: true schema: type: string responses: '200': description: user content: application/json: schema: type: boolean /users/list_as_super_admin: get: summary: list all users as super admin (require to be super amdin) operationId: listUsersAsSuperAdmin tags: - user parameters: - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: active_only in: query description: filter only active users schema: type: boolean responses: '200': description: user content: application/json: schema: type: array items: type: object properties: *ref_39 required: *ref_40 /w/{workspace}/workspaces/list_pending_invites: get: summary: list pending invites for a workspace operationId: listPendingInvites tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: user content: application/json: schema: type: array items: type: object properties: *ref_41 required: *ref_42 /w/{workspace}/workspaces/get_public_settings: get: summary: get public settings description: >- Returns the subset of workspace settings safe to expose to any workspace member. The full settings struct is admin-only via `getSettings`. operationId: getPublicSettings tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: workspace_id: type: string slack_name: type: string slack_team_id: type: string teams_team_id: type: string teams_team_name: type: string teams_team_guid: type: string large_file_storage: type: object properties: &ref_45 type: type: string enum: - S3Storage - AzureBlobStorage - AzureWorkloadIdentity - S3AwsOidc - GoogleCloudStorage s3_resource_path: type: string azure_blob_resource_path: type: string gcs_resource_path: type: string public_resource: type: boolean advanced_permissions: type: array items: type: object properties: &ref_531 pattern: type: string allow: type: string required: &ref_532 - pattern - allow secondary_storage: type: object additionalProperties: type: object properties: type: type: string enum: - S3Storage - AzureBlobStorage - AzureWorkloadIdentity - S3AwsOidc - GoogleCloudStorage s3_resource_path: type: string azure_blob_resource_path: type: string gcs_resource_path: type: string public_resource: type: boolean datatable: type: object required: &ref_46 - datatables properties: &ref_47 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 forked_from: type: object description: Fork origin info with schema snapshot properties: schema: type: object description: Schema snapshot at fork time additionalProperties: true deploy_ui: type: object properties: &ref_49 include_path: type: array items: type: string include_type: type: array items: type: string enum: &ref_48 - script - flow - app - folder - resource - variable - secret - resourcetype - schedule - user - group - trigger - settings - key - workspacedependencies mute_critical_alerts: type: boolean required: - workspace_id /w/{workspace}/workspaces/get_settings: get: summary: get settings (admin only) description: >- Returns the full workspace settings including admin-managed integration credentials. Admin-only — non-admin callers should use `getPublicSettings`. operationId: getSettings tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: workspace_id: type: string slack_name: type: string slack_team_id: type: string slack_command_script: type: string slack_oauth_client_id: type: string slack_oauth_client_secret: type: string teams_team_id: type: string teams_command_script: type: string teams_team_name: type: string teams_team_guid: type: string auto_invite: type: object description: Configuration for auto-inviting users to the workspace properties: &ref_359 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: type: string webhook: type: string deploy_to: type: string ai_config: type: object properties: &ref_50 providers: type: object additionalProperties: type: object properties: &ref_378 resource_path: type: string models: type: array items: type: string required: &ref_379 - resource_path - models default_model: type: object properties: &ref_43 model: type: string provider: type: string enum: &ref_51 - openai - azure_openai - anthropic - mistral - deepseek - googleai - groq - openrouter - togetherai - aws_bedrock - customai required: &ref_44 - model - provider code_completion_model: type: object properties: *ref_43 required: *ref_44 custom_prompts: type: object additionalProperties: type: string max_tokens_per_model: type: object additionalProperties: type: integer minimum: 1 maximum: 2000000 error_handler: type: object description: Configuration for the workspace error handler properties: &ref_360 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_361 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_45 ducklake: type: object required: &ref_54 - ducklakes properties: &ref_55 ducklakes: type: object additionalProperties: type: object required: - catalog - storage properties: catalog: type: object properties: resource_type: type: string enum: - postgresql - mysql - instance resource_path: type: string required: - resource_type storage: type: object properties: storage: type: string path: type: string required: - path extra_args: type: string datatable: type: object required: *ref_46 properties: *ref_47 git_sync: type: object properties: &ref_56 repositories: type: array items: type: object properties: &ref_57 script_path: type: string git_repo_resource_path: type: string use_individual_branch: type: boolean group_by_folder: type: boolean collapsed: type: boolean settings: type: object properties: include_path: type: array items: type: string include_type: type: array items: type: string enum: *ref_48 exclude_path: type: array items: type: string extra_include_path: type: array items: type: string exclude_types_override: type: array items: type: string enum: *ref_48 required: &ref_58 - git_repo_resource_path deploy_ui: type: object properties: *ref_49 default_app: type: string default_scripts: type: object properties: &ref_59 order: type: array items: type: string hidden: type: array items: type: string default_script_content: additionalProperties: type: string mute_critical_alerts: type: boolean color: type: string operator_settings: nullable: true type: object required: *ref_37 properties: *ref_38 public_app_execution_limit_per_minute: type: integer description: >- Rate limit for public app executions per minute per server. NULL or 0 means disabled. /w/{workspace}/workspaces/get_deploy_to: get: summary: get deploy to operationId: getDeployTo tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: deploy_to: type: string /w/{workspace}/workspaces/is_premium: get: summary: get if workspace is premium operationId: getIsPremium tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: boolean /w/{workspace}/workspaces/premium_info: get: summary: get premium info operationId: getPremiumInfo tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: skip_subscription_fetch in: query description: skip fetching subscription status from stripe schema: type: boolean responses: '200': description: status content: application/json: schema: type: object properties: premium: type: boolean usage: type: number owner: type: string status: type: string is_past_due: type: boolean max_tolerated_executions: type: number required: - premium - owner - is_past_due /w/{workspace}/workspaces/threshold_alert: get: summary: get threshold alert info operationId: getThresholdAlert tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: threshold_alert_amount: type: number last_alert_sent: type: string format: date-time post: summary: set threshold alert info operationId: setThresholdAlert tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: threshold alert info required: true content: application/json: schema: type: object properties: threshold_alert_amount: type: number responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/rebuild_dependency_map: post: summary: rebuild dependency map operationId: rebuildDependencyMap tags: - workspace parameters: - 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_507 importer_path: type: string importer_kind: type: string enum: - script - flow - app importer_node_ids: type: array items: type: string nullable: true required: &ref_508 - importer_path - importer_kind /w/{workspace}/workspaces/get_imports/{importer_path}: get: summary: get script imports for an importer path operationId: getImports tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: importer_path in: path required: true schema: type: string description: The script path to get imports for responses: '200': description: list of imported script paths content: application/json: schema: type: array items: type: string /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_509 imported_path: type: string count: type: integer format: int64 required: &ref_510 - 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_506 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 operationId: editSlackCommand tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceInvite required: true content: application/json: schema: type: object properties: slack_command_script: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/slack_oauth_config: get: summary: get workspace slack oauth config operationId: getWorkspaceSlackOauthConfig tags: - workspace parameters: - 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 operationId: editTeamsCommand tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceInvite required: true content: application/json: schema: type: object properties: slack_command_script: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/available_teams_ids: get: summary: list available teams ids operationId: listAvailableTeamsIds tags: - workspace parameters: - name: workspace in: path required: true 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: object properties: teams: type: array items: type: object properties: team_name: type: string team_id: type: string total_count: type: integer description: Total number of teams across all pages per_page: type: integer description: >- Number of teams per page (configurable via TEAMS_PER_PAGE env var) next_link: type: string nullable: true description: URL to fetch next page of results. Null if no more pages. /w/{workspace}/workspaces/available_teams_channels: get: summary: list available channels for a specific team operationId: listAvailableTeamsChannels tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: team_id in: query description: Microsoft Teams team ID required: true schema: type: string responses: '200': description: List of channels for the specified team content: application/json: schema: type: object properties: channels: type: array items: type: object properties: channel_name: type: string channel_id: type: string total_count: type: integer /w/{workspace}/workspaces/connect_teams: post: summary: connect teams operationId: connectTeams tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: connect teams required: true content: application/json: schema: type: object properties: team_id: type: string team_name: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/connect_slack: post: summary: connect slack (non-interactive; pre-minted bot token) operationId: connectSlack tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: connect slack with a pre-minted bot token required: true content: application/json: schema: type: object required: - bot_token - team_id - team_name properties: bot_token: type: string description: xoxb-... bot token obtained at api.slack.com/apps team_id: type: string team_name: type: string responses: '200': description: status /w/{workspace}/workspaces/run_slack_message_test_job: post: summary: run a job that sends a message to Slack operationId: runSlackMessageTestJob tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: path to hub script to run and its corresponding args required: true content: application/json: schema: type: object properties: hub_script_path: type: string channel: type: string test_msg: type: string responses: '200': description: status content: text/json: schema: type: object properties: job_uuid: type: string /w/{workspace}/workspaces/run_teams_message_test_job: post: summary: run a job that sends a message to Teams operationId: runTeamsMessageTestJob tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: path to hub script to run and its corresponding args required: true content: application/json: schema: type: object properties: hub_script_path: type: string channel: type: string test_msg: type: string responses: '200': description: status content: text/json: schema: type: object properties: job_uuid: type: string /w/{workspace}/workspaces/edit_deploy_to: post: summary: edit deploy to operationId: editDeployTo tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: deploy_to: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/edit_auto_invite: post: summary: edit auto invite operationId: editAutoInvite tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceInvite required: true content: application/json: schema: type: object properties: operator: type: boolean invite_all: type: boolean auto_add: type: boolean responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/edit_instance_groups: post: summary: edit instance groups operationId: editInstanceGroups tags: - workspace parameters: - 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 operationId: editWebhook tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceWebhook required: true content: application/json: schema: type: object properties: webhook: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/edit_copilot_config: post: summary: edit copilot config operationId: editCopilotConfig tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceCopilotConfig required: true content: application/json: schema: type: object properties: *ref_50 responses: '200': description: status content: application/json: schema: type: object properties: effective_ai_config: type: object properties: *ref_50 has_instance_ai_config: type: boolean uses_instance_ai_config: type: boolean instance_ai_summary: type: object properties: &ref_52 providers: type: array items: type: object properties: &ref_380 provider: type: string enum: *ref_51 models: type: array items: type: string required: &ref_381 - provider - models default_model: type: object properties: *ref_43 required: *ref_44 code_completion_model: type: object properties: *ref_43 required: *ref_44 required: &ref_53 - providers required: - effective_ai_config - has_instance_ai_config - uses_instance_ai_config /w/{workspace}/workspaces/get_copilot_settings_state: get: summary: get copilot settings state operationId: getCopilotSettingsState tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: has_instance_ai_config: type: boolean uses_instance_ai_config: type: boolean instance_ai_summary: type: object properties: *ref_52 required: *ref_53 required: - has_instance_ai_config - uses_instance_ai_config /w/{workspace}/workspaces/get_copilot_info: get: summary: get copilot info operationId: getCopilotInfo tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: *ref_50 /w/{workspace}/workspaces/edit_error_handler: post: summary: edit error handler operationId: editErrorHandler tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: WorkspaceErrorHandler required: true content: application/json: schema: description: >- Request body for editing the workspace error handler. Accepts both new grouped format and legacy flat format for backward compatibility. oneOf: &ref_362 - type: object description: New grouped format for editing error handler properties: &ref_363 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_364 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_365 - type: object description: New grouped format for editing success handler properties: &ref_366 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_367 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 content: text/plain: schema: type: string /w/{workspace}/workspaces/edit_large_file_storage_config: post: summary: edit large file storage settings operationId: editLargeFileStorageConfig tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: LargeFileStorage info required: true content: application/json: schema: type: object properties: large_file_storage: type: object properties: *ref_45 responses: '200': description: status content: application/json: schema: {} /w/{workspace}/workspaces/list_ducklakes: get: summary: list ducklakes operationId: listDucklakes 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_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: object required: - name - resource_type - resource_path properties: name: type: string resource_type: type: string enum: - postgres - instance resource_path: 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_523 - datatable_name - schemas properties: &ref_524 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/list_datatable_tables: get: summary: list tables of all connected Datatables operationId: listDataTableTables tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: table metadata of all datatables content: application/json: schema: type: array items: type: object required: &ref_525 - datatable_name - schemas properties: &ref_526 datatable_name: type: string schemas: type: object description: 'Hierarchical metadata: schema_name -> table_names' additionalProperties: type: array items: type: string error: type: string /w/{workspace}/workspaces/get_datatable_table_schema: get: summary: get one Datatable table schema operationId: getDataTableTableSchema tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: datatable_name in: query required: true schema: type: string - name: schema_name in: query required: true schema: type: string - name: table_name in: query required: true schema: type: string responses: '200': description: schema of one datatable table content: application/json: schema: type: object required: &ref_527 - datatable_name - schema_name - table_name - columns properties: &ref_528 datatable_name: type: string schema_name: type: string table_name: type: string columns: type: object description: 'Columns in this table: column_name -> compact_type' additionalProperties: type: string description: 'Compact type: ''type[?][=default]'' where ? means nullable' /w/{workspace}/workspaces/edit_ducklake_config: post: summary: edit ducklake settings operationId: editDucklakeConfig tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Ducklake settings required: true content: application/json: schema: type: object required: - settings properties: settings: type: object required: *ref_54 properties: *ref_55 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_46 properties: *ref_47 responses: '200': description: status content: application/json: schema: {} /w/{workspace}/workspaces/create_pg_database: post: summary: create a new PostgreSQL database for a datatable operationId: createPgDatabase tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Create pg database request required: true content: application/json: schema: type: object required: - source - target_dbname properties: source: type: string description: >- Datatable source to determine connection info: 'datatable://name' or '$res:path' target_dbname: type: string description: Name for the new database responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/drop_forked_datatable_databases: post: summary: drop forked datatable databases operationId: dropForkedDatatableDatabases tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - datatable_names properties: datatable_names: type: array items: type: string responses: '200': description: list of errors (empty if all succeeded) content: application/json: schema: type: array items: type: string /w/{workspace}/workspaces/import_pg_database: post: summary: import a PostgreSQL database from source to target via pg_dump operationId: importPgDatabase tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Import pg database request required: true content: application/json: schema: type: object required: - source - target - fork_behavior properties: source: type: string description: 'Source database: ''datatable://name'' or ''$res:path''' target: type: string description: 'Target database: ''datatable://name'' or ''$res:path''' target_dbname_override: type: string description: Override the target database name fork_behavior: type: string enum: - schema_only - schema_and_data - keep_original responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/export_pg_schema: post: summary: export the schema of a PostgreSQL database operationId: exportPgSchema tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Export pg schema request required: true content: application/json: schema: type: object required: - source properties: source: type: string description: 'Source database: ''datatable://name'' or ''$res:path''' responses: '200': description: schema dump content: text/plain: schema: type: string /w/{workspace}/workspaces/get_datatable_full_schema: post: summary: get the full schema of a datatable database as TableEditorValues operationId: getDatatableFullSchema tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - source properties: source: type: string description: Source datatable, e.g. 'datatable://main' responses: '200': description: 'Schema as { schema_name: { table_name: TableEditorValues } }' content: application/json: schema: type: object additionalProperties: type: object additionalProperties: type: object required: - name - columns - foreign_keys properties: name: type: string columns: type: array items: type: object required: - name - datatype properties: name: type: string datatype: type: string primary_key: type: boolean default_value: type: string nullable: type: boolean foreign_keys: type: array items: type: object required: - columns - on_delete - on_update properties: target_table: type: string columns: type: array items: type: object properties: source_column: type: string target_column: type: string on_delete: type: string on_update: type: string fk_constraint_name: type: string pk_constraint_name: type: string /w/{workspace}/workspaces/git_sync_enabled: get: summary: Check if git sync is available for this workspace operationId: getGitSyncEnabled tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: Git sync availability status content: application/json: schema: type: object properties: enabled: type: boolean reason: type: string nullable: true max_repos: type: integer nullable: true user_count: type: integer nullable: true max_users: type: integer nullable: true /w/{workspace}/workspaces/edit_git_sync_config: post: summary: edit workspace git sync settings operationId: editWorkspaceGitSyncConfig tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Workspace Git sync settings required: true content: application/json: schema: type: object properties: git_sync_settings: type: object properties: *ref_56 responses: '200': description: status content: application/json: schema: {} /w/{workspace}/workspaces/edit_git_sync_repository: post: summary: add or update individual git sync repository operationId: editGitSyncRepository tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Git sync repository settings to add or update required: true content: application/json: schema: type: object properties: git_repo_resource_path: type: string description: The resource path of the git repository to update repository: type: object properties: *ref_57 required: *ref_58 required: - git_repo_resource_path - repository responses: '200': description: status content: application/json: schema: {} /w/{workspace}/workspaces/delete_git_sync_repository: delete: summary: delete individual git sync repository operationId: deleteGitSyncRepository tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Git sync repository to delete required: true content: application/json: schema: type: object properties: git_repo_resource_path: type: string description: The resource path of the git repository to delete required: - git_repo_resource_path responses: '200': description: status content: application/json: schema: {} /w/{workspace}/workspaces/edit_deploy_ui_config: post: summary: edit workspace deploy ui settings operationId: editWorkspaceDeployUISettings tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Workspace deploy UI settings required: true content: application/json: schema: type: object properties: deploy_ui_settings: type: object properties: *ref_49 responses: '200': description: status content: application/json: schema: {} /w/{workspace}/workspaces/edit_default_app: post: summary: edit default app for workspace operationId: editWorkspaceDefaultApp tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Workspace default app required: true content: application/json: schema: type: object properties: default_app_path: type: string responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/default_scripts: post: summary: edit default scripts for workspace operationId: editDefaultScripts tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Workspace default app content: application/json: schema: type: object properties: *ref_59 responses: '200': description: status content: text/plain: schema: type: string get: summary: get default scripts for workspace operationId: get default scripts tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: *ref_59 /w/{workspace}/workspaces/set_environment_variable: post: summary: set environment variable operationId: setEnvironmentVariable tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Workspace default app required: true content: application/json: schema: type: object properties: name: type: string value: type: string required: - name responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/encryption_key: get: summary: retrieves the encryption key for this workspace operationId: getWorkspaceEncryptionKey tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: key: type: string required: - key post: summary: update the encryption key for this workspace operationId: setWorkspaceEncryptionKey tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: New encryption key required: true content: application/json: schema: type: object properties: new_key: type: string skip_reencrypt: type: boolean required: - new_key responses: '200': description: status content: text/plain: schema: type: string /w/{workspace}/workspaces/default_app: get: summary: get default app for workspace operationId: getWorkspaceDefaultApp tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: default_app_path: type: string default_app_raw: type: boolean /w/{workspace}/workspaces/usage: get: summary: get usage operationId: getWorkspaceUsage tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: usage content: text/plain: schema: type: number /w/{workspace}/workspaces/used_triggers: get: summary: get used triggers operationId: getUsedTriggers tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: status content: application/json: schema: type: object properties: http_routes_used: type: boolean websocket_used: type: boolean kafka_used: type: boolean nats_used: type: boolean postgres_used: type: boolean mqtt_used: type: boolean gcp_used: type: boolean azure_used: type: boolean sqs_used: type: boolean email_used: type: boolean nextcloud_used: type: boolean google_used: type: boolean github_used: type: boolean required: - http_routes_used - websocket_used - kafka_used - nats_used - postgres_used - mqtt_used - gcp_used - azure_used - sqs_used - email_used - nextcloud_used - google_used - github_used /w/{workspace}/users/list: get: summary: list users operationId: listUsers tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: user content: application/json: schema: type: array items: type: object properties: *ref_35 required: *ref_36 /w/{workspace}/users/list_usage: get: summary: list users usage operationId: listUsersUsage tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: user content: application/json: schema: type: array items: type: object properties: &ref_396 email: type: string executions: type: number /w/{workspace}/users/list_usernames: get: summary: list usernames operationId: listUsernames tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: user content: application/json: schema: type: array items: type: string /w/{workspace}/users/username_to_email/{username}: get: summary: get email from username operationId: usernameToEmail tags: - user parameters: - name: workspace in: path required: true schema: *ref_4 - name: username in: path required: true schema: type: string responses: '200': description: email content: text/plain: schema: type: string /tokens/list/scopes: get: summary: list of available scopes operationId: ListAvailableScopes tags: - token responses: '200': description: list of available scopes content: application/json: schema: type: array items: type: object properties: &ref_518 name: type: string description: type: string nullable: true scopes: type: array items: type: object properties: &ref_516 value: type: string label: type: string description: type: string nullable: true requires_resource_path: type: boolean required: &ref_517 - value - label - requires_resource_path required: &ref_519 - name - scopes /users/tokens/create: post: summary: create token operationId: createToken tags: - user requestBody: description: new token required: true content: application/json: schema: type: object properties: &ref_415 label: type: string expiration: type: string format: date-time scopes: type: array items: type: string workspace_id: type: string read_only: type: boolean description: > If true, the token is restricted to read-only HTTP methods (GET/HEAD/OPTIONS). Mutating endpoints and job-run actions are rejected with 403, regardless of the scopes attached. responses: '201': description: token created content: text/plain: schema: type: string /users/tokens/impersonate: post: summary: create token to impersonate a user (require superadmin) operationId: createTokenImpersonate tags: - user requestBody: description: new token required: true content: application/json: schema: type: object properties: &ref_416 label: type: string expiration: type: string format: date-time impersonate_email: type: string workspace_id: type: string required: &ref_417 - impersonate_email responses: '201': description: token created content: text/plain: schema: type: string /users/tokens/delete/{token_prefix}: delete: summary: delete token operationId: deleteToken tags: - user parameters: - name: token_prefix in: path required: true schema: type: string responses: '200': description: delete token content: text/plain: schema: type: string /users/tokens/update_scopes/{token_prefix}: post: summary: update scopes of an existing token (owner only) operationId: updateTokenScopes tags: - user parameters: - name: token_prefix in: path required: true schema: type: string requestBody: description: new scopes (null or omitted = full access) required: true content: application/json: schema: type: object properties: scopes: type: array items: type: string nullable: true responses: '200': description: scopes updated content: text/plain: schema: type: string /users/tokens/list: get: summary: list token operationId: listTokens tags: - user parameters: - name: exclude_ephemeral in: query schema: type: boolean - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: truncated token content: application/json: schema: type: array items: type: object properties: &ref_102 label: type: string expiration: type: string format: date-time token_prefix: type: string created_at: type: string format: date-time last_used_at: type: string format: date-time scopes: type: array items: type: string email: type: string workspace_id: type: string read_only: type: boolean required: &ref_103 - token_prefix - created_at - last_used_at - read_only /w/{workspace}/oidc/token/{audience}: post: summary: get OIDC token (ee only) operationId: getOidcToken tags: - oidc parameters: - name: workspace in: path required: true 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 content: text/plain: schema: type: string /w/{workspace}/variables/create: post: summary: create variable operationId: createVariable x-mcp-tool: true tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: already_encrypted description: whether the variable is already encrypted (default false) in: query schema: type: boolean requestBody: description: new variable required: true content: application/json: schema: type: object properties: &ref_420 path: type: string description: The path to the variable value: type: string description: The value of the variable is_secret: type: boolean description: Whether the variable is a secret description: type: string description: The description of the variable account: type: integer description: The account identifier is_oauth: type: boolean description: Whether the variable is an OAuth variable expires_at: type: string description: The expiration date of the variable format: date-time labels: type: array items: type: string ws_specific: type: boolean required: &ref_421 - path - value - is_secret - description responses: '201': description: variable created content: text/plain: schema: type: string /w/{workspace}/variables/encrypt: post: summary: encrypt value operationId: encryptValue tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new variable required: true content: application/json: schema: type: string responses: '200': description: encrypted value content: text/plain: schema: type: string /w/{workspace}/variables/delete/{path}: delete: summary: delete variable operationId: deleteVariable x-mcp-tool: true tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: variable deleted content: text/plain: schema: type: string /w/{workspace}/variables/delete_bulk: delete: summary: delete variables in bulk operationId: deleteVariablesBulk tags: - variable parameters: - 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 operationId: updateVariable x-mcp-tool: true tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: already_encrypted description: whether the variable is already encrypted (default false) in: query schema: type: boolean requestBody: description: updated variable required: true content: application/json: schema: type: object properties: &ref_422 path: type: string description: The path to the variable value: type: string description: The new value of the variable is_secret: type: boolean description: Whether the variable is a secret description: type: string description: The new description of the variable labels: type: array items: type: string ws_specific: type: boolean responses: '200': description: variable updated content: text/plain: schema: type: string /w/{workspace}/variables/get/{path}: get: summary: get variable operationId: getVariable x-mcp-tool: true tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: decrypt_secret description: | ask to decrypt secret if this variable is secret (if not secret no effect, default: true) in: query schema: type: boolean - name: include_encrypted description: > ask to include the encrypted value if secret and decrypt secret is not true (default: false) in: query schema: type: boolean responses: '200': description: variable content: application/json: schema: type: object properties: &ref_61 workspace_id: type: string path: type: string value: type: string is_secret: type: boolean description: type: string account: type: integer is_oauth: type: boolean extra_perms: type: object additionalProperties: type: boolean is_expired: type: boolean refresh_error: type: string is_linked: type: boolean is_refreshed: type: boolean expires_at: type: string format: date-time labels: type: array items: type: string ws_specific: type: boolean edited_at: type: string format: date-time edited_by: type: string required: &ref_62 - workspace_id - path - is_secret - extra_perms /w/{workspace}/variables/get_value/{path}: get: summary: get variable value operationId: getVariableValue tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: allow_cache description: | allow getting a cached value for improved performance in: query schema: type: boolean responses: '200': description: variable content: application/json: schema: type: string /w/{workspace}/variables/exists/{path}: get: summary: does variable exists at path operationId: existsVariable tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: variable content: application/json: schema: type: boolean /w/{workspace}/variables/list: get: summary: list variables operationId: listVariable x-mcp-tool: true tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 - name: path_start description: filter variables by path prefix in: query schema: type: string - name: path description: exact path match filter in: query schema: type: string - name: description description: pattern match filter for description field (case-insensitive) in: query schema: type: string - name: value description: >- pattern match filter for non-secret variable values (case-insensitive) in: query schema: type: string - name: broad_filter description: >- broad search across multiple fields (case-insensitive substring match) in: query schema: type: string - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: label description: Filter by label in: query required: false schema: type: string responses: '200': description: variable list content: application/json: schema: type: array items: type: object properties: *ref_61 required: *ref_62 /w/{workspace}/variables/list_contextual: get: summary: list contextual variables operationId: listContextualVariables tags: - variable parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: contextual variable list content: application/json: schema: type: array items: type: object properties: &ref_418 name: type: string value: type: string description: type: string is_custom: type: boolean required: &ref_419 - name - value - description - is_custom /w/{workspace}/workspaces/get_secondary_storage_names: get: summary: get secondary storage names operationId: getSecondaryStorageNames tags: - setting parameters: - name: workspace in: path required: true 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 content: application/json: schema: type: array items: type: string /w/{workspace}/workspaces/critical_alerts: get: summary: Get all critical alerts for this workspace operationId: workspaceGetCriticalAlerts tags: - setting parameters: - name: workspace in: path required: true schema: *ref_4 - in: query name: page schema: type: integer default: 1 description: The page number to retrieve (minimum value is 1) - in: query name: page_size schema: type: integer default: 10 maximum: 100 description: Number of alerts per page (maximum is 100) - in: query name: acknowledged schema: type: boolean nullable: true description: >- Filter by acknowledgment status; true for acknowledged, false for unacknowledged, and omit for all alerts responses: '200': description: Successfully retrieved all critical alerts content: application/json: schema: type: object properties: alerts: type: array items: type: object properties: *ref_63 total_rows: type: integer description: Total number of rows matching the query. example: 100 total_pages: type: integer description: Total number of pages based on the page size. example: 10 /w/{workspace}/workspaces/critical_alerts/{id}/acknowledge: post: summary: Acknowledge a critical alert for this workspace operationId: workspaceAcknowledgeCriticalAlert tags: - setting parameters: - name: workspace in: path required: true schema: *ref_4 - in: path name: id required: true schema: type: integer description: The ID of the critical alert to acknowledge responses: '200': description: Successfully acknowledged the critical alert content: application/json: schema: type: string example: Critical alert acknowledged /w/{workspace}/workspaces/critical_alerts/acknowledge_all: post: summary: Acknowledge all unacknowledged critical alerts for this workspace operationId: workspaceAcknowledgeAllCriticalAlerts tags: - setting parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: Successfully acknowledged all unacknowledged critical alerts. content: application/json: schema: type: string example: All unacknowledged critical alerts acknowledged /w/{workspace}/workspaces/critical_alerts/mute: post: summary: Mute critical alert UI for this workspace operationId: workspaceMuteCriticalAlertsUI tags: - setting parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Boolean flag to mute critical alerts. required: true content: application/json: schema: type: object properties: mute_critical_alerts: type: boolean description: Whether critical alerts should be muted. example: true responses: '200': description: Successfully updated mute critical alert settings. content: application/json: schema: type: string example: >- Updated mute critical alert UI settings for workspace: workspace_id /w/{workspace}/workspaces/protection_rules: get: summary: list all protection rules for a workspace operationId: listProtectionRules tags: - workspace parameters: - 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_565 - name - rules - bypass_groups - bypass_users properties: &ref_566 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_64 type: string enum: &ref_567 - DisableDirectDeployment - DisableWorkspaceForking - RestrictDeployToDeployers bypass_groups: type: array description: Groups that can bypass this ruleset items: &ref_65 type: string bypass_users: type: array description: Users that can bypass this ruleset items: &ref_66 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_64 bypass_groups: type: array description: Groups that can bypass this ruleset items: *ref_65 bypass_users: type: array description: Users that can bypass this ruleset items: *ref_66 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_64 bypass_groups: type: array description: Groups that can bypass this ruleset items: *ref_65 bypass_users: type: array description: Users that can bypass this ruleset items: *ref_66 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}/deployment_request/eligible_deployers: get: summary: list users eligible to be deployment request assignees description: >- Returns admins and members of wm_deployers in the parent workspace of the fork at `{workspace}`. operationId: listDeploymentRequestEligibleDeployers tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of eligible deployers content: application/json: schema: type: array items: type: object required: &ref_568 - username - email - is_admin properties: &ref_569 username: type: string email: type: string is_admin: type: boolean /w/{workspace}/deployment_request/open: get: summary: get the currently open deployment request for this fork operationId: getOpenDeploymentRequest tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: the open request or null if none exists content: application/json: schema: nullable: true allOf: - type: object required: &ref_67 - id - source_workspace_id - fork_workspace_id - requested_by - requested_by_email - requested_at - assignees - comments properties: &ref_68 id: type: integer format: int64 source_workspace_id: type: string fork_workspace_id: type: string requested_by: type: string requested_by_email: type: string requested_at: type: string format: date-time assignees: type: array items: type: object required: &ref_570 - username - email properties: &ref_571 username: type: string email: type: string comments: type: array items: type: object required: &ref_69 - id - author - author_email - body - obsolete - created_at properties: &ref_70 id: type: integer format: int64 parent_id: type: integer format: int64 nullable: true author: type: string author_email: type: string body: type: string anchor_kind: type: string nullable: true anchor_path: type: string nullable: true obsolete: type: boolean created_at: type: string format: date-time /w/{workspace}/deployment_request: post: summary: create a new deployment request operationId: createDeploymentRequest tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - assignees properties: assignees: type: array items: type: string description: >- Usernames in the parent workspace. Must be admin or wm_deployers. responses: '200': description: request created content: application/json: schema: type: object required: *ref_67 properties: *ref_68 '400': description: invalid assignees '409': description: a deployment request is already open for this fork /w/{workspace}/deployment_request/{id}/cancel: post: summary: cancel an open deployment request operationId: cancelDeploymentRequest tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: cancelled content: text/plain: schema: type: string /w/{workspace}/deployment_request/{id}/close_merged: post: summary: close a deployment request after a successful merge description: >- Called by the UI after the deploy loop completes. Closes the request and marks every comment obsolete. Idempotent. operationId: closeDeploymentRequestMerged tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: closed content: text/plain: schema: type: string /w/{workspace}/deployment_request/{id}/comment: post: summary: append a comment to an open deployment request operationId: createDeploymentRequestComment tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: type: integer format: int64 requestBody: required: true content: application/json: schema: type: object required: - body properties: body: type: string parent_id: type: integer format: int64 nullable: true anchor_kind: type: string nullable: true anchor_path: type: string nullable: true responses: '200': description: comment created content: application/json: schema: type: object required: *ref_69 properties: *ref_70 '400': description: invalid input or request closed /w/{workspace}/workspaces/log_chat: post: summary: log AI chat message operationId: logAiChat tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - session_id - provider - model - mode properties: session_id: type: string provider: type: string model: type: string mode: type: string responses: '204': description: logged /w/{workspace}/workspaces/cloud_quotas: get: summary: get cloud quota usage and limits for workspace operationId: getCloudQuotas tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: cloud quota usage and limits content: application/json: schema: type: object properties: scripts: type: object properties: &ref_71 used: type: integer limit: type: integer prunable: type: integer required: &ref_72 - used - limit - prunable flows: type: object properties: *ref_71 required: *ref_72 apps: type: object properties: *ref_71 required: *ref_72 variables: type: object properties: *ref_71 required: *ref_72 resources: type: object properties: *ref_71 required: *ref_72 required: - scripts - flows - apps - variables - resources /w/{workspace}/workspaces/prune_versions: post: summary: prune old versions of scripts, flows, or apps operationId: pruneVersions tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: resource_type: type: string enum: - scripts - flows - apps required: - resource_type responses: '200': description: number of pruned versions content: application/json: schema: type: object properties: pruned: type: integer required: - pruned /w/{workspace}/workspaces/list_ws_specific: get: summary: list all workspace-specific items operationId: listWsSpecific tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of workspace-specific items content: application/json: schema: type: array items: type: object properties: item_kind: type: string path: type: string required: - item_kind - path /w/{workspace}/workspaces/list_ws_specific_versions: get: summary: list workspace ids that have a version of the given item operationId: listWsSpecificVersions tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: query required: true schema: type: string enum: - resource - variable - name: path in: query required: true schema: type: string responses: '200': description: list of workspace ids that have a version of the item content: application/json: schema: type: array items: type: string /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: [] summary: login with oauth authorization flow operationId: loginWithOauth tags: - user parameters: - name: client_name in: path required: true schema: &ref_73 type: string requestBody: description: Partially filled script required: true content: application/json: schema: type: object properties: code: type: string state: type: string responses: '200': description: > Successfully authenticated. The session ID is returned in a cookie named `token` and as plaintext response. Preferred method of authorization is through the bearer token. The cookie is only for browser convenience. headers: Set-Cookie: schema: type: string example: token=abcde12345; Path=/; HttpOnly content: text/plain: schema: type: string /w/{workspace}/oauth/connect_slack_callback: post: summary: connect slack callback operationId: connectSlackCallback tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: code endpoint required: true content: application/json: schema: type: object properties: code: type: string state: type: string required: - code - state responses: '200': description: slack token content: text/plain: schema: type: string /oauth/connect_slack_callback: post: summary: connect slack callback instance operationId: connectSlackCallbackInstance tags: - oauth requestBody: description: code endpoint required: true content: application/json: schema: type: object properties: code: type: string state: type: string required: - code - state responses: '200': description: success message content: text/plain: schema: type: string /oauth/connect_slack_instance: post: summary: connect slack instance (non-interactive; pre-minted bot token) operationId: connectSlackInstance tags: - oauth requestBody: description: connect slack at the instance level with a pre-minted bot token required: true content: application/json: schema: type: object required: - bot_token - team_id - team_name properties: bot_token: type: string description: xoxb-... bot token obtained at api.slack.com/apps team_id: type: string team_name: type: string responses: '200': description: status /oauth/connect_callback/{client_name}: post: summary: connect callback operationId: connectCallback tags: - oauth parameters: - name: client_name in: path required: true schema: *ref_73 requestBody: description: code endpoint required: true content: application/json: schema: type: object properties: code: type: string state: type: string required: - code - state responses: '200': description: oauth token content: application/json: schema: type: object properties: &ref_74 access_token: type: string expires_in: type: integer refresh_token: type: string scope: type: array items: type: string grant_type: type: string required: &ref_75 - access_token /w/{workspace}/oauth/create_account: post: summary: create OAuth account operationId: createAccount tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: code endpoint required: true content: application/json: schema: type: object properties: refresh_token: type: string description: >- OAuth refresh token. For authorization_code flow, this contains the actual refresh token. For client_credentials flow, this must be set to an empty string. expires_in: type: integer client: type: string grant_type: type: string default: authorization_code cc_client_id: type: string description: >- OAuth client ID for resource-level credentials (client_credentials flow only) cc_client_secret: type: string description: >- OAuth client secret for resource-level credentials (client_credentials flow only) cc_token_url: type: string description: >- OAuth token URL override for resource-level authentication (client_credentials flow only) mcp_server_url: type: string description: MCP server URL for MCP OAuth token refresh scopes: type: array items: type: string description: >- OAuth scopes to use for token refresh. Overrides instance-level scopes. required: - refresh_token - expires_in - client responses: '200': description: account set content: text/plain: schema: type: string /oauth/connect_client_credentials/{client}: post: summary: connect OAuth using client credentials operationId: connectClientCredentials tags: - oauth parameters: - name: client in: path description: OAuth client name required: true schema: type: string requestBody: description: client credentials flow parameters required: true content: application/json: schema: type: object properties: scopes: type: array items: type: string cc_client_id: type: string description: OAuth client ID for resource-level authentication cc_client_secret: type: string description: OAuth client secret for resource-level authentication cc_token_url: type: string description: OAuth token URL override for resource-level authentication required: - cc_client_id - cc_client_secret responses: '200': description: OAuth token response content: application/json: schema: type: object properties: *ref_74 required: *ref_75 /w/{workspace}/oauth/refresh_token/{id}: post: summary: refresh token operationId: refreshToken tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: &ref_76 type: integer requestBody: description: variable path required: true content: application/json: schema: type: object properties: path: type: string required: - path responses: '200': description: token refreshed content: text/plain: schema: type: string /w/{workspace}/oauth/disconnect/{id}: post: summary: disconnect account operationId: disconnectAccount tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_76 responses: '200': description: disconnected client content: text/plain: schema: type: string /w/{workspace}/oauth/disconnect_slack: post: summary: disconnect slack operationId: disconnectSlack tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: disconnected slack content: text/plain: schema: type: string /w/{workspace}/oauth/disconnect_teams: post: summary: disconnect teams operationId: disconnectTeams tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: disconnected teams content: text/plain: schema: type: string /oauth/list_logins: get: summary: list oauth logins operationId: listOAuthLogins tags: - oauth responses: '200': description: list of oauth and saml login clients content: application/json: schema: type: object properties: oauth: type: array items: type: object properties: type: type: string display_name: type: string required: - type saml: type: string auto_login: type: string description: >- provider type to auto-redirect to on login (oauth key or "saml") required: - oauth /oauth/list_connects: get: summary: list oauth connects operationId: listOAuthConnects tags: - oauth responses: '200': description: list of oauth connects clients content: application/json: schema: type: array items: type: string /oauth/get_connect/{client}: get: summary: get oauth connect operationId: getOAuthConnect tags: - oauth parameters: - name: client description: client name in: path required: true schema: type: string responses: '200': description: get content: application/json: schema: type: object properties: extra_params: type: object scopes: type: array items: type: string grant_types: type: array items: type: string /teams/activities: post: summary: send update to Microsoft Teams activity description: Respond to a Microsoft Teams activity after a workspace command is run operationId: sendMessageToConversation tags: - teams requestBody: required: true content: application/json: schema: type: object required: - conversation_id - text properties: conversation_id: type: string description: The ID of the Teams conversation/activity success: type: boolean description: Used for styling the card conditionally default: true text: type: string description: The message text to be sent in the Teams card card_block: type: object description: The card block to be sent in the Teams card responses: '200': description: Activity processed successfully /w/{workspace}/resources/create: post: summary: create resource operationId: createResource x-mcp-tool: true tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: update_if_exists description: update the resource if it already exists (default false) in: query schema: type: boolean requestBody: description: new resource required: true content: application/json: schema: type: object properties: &ref_427 path: type: string description: The path to the resource value: {} description: type: string description: The description of the resource resource_type: type: string description: The resource_type associated with the resource labels: type: array items: type: string ws_specific: type: boolean required: &ref_428 - path - value - resource_type responses: '201': description: resource created content: text/plain: schema: type: string /w/{workspace}/resources/delete/{path}: delete: summary: delete resource operationId: deleteResource x-mcp-tool: true tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: resource deleted content: text/plain: schema: type: string /w/{workspace}/resources/delete_bulk: delete: summary: delete resources in bulk operationId: deleteResourcesBulk tags: - resource parameters: - 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 operationId: updateResource x-mcp-tool: true tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated resource required: true content: application/json: schema: type: object properties: &ref_429 path: type: string description: The path to the resource description: type: string description: The new description of the resource value: {} resource_type: type: string description: The new resource_type to be associated with the resource labels: type: array items: type: string ws_specific: type: boolean responses: '200': description: resource updated content: text/plain: schema: type: string /w/{workspace}/resources/update_value/{path}: post: summary: update resource value operationId: updateResourceValue tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated resource required: true content: application/json: schema: type: object properties: value: {} responses: '200': description: resource value updated content: text/plain: schema: type: string /w/{workspace}/resources/get/{path}: get: summary: get resource operationId: getResource x-mcp-tool: true tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: resource content: application/json: schema: type: object properties: &ref_430 workspace_id: type: string path: type: string description: type: string resource_type: type: string value: {} is_oauth: type: boolean extra_perms: type: object additionalProperties: type: boolean created_by: type: string edited_at: type: string format: date-time labels: type: array items: type: string ws_specific: type: boolean required: &ref_431 - path - resource_type - is_oauth /w/{workspace}/resources/get_value_interpolated/{path}: get: summary: get resource interpolated (variables and resources are fully unrolled) operationId: getResourceValueInterpolated tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: job_id description: job id in: query schema: type: string format: uuid - name: allow_cache description: allow getting a cached value for improved performance in: query schema: type: boolean responses: '200': description: resource value content: application/json: schema: {} /w/{workspace}/resources/get_value/{path}: get: summary: get resource value operationId: getResourceValue tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 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_60 - name: git_ssh_identity in: query schema: type: string responses: '200': description: git commit hash content: application/json: schema: type: object properties: commit_hash: type: string description: Latest commit hash from git ls-remote required: - commit_hash /w/{workspace}/resources/exists/{path}: get: summary: does resource exists operationId: existsResource tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: does resource exists content: application/json: schema: type: boolean /w/{workspace}/resources/list: get: summary: list resources operationId: listResource x-mcp-tool: true tags: - resource parameters: - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: resource_type description: resource_types to list from, separated by ',', in: query schema: type: string - name: resource_type_exclude description: resource_types to not list from, separated by ',', in: query schema: type: string - name: path_start description: filter resources by path prefix in: query schema: type: string - name: path description: exact path match filter in: query schema: type: string - name: description description: pattern match filter for description field (case-insensitive) in: query schema: type: string - name: value description: JSONB subset match filter using base64 encoded JSON in: query schema: type: string - name: broad_filter description: >- broad search across multiple fields (case-insensitive substring match) in: query schema: type: string - name: label description: Filter by label in: query required: false schema: type: string responses: '200': description: resource list content: application/json: schema: type: array items: type: object properties: &ref_432 workspace_id: type: string path: type: string description: type: string resource_type: type: string value: {} is_oauth: type: boolean extra_perms: type: object additionalProperties: type: boolean is_expired: type: boolean refresh_error: type: string is_linked: type: boolean is_refreshed: type: boolean account: type: number created_by: type: string edited_at: type: string format: date-time labels: type: array items: type: string ws_specific: type: boolean required: &ref_433 - path - resource_type - is_oauth - is_linked - is_refreshed /w/{workspace}/resources/list_search: get: summary: list resources for search operationId: listSearchResource tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: resource list content: application/json: schema: type: array items: type: object properties: path: type: string value: {} required: - path - value /w/{workspace}/resources/mcp_tools/{path}: get: summary: get MCP tools from resource operationId: getMcpTools tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: list of MCP tools content: application/json: schema: type: array items: type: object properties: name: type: string description: type: string parameters: type: object required: - name - parameters /w/{workspace}/resources/list_names/{name}: get: summary: list resource names operationId: listResourceNames tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: &ref_273 type: string responses: '200': description: resource list names content: application/json: schema: type: array items: type: object properties: name: type: string path: type: string required: - name - path /w/{workspace}/resources/type/create: post: summary: create resource_type operationId: createResourceType tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new resource_type required: true content: application/json: schema: type: object properties: &ref_77 workspace_id: type: string name: type: string schema: {} description: type: string created_by: type: string edited_at: type: string format: date-time format_extension: type: string is_fileset: type: boolean required: &ref_78 - name responses: '201': description: resource_type created content: text/plain: schema: type: string /w/{workspace}/resources/file_resource_type_to_file_ext_map: get: summary: get map from resource type to format extension operationId: fileResourceTypeToFileExtMap tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: map from resource type to file resource info content: application/json: schema: type: object additionalProperties: type: object properties: format_extension: type: string nullable: true is_fileset: type: boolean /w/{workspace}/resources/type/delete/{path}: delete: summary: delete resource_type operationId: deleteResourceType tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: resource_type deleted content: text/plain: schema: type: string /w/{workspace}/resources/type/update/{path}: post: summary: update resource_type operationId: updateResourceType tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated resource_type required: true content: application/json: schema: type: object properties: &ref_434 schema: {} description: type: string is_fileset: type: boolean responses: '200': description: resource_type updated content: text/plain: schema: type: string /w/{workspace}/resources/type/get/{path}: get: summary: get resource_type operationId: getResourceType tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: resource_type deleted content: application/json: schema: type: object properties: *ref_77 required: *ref_78 /w/{workspace}/resources/type/exists/{path}: get: summary: does resource_type exists operationId: existsResourceType tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: does resource_type exist content: application/json: schema: type: boolean /w/{workspace}/resources/type/list: get: summary: list resource_types operationId: listResourceType x-mcp-tool: true tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: resource_type list content: application/json: schema: type: array items: type: object properties: *ref_77 required: *ref_78 /w/{workspace}/resources/type/listnames: get: summary: list resource_types names operationId: listResourceTypeNames tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: resource_type list content: application/json: schema: type: array items: type: string /w/{workspace}/npm_proxy/metadata/{package}: get: summary: get npm package metadata from private registry operationId: getNpmPackageMetadata tags: - npm_proxy parameters: - 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 operationId: queryResourceTypes tags: - resource parameters: - name: workspace in: path required: true schema: *ref_4 - name: text description: query text in: query required: true schema: type: string - name: limit description: query limit in: query required: false schema: type: number responses: '200': description: resource type details content: application/json: schema: type: array items: type: object properties: name: type: string score: type: number schema: {} required: - name - score /integrations/hub/list: get: summary: list hub integrations operationId: listHubIntegrations tags: - integration parameters: - name: kind description: query integrations kind in: query required: false schema: type: string responses: '200': description: integrations details content: application/json: schema: type: array items: type: object properties: name: type: string required: - name /flows/hub/list: get: summary: list all hub flows operationId: listHubFlows tags: - flow responses: '200': description: hub flows list content: application/json: schema: type: object properties: flows: type: array items: type: object properties: id: type: number flow_id: type: number summary: type: string apps: type: array items: type: string approved: type: boolean votes: type: number required: - id - flow_id - summary - apps - approved - votes /flows/hub/get/{id}: get: summary: get hub flow by id operationId: getHubFlowById tags: - flow parameters: - name: id in: path required: true schema: *ref_79 responses: '200': description: flow content: application/json: schema: type: object properties: flow: type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: &ref_120 summary: type: string description: Short description of what this flow does description: type: string description: Detailed documentation for this flow value: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: &ref_610 modules: type: array description: >- Array of steps that execute in sequence. Each step can be a script, subflow, loop, or branch items: type: object description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: &ref_82 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: description: >- The actual implementation of a flow step. Can be a script (inline or referenced), subflow, loop, branch, or special module type oneOf: &ref_88 - 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: &ref_323 input_transforms: type: object description: >- Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments additionalProperties: 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_80 - type: object description: >- Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource' properties: &ref_136 value: description: >- The static value. For resources, use format '$res:path/to/resource' type: type: string enum: - static required: &ref_137 - type - 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_84 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_85 - expr - type - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: &ref_86 type: type: string enum: - ai required: &ref_87 - type discriminator: &ref_81 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 - python3 - go - bash - powershell - postgresql - mysql - bigquery - snowflake - mssql - oracledb - graphql - nativets - php - rust - ansible - csharp - nu - java - ruby - rlang - duckdb path: type: string description: Optional path for saving this script lock: type: string description: Lock file content for dependencies type: type: string enum: - rawscript tag: type: string description: Worker group tag for execution routing concurrent_limit: type: number description: >- Maximum concurrent executions of this script concurrency_time_window_s: type: number description: Time window for concurrent_limit custom_concurrency_key: type: string description: >- Custom key for grouping concurrent executions is_trigger: type: boolean description: >- If true, this script is a trigger that can start the flow assets: type: array description: >- External resources this script accesses (S3 objects, resources, etc.) items: type: object required: - path - kind properties: path: type: string description: Path to the asset kind: type: string description: Type of asset enum: - s3object - resource - ducklake - datatable - volume 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_324 - type - content - language - input_transforms - type: object description: >- Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code properties: &ref_325 input_transforms: type: object description: >- Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments additionalProperties: 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_80 discriminator: *ref_81 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: &ref_326 - type - path - input_transforms - type: object description: >- Reference to an existing flow by path. Use this to call another flow as a subflow properties: &ref_327 input_transforms: type: object description: >- Map of parameter names to their values (static or JavaScript expressions). These become the subflow's input arguments additionalProperties: 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_80 discriminator: *ref_81 path: type: string description: >- Path to the flow in the workspace (e.g., 'f/flows/process_user') type: type: string enum: - flow required: &ref_328 - type - path - input_transforms - 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: &ref_329 modules: type: array description: >- Steps to execute for each iteration. These can reference the iteration value via 'flow_input.iter.value' items: type: object description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: &ref_83 - value - id iterator: 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_80 discriminator: *ref_81 skip_failures: type: boolean description: >- If true, iteration failures don't stop the loop. Failed iterations return null type: type: string enum: - forloopflow parallel: type: boolean description: >- If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency parallelism: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_80 discriminator: *ref_81 squash: type: boolean required: &ref_330 - modules - iterator - skip_failures - type - 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: &ref_331 modules: type: array description: >- Steps to execute in each iteration. Use stop_after_if to control when the loop ends items: type: object description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 skip_failures: type: boolean description: >- If true, iteration failures don't stop the loop. Failed iterations return null type: type: string enum: - whileloopflow parallel: type: boolean description: >- If true, iterations run concurrently (use with caution in while loops) parallelism: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_80 discriminator: *ref_81 squash: type: boolean required: &ref_332 - modules - skip_failures - type - 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_333 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 description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 required: - modules - expr default: type: array description: >- Steps to execute if no branch expressions match items: type: object description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 type: type: string enum: - branchone required: &ref_334 - branches - default - type - 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_335 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 description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 required: - modules type: type: string enum: - branchall parallel: type: boolean description: >- If true, all branches execute concurrently. If false, they execute sequentially required: &ref_336 - branches - type - type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: &ref_337 type: type: string enum: - identity flow: type: boolean description: >- If true, marks this as a flow identity (special handling) required: &ref_338 - type - 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_339 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_341 - type: object description: >- Static provider configuration passed directly to the AI agent properties: &ref_595 value: type: object description: >- Complete AI provider configuration with resource reference and model selection properties: &ref_593 kind: type: string description: Supported AI provider types enum: &ref_316 - 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_594 - kind - resource - model type: type: string enum: - static required: &ref_596 - 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_84 required: *ref_85 - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: *ref_86 required: *ref_87 discriminator: &ref_342 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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_343 - type: object description: >- Static memory configuration passed directly to the AI agent properties: &ref_601 value: description: Conversation memory configuration oneOf: &ref_599 - type: object description: No conversation memory/context properties: &ref_317 kind: type: string enum: - 'off' required: &ref_318 - kind - type: object description: Automatic context management properties: &ref_319 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_320 - kind - type: object description: Explicit message history properties: &ref_321 kind: type: string enum: - manual messages: type: array items: type: object description: A single message in conversation history properties: &ref_597 role: type: string enum: - user - assistant - system content: type: string required: &ref_598 - role - content required: &ref_322 - kind - messages discriminator: &ref_600 propertyName: kind mapping: 'off': '#/components/schemas/MemoryOff' auto: '#/components/schemas/MemoryAuto' manual: '#/components/schemas/MemoryManual' type: type: string enum: - static required: &ref_602 - 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_84 required: *ref_85 - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: *ref_86 required: *ref_87 discriminator: &ref_344 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_80 discriminator: *ref_81 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_attachments: 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_80 discriminator: *ref_81 description: > Array of file references (images or PDFs) for the AI agent. Format: Array<{ bucket: string, key: string }> - S3 object references Example: [{ bucket: 'my-bucket', key: 'documents/report.pdf' }] 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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 max_iterations: 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_80 discriminator: *ref_81 description: > Number. Limits how many times the agent can loop through reasoning and tool use. Range: 1-1000. 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_345 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_608 - description: >- A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module allOf: &ref_603 - 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_88 discriminator: &ref_89 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_604 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_605 - 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_606 tool_type: type: string enum: - websearch required: &ref_607 - tool_type discriminator: &ref_609 propertyName: tool_type mapping: flowmodule: '#/components/schemas/FlowModuleTool' mcp: '#/components/schemas/McpToolValue' websearch: '#/components/schemas/WebsearchToolValue' required: &ref_346 - id - value type: type: string enum: - aiagent omit_output_from_conversation: type: boolean default: false description: >- If true, this AI agent step does not persist its assistant or tool messages to the flow conversation when chat mode is enabled. parallel: type: boolean description: >- If true, the agent can execute multiple tool calls in parallel required: &ref_340 - tools - type - input_transforms discriminator: *ref_89 stop_after_if: description: Early termination condition for a module type: object properties: &ref_90 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 nullable: true description: >- Custom error message when stopping with an error. Mutually exclusive with skip_if_stopped. If set to a non-empty string, the flow stops with this error. If empty string, a default error message is used. If null or omitted, no error is raised. required: &ref_91 - expr stop_after_all_iters_if: description: Early termination condition for a module type: object properties: *ref_90 required: *ref_91 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: 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_80 discriminator: *ref_81 cache_ttl: type: number description: >- Cache duration in seconds for this step's results cache_ignore_s3_path: type: boolean timeout: 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_80 discriminator: *ref_81 delete_after_secs: type: integer description: >- If set, delete the step's args, result and logs after this many seconds following job completion summary: type: string description: Short description of what this step does mock: type: object description: >- Mock configuration for testing without executing the actual step properties: enabled: type: boolean description: >- If true, return mock value instead of executing return_value: description: Value to return when mocked suspend: type: object description: >- Configuration for approval/resume steps that wait for user input properties: required_events: type: integer description: >- Number of approvals required before continuing timeout: type: integer description: >- Timeout in seconds before auto-continuing or canceling resume_form: type: object description: >- Form schema for collecting input when resuming properties: schema: type: object description: JSON Schema for the resume form user_auth_required: type: boolean description: >- If true, only authenticated users can approve user_groups_required: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_80 discriminator: *ref_81 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_315 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_195 expr: type: string description: >- JavaScript expression that returns true to retry. Has access to 'result' and 'error' variables required: &ref_196 - expr debouncing: description: >- Debounce configuration for this step (EE only) type: object properties: debounce_delay_s: type: integer description: >- Delay in seconds to debounce this step's executions across flow runs debounce_key: type: string description: >- Expression to group debounced executions. Supports $workspace and $args[name]. Default: $workspace/flow/- debounce_args_to_accumulate: type: array description: >- Array-type arguments to accumulate across debounced executions items: type: string max_total_debouncing_time: type: integer description: >- Maximum total time in seconds before forced execution max_total_debounces_amount: type: integer description: >- Maximum number of debounces before forced execution required: *ref_83 failure_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_82 required: *ref_83 preprocessor_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_82 required: *ref_83 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: integer 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: integer description: >- Maximum total time in seconds that a job can be debounced max_total_debounces_amount: type: integer 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 delete_after_secs: type: integer description: >- If set, delete the flow job's args, result and logs after this many seconds following job completion flow_env: type: object description: >- Environment variables available to all steps. Values can be strings, JSON values, or special references: '$var:path' (workspace variable) or '$res:path' (resource). additionalProperties: {} priority: type: number description: Execution priority (higher numbers run first) early_return: type: string description: >- JavaScript expression to return early from the flow chat_input_enabled: type: boolean description: Whether this flow accepts chat-style input notes: type: array description: Sticky notes attached to the flow items: type: object description: >- A sticky note attached to a flow for documentation and annotation properties: &ref_145 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_146 - id - text - color - type groups: type: array description: >- Semantic groups of modules for organizational purposes items: type: object description: >- A semantic group of flow modules for organizational purposes. Does not affect execution — modules remain in their original position in the flow. Groups provide naming and collapsibility in the editor. Members are computed dynamically from all nodes on paths between start_id and end_id. properties: &ref_147 summary: type: string description: Display name for this group note: type: string description: Markdown note shown below the group header autocollapse: type: boolean default: false description: >- If true, this group is collapsed by default in the flow editor. UI hint only. start_id: type: string description: >- ID of the first flow module in this group (topological entry point) end_id: type: string description: >- ID of the last flow module in this group (topological exit point) color: type: string description: Color for the group in the flow editor required: &ref_148 - start_id - end_id required: &ref_611 - modules schema: type: object description: >- JSON Schema for flow inputs. Use this to define input parameters, their types, defaults, and validation. For resource inputs, set type to 'object' and format to 'resource-' (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_121 - summary - value /apps/hub/list: get: summary: list all hub apps operationId: listHubApps tags: - app responses: '200': description: hub apps list content: application/json: schema: type: object properties: apps: type: array items: type: object properties: id: type: number app_id: type: number summary: type: string apps: type: array items: type: string approved: type: boolean votes: type: number required: - id - app_id - summary - apps - approved - votes /apps/hub/get/{id}: get: summary: get hub app by id operationId: getHubAppById tags: - app parameters: - name: id in: path required: true schema: *ref_79 responses: '200': description: app content: application/json: schema: type: object properties: app: type: object properties: summary: type: string value: {} required: - summary - value required: - app /apps/hub/get_raw/{id}: get: summary: get hub raw app by id operationId: getHubRawAppById tags: - app parameters: - name: id in: path required: true schema: *ref_79 responses: '200': description: raw app content: application/json: schema: type: object properties: app: type: object properties: summary: type: string value: {} required: - summary - value required: - app /apps_u/public_app_by_custom_path/{custom_path}: get: summary: get public app by custom path operationId: getPublicAppByCustomPath tags: - app parameters: - name: custom_path in: path required: true schema: &ref_133 type: string responses: '200': description: app details content: application/json: schema: allOf: - type: object properties: &ref_128 id: type: integer workspace_id: type: string path: type: string summary: type: string versions: type: array items: type: integer created_by: type: string created_at: type: string format: date-time value: {} policy: type: object properties: &ref_127 triggerables: type: object additionalProperties: type: object triggerables_v2: type: object additionalProperties: type: object s3_inputs: type: array items: type: object allowed_s3_keys: type: array items: type: object properties: s3_path: type: string resource: type: string execution_mode: type: string enum: - viewer - publisher - anonymous on_behalf_of: type: string on_behalf_of_email: type: string execution_mode: type: string enum: - viewer - publisher - anonymous extra_perms: type: object additionalProperties: type: boolean custom_path: type: string raw_app: type: boolean bundle_secret: type: string labels: type: array items: type: string default: [] required: &ref_129 - id - workspace_id - path - summary - versions - created_by - created_at - value - policy - execution_mode - extra_perms - raw_app - type: object properties: workspace_id: type: string /scripts/hub/get/{path}: get: summary: get hub script content by path operationId: getHubScriptContentByPath tags: - script parameters: - name: path in: path required: true schema: &ref_92 type: string responses: '200': description: script details content: text/plain: schema: type: string /scripts/hub/get_full/{path}: get: summary: get full hub script by path operationId: getHubScriptByPath tags: - script parameters: - name: path in: path required: true schema: *ref_92 responses: '200': description: script details content: application/json: schema: type: object properties: content: type: string lockfile: type: string schema: {} language: type: string summary: type: string required: - content - language /scripts/hub/pick/{path}: get: summary: record hub script pick operationId: pickHubScriptByPath tags: - script parameters: - name: path in: path required: true schema: *ref_92 responses: '200': description: script pick recorded content: application/json: schema: type: object properties: success: type: boolean required: - success /scripts/hub/top: get: summary: get top hub scripts operationId: getTopHubScripts tags: - script parameters: - name: limit description: query limit in: query required: false schema: type: number - name: app description: query scripts app in: query required: false schema: type: string - name: kind description: query scripts kind in: query required: false schema: type: string responses: '200': description: hub scripts list content: application/json: schema: type: object properties: asks: type: array items: type: object properties: id: type: number ask_id: type: number summary: type: string app: type: string version_id: type: number kind: type: string enum: &ref_93 - script - failure - trigger - approval votes: type: number views: type: number required: - id - ask_id - summary - app - version_id - kind - views - votes /embeddings/query_hub_scripts: get: summary: query hub scripts by similarity operationId: queryHubScripts tags: - script parameters: - name: text description: query text in: query required: true schema: type: string - name: kind description: query scripts kind in: query required: false schema: type: string - name: limit description: query limit in: query required: false schema: type: number - name: app description: query scripts app in: query required: false schema: type: string responses: '200': description: script details content: application/json: schema: type: array items: type: object properties: ask_id: type: number id: type: number version_id: type: number summary: type: string app: type: string kind: type: string enum: *ref_93 score: type: number required: - ask_id - id - version_id - summary - app - kind - score /w/{workspace}/scripts/list_search: get: summary: list scripts for search operationId: listSearchScript tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: script list content: application/json: schema: type: array items: type: object properties: path: type: string content: type: string required: - path - content /w/{workspace}/scripts/list: get: summary: list all scripts operationId: listScripts x-mcp-tool: true tags: - script parameters: - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: order_desc description: order by desc order (default true) in: query schema: &ref_118 type: boolean - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: &ref_119 type: string - name: path_start description: mask to filter matching starting path in: query schema: type: string - name: path_exact description: mask to filter exact matching path in: query schema: type: string - name: first_parent_hash description: mask to filter scripts whom first direct parent has exact hash in: query schema: type: string - name: last_parent_hash description: > mask to filter scripts whom last parent in the chain has exact hash. Beware that each script stores only a limited number of parents. Hence the last parent hash for a script is not necessarily its top-most parent. To find the top-most parent you will have to jump from last to last hash until finding the parent in: query schema: type: string - name: parent_hash description: > is the hash present in the array of stored parent hashes for this script. The same warning applies than for last_parent_hash. A script only store a limited number of direct parent in: query schema: type: string - name: show_archived description: > (default false) show only the archived files. when multiple archived hash share the same path, only the ones with the latest create_at are ed. in: query schema: type: boolean - name: include_without_main description: | (default false) include scripts without an exported main function in: query schema: type: boolean - name: include_draft_only description: | (default false) include scripts that have no deployed version in: query schema: type: boolean - name: is_template description: | (default regardless) if true show only the templates if false show only the non templates if not defined, show all regardless of if the script is a template in: query schema: type: boolean - name: kinds description: | (default regardless) script kinds to filter, split by comma in: query schema: type: string - name: starred_only description: | (default false) show only the starred items in: query schema: type: boolean - name: with_deployment_msg description: | (default false) include deployment message in: query schema: type: boolean - name: languages in: query description: | Filter to only include scripts written in the given languages. 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: All scripts content: application/json: schema: type: array items: type: object properties: &ref_99 workspace_id: type: string hash: type: string path: type: string parent_hashes: type: array description: > The first element is the direct parent of the script, the second is the parent of the first, etc items: type: string summary: type: string description: type: string content: type: string created_by: type: string created_at: type: string format: date-time archived: type: boolean schema: type: object deleted: type: boolean is_template: type: boolean extra_perms: type: object additionalProperties: type: boolean lock: type: string lock_error_logs: type: string language: type: string enum: &ref_94 - python3 - deno - go - bash - powershell - postgresql - mysql - bigquery - snowflake - mssql - oracledb - graphql - nativets - bun - php - rust - ansible - csharp - nu - java - ruby - rlang - duckdb - bunnative kind: type: string enum: - script - failure - trigger - command - approval - preprocessor starred: type: boolean tag: type: string has_draft: type: boolean draft_only: type: boolean envs: type: array items: type: string concurrent_limit: type: integer concurrency_time_window_s: type: integer concurrency_key: type: string debounce_key: type: string debounce_delay_s: type: integer debounce_args_to_accumulate: type: array items: type: string max_total_debouncing_time: type: integer max_total_debounces_amount: type: integer cache_ttl: type: number dedicated_worker: type: boolean ws_error_handler_muted: type: boolean priority: type: integer restart_unless_cancelled: type: boolean timeout: type: integer delete_after_secs: type: integer description: >- If set, delete the job's args, result and logs after this many seconds following job completion visible_to_runner_only: type: boolean auto_kind: type: string codebase: type: string has_preprocessor: type: boolean on_behalf_of_email: type: string modules: type: object nullable: true description: Additional script modules keyed by relative file path additionalProperties: type: object description: An additional module file associated with a script properties: &ref_95 content: type: string description: The source code content of this module language: type: string enum: *ref_94 lock: type: string nullable: true description: Lock file content for this module's dependencies required: &ref_96 - content - language labels: type: array items: type: string default: [] required: &ref_100 - hash - path - summary - description - content - created_by - created_at - archived - deleted - is_template - extra_perms - language - kind - starred - has_preprocessor /w/{workspace}/scripts/list_paths: get: summary: list all scripts paths operationId: listScriptPaths tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of script paths content: text/plain: schema: type: array items: type: string /w/{workspace}/drafts/create: post: summary: create draft operationId: createDraft tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: path: type: string typ: type: string enum: - flow - script - app value: {} required: - path - typ - enum responses: '201': description: draft created content: text/plain: schema: type: string /w/{workspace}/drafts/delete/{kind}/{path}: delete: summary: delete draft operationId: deleteDraft tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: path required: true schema: type: string enum: - script - flow - app - name: path in: path required: true schema: *ref_92 responses: '200': description: draft deleted content: text/plain: schema: type: string /w/{workspace}/scripts/create: post: summary: create script description: > Creates a new script when the path does not already exist. Creates a new version of an existing script when called with the same path and the current `parent_hash`. 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_4 requestBody: description: Partially filled script required: true content: application/json: schema: type: object properties: &ref_104 path: type: string parent_hash: type: string summary: type: string description: type: string content: type: string schema: type: object is_template: type: boolean lock: type: string language: type: string enum: *ref_94 kind: type: string enum: - script - failure - trigger - command - approval - preprocessor tag: type: string draft_only: type: boolean envs: type: array items: type: string concurrent_limit: type: integer concurrency_time_window_s: type: integer cache_ttl: type: number cache_ignore_s3_path: type: boolean dedicated_worker: type: boolean ws_error_handler_muted: type: boolean priority: type: integer restart_unless_cancelled: type: boolean timeout: type: integer delete_after_secs: type: integer description: >- If set, delete the job's args, result and logs after this many seconds following job completion deployment_message: type: string concurrency_key: type: string debounce_key: type: string debounce_delay_s: type: integer debounce_args_to_accumulate: type: array items: type: string max_total_debouncing_time: type: integer max_total_debounces_amount: type: integer visible_to_runner_only: type: boolean auto_kind: type: string codebase: type: string has_preprocessor: type: boolean on_behalf_of_email: type: string preserve_on_behalf_of: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original on_behalf_of_email value instead of overwriting it. assets: type: array items: type: object required: - path - kind properties: path: type: string kind: type: string enum: &ref_301 - s3object - resource - ducklake - datatable - volume access_type: type: string enum: - r - w - rw alt_access_type: type: string enum: - r - w - rw modules: type: object nullable: true description: Additional script modules keyed by relative file path additionalProperties: type: object description: An additional module file associated with a script properties: *ref_95 required: *ref_96 labels: type: array items: type: string required: &ref_105 - path - summary - content - language responses: '201': description: script created content: text/plain: schema: type: string /w/{workspace}/scripts/toggle_workspace_error_handler/p/{path}: post: summary: Toggle ON and OFF the workspace error handler for a given script operationId: toggleWorkspaceErrorHandlerForScript tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: Workspace error handler enabled required: true content: application/json: schema: type: object properties: muted: type: boolean responses: '200': description: error handler toggled content: text/plain: schema: type: string /workers/custom_tags: get: summary: >- get all instance custom tags (tags are used to dispatch jobs to different worker groups) operationId: getCustomTags tags: - worker parameters: - name: show_workspace_restriction in: query schema: type: boolean required: false responses: '200': description: list of custom tags content: application/json: schema: type: array items: type: string /w/{workspace}/workers/custom_tags: get: summary: get custom tags available for this workspace operationId: getCustomTagsForWorkspace tags: - worker parameters: - 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 operationId: geDefaultTags tags: - worker responses: '200': description: list of default tags content: application/json: schema: type: array items: type: string /workers/is_default_tags_per_workspace: get: summary: is default tags per workspace operationId: isDefaultTagsPerWorkspace tags: - worker responses: '200': description: is the default tags per workspace content: application/json: schema: type: boolean /w/{workspace}/workspace_dependencies/create: post: summary: create workspace dependencies operationId: createWorkspaceDependencies tags: - workspace_dependencies parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: New workspace dependencies required: true content: application/json: schema: type: object properties: &ref_385 workspace_id: type: string language: type: string enum: *ref_94 name: type: string description: type: string content: type: string required: &ref_386 - 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_94 - 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_94 - 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_97 id: type: integer archived: type: boolean name: type: string description: type: string content: type: string language: type: string enum: *ref_94 workspace_id: type: string created_at: type: string format: date-time required: &ref_98 - 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_94 - name: name in: query required: false schema: type: string responses: '200': description: Latest workspace dependencies content: application/json: schema: type: object properties: *ref_97 required: *ref_98 /w/{workspace}/scripts/archive/p/{path}: post: summary: archive script by path operationId: archiveScriptByPath tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: script archived content: text/plain: schema: type: string /w/{workspace}/scripts/archive/h/{hash}: post: summary: archive script by hash operationId: archiveScriptByHash tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: hash in: path required: true schema: &ref_101 type: string responses: '200': description: script details content: application/json: schema: type: object properties: *ref_99 required: *ref_100 /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_4 - name: hash in: path required: true schema: *ref_101 responses: '200': description: script details content: application/json: schema: type: object properties: *ref_99 required: *ref_100 /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_4 - name: path in: path required: true schema: *ref_92 - name: keep_captures description: keep captures in: query schema: type: boolean responses: '200': description: script path content: application/json: schema: type: string /w/{workspace}/scripts/delete_bulk: delete: summary: delete scripts in bulk operationId: deleteScriptsBulk tags: - script parameters: - 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 operationId: getScriptByPath x-mcp-tool: true tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - name: with_starred_info in: query schema: type: boolean responses: '200': description: script details content: application/json: schema: type: object properties: *ref_99 required: *ref_100 /w/{workspace}/scripts/get_triggers_count/{path}: get: summary: get triggers count of script operationId: getTriggersCountOfScript tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: triggers count content: application/json: schema: type: object properties: &ref_125 primary_schedule: type: object properties: schedule: type: string schedule_count: type: number http_routes_count: type: number webhook_count: type: number email_count: type: number default_email_count: type: number websocket_count: type: number postgres_count: type: number kafka_count: type: number nats_count: type: number mqtt_count: type: number gcp_count: type: number azure_count: type: number sqs_count: type: number nextcloud_count: type: number google_count: type: number github_count: type: number /w/{workspace}/scripts/list_tokens/{path}: get: summary: get tokens with script scope operationId: listTokensOfScript tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: tokens list content: application/json: schema: type: array items: type: object properties: *ref_102 required: *ref_103 /w/{workspace}/scripts/get/draft/{path}: get: summary: get script by path with draft operationId: getScriptByPathWithDraft tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: script details content: application/json: schema: allOf: &ref_387 - type: object properties: *ref_104 required: *ref_105 - type: object properties: draft: type: object properties: *ref_104 required: *ref_105 draft_created_at: type: string format: date-time description: >- Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check. hash: type: string required: - hash /w/{workspace}/scripts/history/p/{path}: get: summary: get history of a script by path operationId: getScriptHistoryByPath tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: script history content: application/json: schema: type: array items: type: object properties: &ref_106 script_hash: type: string deployment_msg: type: string required: &ref_107 - script_hash /w/{workspace}/scripts/list_paths_from_workspace_runnable/{path}: get: summary: list script paths using provided script as a relative import operationId: listScriptPathsFromWorkspaceRunnable tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: list of script paths content: application/json: schema: type: array items: type: string /w/{workspace}/scripts/get_latest_version/{path}: get: summary: get scripts's latest version (hash) operationId: getScriptLatestVersion parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 tags: - script responses: '200': description: Script version/hash content: application/json: schema: type: object properties: *ref_106 required: *ref_107 /w/{workspace}/scripts/history_update/h/{hash}/p/{path}: post: summary: update history of a script operationId: updateScriptHistory tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: hash in: path required: true schema: *ref_101 - name: path in: path required: true schema: *ref_92 requestBody: description: Script deployment message required: true content: application/json: schema: type: object properties: deployment_msg: type: string responses: '200': description: success content: text/plain: schema: type: string /w/{workspace}/scripts/list_dedicated_with_deps: get: summary: list dedicated worker scripts with workspace dependency annotations operationId: listDedicatedWithDeps tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of dedicated scripts with their workspace dependency names content: application/json: schema: type: array items: type: object properties: path: type: string language: type: string enum: - python3 - deno - go - bash - powershell - postgresql - mysql - bigquery - snowflake - mssql - graphql - nativets - bun - bunnative - php - rust - ansible - csharp - oracledb - duckdb - java - ruby workspace_dep_names: type: array items: type: string required: - path - language - workspace_dep_names /w/{workspace}/scripts/raw/p/{path}: get: summary: raw script by path operationId: rawScriptByPath tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: script content content: text/plain: schema: type: string /scripts_u/tokened_raw/{workspace}/{token}/{path}: get: summary: >- raw script by path with a token (mostly used by lsp to be used with import maps to resolve scripts) operationId: rawScriptByPathTokened tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: token in: path required: true schema: &ref_305 type: string - name: path in: path required: true schema: *ref_92 responses: '200': description: script content content: text/plain: schema: type: string /w/{workspace}/scripts/exists/p/{path}: get: summary: exists script by path operationId: existsScriptByPath tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: does it exists content: application/json: schema: type: boolean /w/{workspace}/scripts/get/h/{hash}: get: summary: get script by hash operationId: getScriptByHash tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: hash in: path required: true schema: *ref_101 - name: with_starred_info in: query schema: type: boolean - name: authed in: query schema: type: boolean responses: '200': description: script details content: application/json: schema: type: object properties: *ref_99 required: *ref_100 /w/{workspace}/scripts/raw/h/{path}: get: summary: raw script by hash operationId: rawScriptByHash tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: script content content: text/plain: schema: type: string /w/{workspace}/scripts/deployment_status/h/{hash}: get: summary: get script deployment status operationId: getScriptDeploymentStatus tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: hash in: path required: true schema: *ref_101 responses: '200': description: script details content: application/json: schema: type: object properties: lock: type: string lock_error_logs: type: string job_id: type: string format: uuid /w/{workspace}/scripts/ci_test_results/{kind}/{path}: get: summary: get CI test results for a script, flow, or resource operationId: getCiTestResults tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: path required: true schema: type: string enum: - script - flow - resource - name: path in: path required: true schema: type: string responses: '200': description: CI test results content: application/json: schema: type: array items: type: object properties: &ref_108 test_script_path: type: string job_id: type: string format: uuid nullable: true status: type: string nullable: true started_at: type: string format: date-time nullable: true required: &ref_109 - test_script_path /w/{workspace}/scripts/ci_test_results_batch: post: summary: get CI test results for multiple items operationId: getCiTestResultsBatch tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - items properties: items: type: array items: type: object required: - path - kind properties: path: type: string kind: type: string enum: - script - flow - resource responses: '200': description: CI test results by item key content: application/json: schema: type: object additionalProperties: type: array items: type: object properties: *ref_108 required: *ref_109 /w/{workspace}/scripts/raw_temp/store: post: summary: store raw script content temporarily for CLI lock generation operationId: storeRawScriptTemp tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: script content to store required: true content: application/json: schema: type: string responses: '200': description: hash of stored content content: application/json: schema: type: string /w/{workspace}/scripts/raw_temp/diff: post: summary: diff local script hashes against deployed versions operationId: diffRawScriptsWithDeployed tags: - script parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: scripts and workspace deps to diff against deployed versions required: true content: application/json: schema: type: object required: - scripts properties: scripts: description: map of script path to SHA256 content hash type: object additionalProperties: type: string workspace_deps: description: workspace dependencies to diff type: array items: type: object required: - path - language - hash properties: path: description: CLI path (e.g. dependencies/package.json) type: string language: type: string enum: *ref_94 name: description: named workspace dependency (null for default) type: string hash: description: SHA256 content hash type: string responses: '200': description: list of paths that differ from deployed versions content: application/json: schema: type: array items: type: string /w/{workspace}/jobs/list_selected_job_groups: post: summary: list selected jobs script/flow schemas grouped by (kind, path) operationId: listSelectedJobGroups tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: script args required: true content: application/json: schema: type: array items: type: string format: uuid responses: '200': description: result content: text/plain: schema: type: array items: type: object properties: kind: type: string enum: - script - flow script_path: type: string latest_schema: type: object schemas: type: array items: type: object properties: schema: type: object script_hash: type: string job_ids: type: array items: type: string required: - schema - script_hash - job_ids required: - kind - script_path - latest_schema - schemas /w/{workspace}/jobs/run/p/{path}: post: summary: run script by path operationId: runScriptByPath x-mcp-tool: true x-mcp-instructions: >- You should first use getScriptByPath to retrieve the script's schema and understand what arguments are expected. x-mcp-tool-include-query-params: [] tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - name: scheduled_for description: when to schedule this job (leave empty for immediate run) in: query schema: type: string format: date-time - name: scheduled_in_secs description: schedule the script to execute in the number of seconds starting now in: query schema: type: integer - name: skip_preprocessor description: skip the preprocessor in: query schema: type: boolean - 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_110 type: string format: uuid - name: tag description: Override the tag to use in: query schema: &ref_111 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_112 type: string - 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_113 type: string format: uuid - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query schema: type: boolean requestBody: description: script args required: true content: application/json: schema: type: object description: The arguments to pass to the script or flow additionalProperties: true responses: '201': description: job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run_wait_result/p/{path}: post: summary: run script by path operationId: runWaitResultScriptByPath tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 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_115 type: string - name: skip_preprocessor description: skip the preprocessor in: query schema: &ref_116 type: boolean 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 script by path with get operationId: runWaitResultScriptByPathGet tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 - 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_115 - 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_117 type: string - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 responses: '200': description: job result content: application/json: schema: {} /w/{workspace}/jobs/run_wait_result/f/{path}: post: summary: run flow by path and wait until completion operationId: runWaitResultFlowByPath tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - 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_114 - 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_115 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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: {} /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_114 - 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_115 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_114 - 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_115 - 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_117 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_92 - 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_114 - 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_115 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_92 - 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_114 - 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_115 - 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_117 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_114 - 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_115 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_114 - 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_115 - 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_117 - 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_113 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_92 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 - 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_115 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_92 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 - 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_115 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 - 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_115 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 - 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_115 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 - name: poll_delay_ms description: delay between polling for job updates in milliseconds in: query schema: type: integer format: int64 responses: '200': description: server-sent events stream of job updates content: text/event-stream: schema: type: string /w/{workspace}/jobs/result_by_id/{flow_job_id}/{node_id}: get: summary: get job result by id operationId: resultById tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: flow_job_id in: path required: true schema: type: string - name: node_id in: path required: true schema: type: string responses: '200': description: job result content: application/json: schema: {} /w/{workspace}/flows/list_paths: get: summary: list all flow paths operationId: listFlowPaths tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of flow paths content: text/plain: schema: type: array items: type: string /w/{workspace}/flows/list_search: get: summary: list flows for search operationId: listSearchFlow tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: flow list content: application/json: schema: type: array items: type: object properties: path: type: string value: {} required: - path - value /w/{workspace}/flows/list: get: summary: list all flows operationId: listFlows x-mcp-tool: true tags: - flow parameters: - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: order_desc description: order by desc order (default true) in: query schema: *ref_118 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: path_start description: mask to filter matching starting path in: query schema: type: string - name: path_exact description: mask to filter exact matching path in: query schema: type: string - name: show_archived description: > (default false) show only the archived files. when multiple archived hash share the same path, only the ones with the latest create_at are displayed. in: query schema: type: boolean - name: starred_only description: | (default false) show only the starred items in: query schema: type: boolean - name: include_draft_only description: | (default false) include items that have no deployed version in: query schema: type: boolean - name: with_deployment_msg description: | (default false) include deployment message 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: All flow content: application/json: schema: type: array items: allOf: - allOf: &ref_124 - type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: *ref_120 required: *ref_121 - type: object properties: &ref_512 workspace_id: type: string path: type: string edited_by: type: string edited_at: type: string format: date-time archived: type: boolean extra_perms: type: object additionalProperties: &ref_511 type: boolean starred: type: boolean draft_only: type: boolean tag: type: string ws_error_handler_muted: type: boolean priority: type: integer dedicated_worker: type: boolean timeout: type: number visible_to_runner_only: type: boolean on_behalf_of_email: type: string labels: type: array items: type: string default: [] required: &ref_513 - path - edited_by - edited_at - archived - extra_perms - type: object properties: lock_error_logs: type: string version_id: type: number - type: object properties: has_draft: type: boolean draft_only: type: boolean /w/{workspace}/flows/history/p/{path}: get: summary: get flow history by path operationId: getFlowHistory parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 tags: - flow responses: '200': description: Flow history content: application/json: schema: type: array items: type: object properties: &ref_122 id: type: integer created_at: type: string format: date-time deployment_msg: type: string required: &ref_123 - id - created_at /w/{workspace}/flows/get_latest_version/{path}: get: summary: get flow's latest version operationId: getFlowLatestVersion parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 tags: - flow responses: '200': description: Flow version content: application/json: schema: type: object properties: *ref_122 required: *ref_123 /w/{workspace}/flows/list_paths_from_workspace_runnable/{runnable_kind}/{path}: get: summary: list flow paths from workspace runnable operationId: listFlowPathsFromWorkspaceRunnable tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_kind in: path required: true schema: &ref_132 type: string enum: - script - flow - name: path in: path required: true schema: *ref_92 - name: match_path_start in: query schema: type: boolean responses: '200': description: list of flow paths content: application/json: schema: type: array items: type: string /w/{workspace}/flows/get/v/{version}: get: summary: get flow version operationId: getFlowVersion parameters: - name: workspace in: path required: true schema: *ref_4 - name: version in: path required: true schema: type: number tags: - flow responses: '200': description: flow details content: application/json: schema: allOf: *ref_124 /w/{workspace}/flows/history_update/v/{version}: post: summary: update flow history operationId: updateFlowHistory parameters: - name: workspace in: path required: true schema: *ref_4 - name: version in: path required: true schema: type: number requestBody: description: Flow deployment message required: true content: application/json: schema: type: object properties: deployment_msg: type: string required: - deployment_msg tags: - flow responses: '200': description: success content: text/plain: schema: type: string /w/{workspace}/flows/get/{path}: get: summary: get flow by path operationId: getFlowByPath x-mcp-tool: true tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - name: with_starred_info in: query schema: type: boolean responses: '200': description: flow details content: application/json: schema: allOf: *ref_124 /w/{workspace}/flows/deployment_status/p/{path}: get: summary: get flow deployment status operationId: getFlowDeploymentStatus tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: flow status content: application/json: schema: type: object properties: lock_error_logs: type: string job_id: type: string format: uuid /w/{workspace}/flows/get_triggers_count/{path}: get: summary: get triggers count of flow operationId: getTriggersCountOfFlow tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: triggers count content: application/json: schema: type: object properties: *ref_125 /w/{workspace}/flows/list_tokens/{path}: get: summary: get tokens with flow scope operationId: listTokensOfFlow tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: tokens list content: application/json: schema: type: array items: type: object properties: *ref_102 required: *ref_103 /w/{workspace}/flows/toggle_workspace_error_handler/{path}: post: summary: Toggle ON and OFF the workspace error handler for a given flow operationId: toggleWorkspaceErrorHandlerForFlow tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: Workspace error handler enabled required: true content: application/json: schema: type: object properties: muted: type: boolean responses: '200': description: error handler toggled content: text/plain: schema: type: string /w/{workspace}/flows/get/draft/{path}: get: summary: get flow by path with draft operationId: getFlowByPathWithDraft tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: flow details with draft content: application/json: schema: allOf: - allOf: *ref_124 - type: object properties: draft: allOf: *ref_124 draft_created_at: type: string format: date-time description: >- Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check. /w/{workspace}/flows/exists/{path}: get: summary: exists flow by path operationId: existsFlowByPath tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: flow details content: application/json: schema: type: boolean /w/{workspace}/flows/create: post: summary: create flow operationId: createFlow x-mcp-tool: true x-mcp-tool-include-fields: - path - summary - description - value - schema - tag - deployment_message x-mcp-tool-opaque-fields: - value - schema tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Partially filled flow required: true content: application/json: schema: allOf: - allOf: &ref_126 - type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: *ref_120 required: *ref_121 - type: object properties: path: type: string tag: type: string ws_error_handler_muted: type: boolean priority: type: integer dedicated_worker: type: boolean timeout: type: number visible_to_runner_only: type: boolean on_behalf_of_email: type: string preserve_on_behalf_of: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original on_behalf_of_email value instead of overwriting it. labels: type: array items: type: string required: - path - type: object properties: draft_only: type: boolean deployment_message: type: string responses: '201': description: flow created content: text/plain: schema: type: string /w/{workspace}/flows/update/{path}: post: summary: update flow operationId: updateFlow x-mcp-tool: true x-mcp-tool-include-fields: - path - summary - description - value - schema - tag - deployment_message x-mcp-tool-opaque-fields: - value - schema tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: Partially filled flow required: true content: application/json: schema: allOf: - allOf: *ref_126 - type: object properties: deployment_message: type: string responses: '200': description: flow updated content: text/plain: schema: type: string /w/{workspace}/flows/archive/{path}: post: summary: archive flow by path operationId: archiveFlowByPath tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: archiveFlow required: true content: application/json: schema: type: object properties: archived: type: boolean responses: '200': description: flow archived content: text/plain: schema: type: string /w/{workspace}/flows/delete/{path}: delete: summary: delete flow by path operationId: deleteFlowByPath x-mcp-tool: true tags: - flow parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - name: keep_captures description: keep captures in: query schema: type: boolean responses: '200': description: flow delete content: text/plain: schema: type: string /w/{workspace}/flow_conversations/list: get: summary: list flow conversations operationId: listFlowConversations tags: - flow_conversations 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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_372 - id - workspace_id - flow_path - created_at - updated_at - created_by properties: &ref_373 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_conversations 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_conversations 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: conversation_id description: conversation id in: path required: true schema: type: string format: uuid - name: after_seq description: Message sequence cursor to fetch only the messages after that cursor in: query required: false schema: type: integer format: int64 responses: '200': description: conversation messages content: application/json: schema: type: array items: type: object required: &ref_374 - id - conversation_id - message_type - content - created_at - created_seq properties: &ref_375 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 created_seq: type: integer format: int64 description: Monotonic cursor assigned when the message is inserted step_name: type: string description: The step name that produced that message success: type: boolean description: Whether the message is a success /w/{workspace}/path_autocomplete/list_paths: get: summary: list all paths in a workspace for client-side autocomplete description: > Returns the flat list of all item paths visible to the caller across scripts, flows, apps, raw apps, variables, and resources. Intended to feed an entirely client-side path autocomplete UI: the frontend fetches once (server caches per workspace for 60s) and performs all prefix/segment computation locally. Capped at 20,000 paths (5,000 per table). operationId: listPathAutocompletePaths tags: - path_autocomplete parameters: - name: workspace in: path required: true schema: *ref_4 - name: force description: > bypass the server-side cache and re-query the DB, refreshing the cache. Used right after a deploy so the new path appears immediately. in: query schema: type: boolean responses: '200': description: deduplicated path list, sorted lexicographically content: application/json: schema: type: object properties: paths: type: array items: type: string required: - paths /w/{workspace}/raw_apps/list: get: summary: list all raw apps operationId: listRawApps tags: - raw_app 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: order_desc description: order by desc order (default true) in: query schema: *ref_118 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: path_start description: mask to filter matching starting path in: query schema: type: string - name: path_exact description: mask to filter exact matching path in: query schema: type: string - name: starred_only description: | (default false) show only the starred items in: query schema: type: boolean - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: All raw apps content: application/json: schema: type: array items: type: object properties: &ref_520 workspace_id: type: string path: type: string summary: type: string extra_perms: type: object additionalProperties: type: boolean starred: type: boolean version: type: number edited_at: type: string format: date-time labels: type: array items: type: string default: [] required: &ref_521 - workspace_id - path - summary - extra_perms - version - edited_at /w/{workspace}/shared_ui/get: get: summary: get the workspace shared UI folder (full content) operationId: getSharedUi tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: shared UI content content: application/json: schema: type: object required: - files - version - edited_at - edited_by properties: files: type: object additionalProperties: type: string version: type: integer format: int64 edited_at: type: string format: date-time edited_by: type: string /w/{workspace}/shared_ui/list: get: summary: list paths/sizes of the workspace shared UI folder operationId: listSharedUi tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: shared UI listing content: application/json: schema: type: object required: - paths - sizes - version - edited_at - edited_by properties: paths: type: array items: type: string sizes: type: object additionalProperties: type: integer format: int64 version: type: integer format: int64 edited_at: type: string format: date-time edited_by: type: string /w/{workspace}/shared_ui/version: get: summary: get the current version of the workspace shared UI folder operationId: getSharedUiVersion tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: shared UI version content: application/json: schema: type: object required: - version properties: version: type: integer format: int64 /w/{workspace}/shared_ui: put: summary: replace the workspace shared UI folder (admin only) operationId: updateSharedUi tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - files properties: files: type: object additionalProperties: type: string responses: '200': description: updated content: text/plain: schema: type: string /w/{workspace}/apps/get_data/v/{secretWithExtension}: get: summary: get raw app data by operationId: getRawAppData tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: secretWithExtension in: path required: true schema: type: string responses: '200': description: app details content: text/javascript: schema: type: string /w/{workspace}/apps/list_search: get: summary: list apps for search operationId: listSearchApp tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: app list content: application/json: schema: type: array items: type: object properties: path: type: string value: {} required: - path - value /w/{workspace}/apps/list: get: summary: list all apps operationId: listApps tags: - app parameters: - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: order_desc description: order by desc order (default true) in: query schema: *ref_118 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: path_start description: mask to filter matching starting path in: query schema: type: string - name: path_exact description: mask to filter exact matching path in: query schema: type: string - name: starred_only description: | (default false) show only the starred items in: query schema: type: boolean - name: include_draft_only description: | (default false) include items that have no deployed version in: query schema: type: boolean - name: with_deployment_msg description: | (default false) include deployment message in: query schema: type: boolean - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: All apps content: application/json: schema: type: array items: type: object properties: &ref_514 id: type: integer workspace_id: type: string path: type: string summary: type: string version: type: integer extra_perms: type: object additionalProperties: type: boolean starred: type: boolean edited_at: type: string format: date-time execution_mode: type: string enum: - viewer - publisher - anonymous raw_app: type: boolean labels: type: array items: type: string default: [] required: &ref_515 - id - workspace_id - path - summary - version - extra_perms - edited_at - execution_mode /w/{workspace}/apps/create: post: summary: create app operationId: createApp x-mcp-tool: true x-mcp-tool-include-fields: - path - value - summary - policy - deployment_message x-mcp-tool-opaque-fields: - value - policy tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new app required: true content: application/json: schema: type: object properties: path: type: string value: {} summary: type: string policy: type: object properties: *ref_127 draft_only: type: boolean deployment_message: type: string custom_path: type: string preserve_on_behalf_of: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original on_behalf_of value in the policy instead of overwriting it. labels: type: array items: type: string required: - path - value - summary - policy responses: '201': description: app created content: text/plain: schema: type: string /w/{workspace}/apps/create_raw: post: summary: create app raw operationId: createAppRaw tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new app required: true content: multipart/form-data: schema: type: object properties: app: type: object properties: path: type: string value: {} summary: type: string policy: type: object properties: *ref_127 draft_only: type: boolean deployment_message: type: string custom_path: type: string preserve_on_behalf_of: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original on_behalf_of value in the policy instead of overwriting it. labels: type: array items: type: string required: - path - value - summary - policy js: type: string css: type: string responses: '201': description: app created content: text/plain: schema: type: string /w/{workspace}/apps/exists/{path}: get: summary: does an app exisst at path operationId: existsApp tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: app exists content: application/json: schema: type: boolean /w/{workspace}/apps/get/p/{path}: get: summary: get app by path operationId: getAppByPath tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - name: with_starred_info in: query schema: type: boolean responses: '200': description: app details content: application/json: schema: type: object properties: *ref_128 required: *ref_129 /w/{workspace}/apps/get/lite/{path}: get: summary: get app lite by path operationId: getAppLiteByPath tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: app lite details content: application/json: schema: type: object properties: *ref_128 required: *ref_129 /w/{workspace}/apps/get/draft/{path}: get: summary: get app by path with draft operationId: getAppByPathWithDraft tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: app details with draft content: application/json: schema: allOf: &ref_522 - type: object properties: *ref_128 required: *ref_129 - type: object properties: draft_only: type: boolean draft: {} draft_created_at: type: string format: date-time description: >- Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check. /w/{workspace}/apps/history/p/{path}: get: summary: get app history by path operationId: getAppHistoryByPath tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 responses: '200': description: app history content: application/json: schema: type: array items: type: object properties: &ref_130 version: type: integer deployment_msg: type: string required: &ref_131 - version /w/{workspace}/apps/get_latest_version/{path}: get: summary: get apps's latest version operationId: getAppLatestVersion parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 tags: - app responses: '200': description: App version content: application/json: schema: type: object properties: *ref_130 required: *ref_131 /w/{workspace}/apps/list_paths_from_workspace_runnable/{runnable_kind}/{path}: get: summary: list app paths from workspace runnable operationId: listAppPathsFromWorkspaceRunnable tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_kind in: path required: true schema: *ref_132 - name: path in: path required: true schema: *ref_92 responses: '200': description: list of app paths content: application/json: schema: type: array items: type: string /w/{workspace}/apps/history_update/a/{id}/v/{version}: post: summary: update app history operationId: updateAppHistory tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_79 - name: version in: path required: true schema: &ref_306 type: integer requestBody: description: App deployment message required: true content: application/json: schema: type: object properties: deployment_msg: type: string responses: '200': description: success content: text/plain: schema: type: string /w/{workspace}/apps_u/public_app/{path}: get: summary: get public app by secret operationId: getPublicAppBySecret tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: app details content: application/json: schema: type: object properties: *ref_128 required: *ref_129 /w/{workspace}/apps_u/public_resource/{path}: get: summary: get public resource operationId: get public resource tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: resource value content: application/json: schema: {} /w/{workspace}/apps/secret_of/{path}: get: summary: get public secret of app operationId: getPublicSecretOfApp tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 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_60 responses: '200': description: app secret content: text/plain: schema: type: string /w/{workspace}/apps/get/v/{id}: get: summary: get app by version operationId: getAppByVersion tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_79 responses: '200': description: app details content: application/json: schema: type: object properties: *ref_128 required: *ref_129 /w/{workspace}/apps/delete/{path}: delete: summary: delete app operationId: deleteApp tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: app deleted content: text/plain: schema: type: string /w/{workspace}/apps/update/{path}: post: summary: update app operationId: updateApp x-mcp-tool: true x-mcp-tool-include-fields: - path - value - summary - policy - deployment_message x-mcp-tool-opaque-fields: - value - policy tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: update app required: true content: application/json: schema: type: object properties: path: type: string summary: type: string value: {} policy: type: object properties: *ref_127 deployment_message: type: string custom_path: type: string preserve_on_behalf_of: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original on_behalf_of value in the policy instead of overwriting it. labels: type: array items: type: string responses: '200': description: app updated content: text/plain: schema: type: string /w/{workspace}/apps/update_raw/{path}: post: summary: update app operationId: updateAppRaw tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: update app required: true content: multipart/form-data: schema: type: object properties: app: type: object properties: path: type: string summary: type: string value: {} policy: type: object properties: *ref_127 deployment_message: type: string custom_path: type: string preserve_on_behalf_of: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original on_behalf_of value in the policy instead of overwriting it. labels: type: array items: type: string js: type: string css: type: string responses: '200': description: app updated content: text/plain: schema: type: string /w/{workspace}/apps/custom_path_exists/{custom_path}: get: summary: check if custom path exists operationId: customPathExists tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: custom_path in: path required: true schema: *ref_133 responses: '200': description: custom path exists content: application/json: schema: type: boolean /w/{workspace}/apps/sign_s3_objects: post: summary: sign s3 objects, to be used by anonymous users in public apps operationId: signS3Objects tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: s3 objects to sign required: true content: application/json: schema: type: object properties: s3_objects: type: array items: type: object properties: &ref_134 s3: type: string filename: type: string storage: type: string presigned: type: string required: &ref_135 - s3 required: - s3_objects responses: '200': description: signed s3 objects content: application/json: schema: type: array items: type: object properties: *ref_134 required: *ref_135 /w/{workspace}/apps_u/execute_component/{path}: post: summary: executeComponent operationId: executeComponent tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: update app required: true content: application/json: schema: type: object properties: component: type: string path: type: string version: type: integer args: {} raw_code: type: object properties: content: type: string language: type: string path: type: string lock: type: string cache_ttl: type: integer tag: type: string required: - content - language id: type: integer force_viewer_static_fields: type: object force_viewer_one_of_fields: type: object force_viewer_allow_user_resources: type: array items: type: string force_viewer_sensitive_inputs: type: array items: type: string force_viewer_delete_after_secs: type: integer run_query_params: type: object description: Runnable query parameters temp_script_refs: type: object nullable: true description: >- Map of relative-import script path -> temp storage hash. Only honored for inline-script (raw_code) execution so app dev resolves those imports from not-yet-deployed local content. additionalProperties: type: string required: - args - component responses: '200': description: job uuid content: text/plain: schema: type: string /w/{workspace}/apps_u/upload_s3_file/{path}: post: summary: upload s3 file from app operationId: uploadS3FileFromApp tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: file_key in: query required: false schema: type: string - name: file_extension in: query required: false schema: type: string - name: s3_resource_path in: query required: false schema: type: string - name: resource_type in: query required: false schema: type: string - name: storage in: query schema: type: string - name: content_type in: query schema: type: string - name: content_disposition in: query schema: type: string requestBody: description: File content required: true content: application/octet-stream: schema: type: string format: binary responses: '200': description: file uploaded content: application/json: schema: type: object properties: file_key: type: string delete_token: type: string required: - file_key - delete_token /w/{workspace}/apps_u/delete_s3_file: delete: summary: delete s3 file from app operationId: deleteS3FileFromApp tags: - app parameters: - name: workspace in: path required: true schema: *ref_4 - name: delete_token in: query required: true schema: type: string responses: '200': description: file deleted content: text/plain: schema: type: string /w/{workspace}/jobs/run/f/{path}: post: summary: run flow by path operationId: runFlowByPath x-mcp-tool: true x-mcp-instructions: >- You should first use getFlowByPath to retrieve the flow's schema and understand what arguments are expected. x-mcp-tool-include-query-params: [] tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 - 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_116 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_113 - 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_114 - 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 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_116 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_113 - 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_114 - 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 content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run/batch_rerun_jobs: post: summary: re-run multiple jobs operationId: batchReRunJobs tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: list of job ids to re run and arg tranforms required: true content: application/json: schema: type: object required: - job_ids - script_options_by_path - flow_options_by_path properties: job_ids: type: array items: type: string script_options_by_path: type: object additionalProperties: type: object properties: input_transforms: type: object additionalProperties: 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_138 - type: object description: >- Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource' properties: *ref_136 required: *ref_137 - 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_84 required: *ref_85 - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: *ref_86 required: *ref_87 discriminator: &ref_139 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: type: object additionalProperties: type: object properties: input_transforms: type: object additionalProperties: 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_138 discriminator: *ref_139 use_latest_version: type: boolean responses: '201': description: >- stream of created job uuids separated by \n. Lines may start with 'Error:' content: text/event-stream: schema: type: string /w/{workspace}/jobs/restart/f/{id}: post: summary: restart a completed flow at a given step operationId: restartFlowAtStep tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: &ref_172 type: string format: uuid - 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: 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_113 - 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_114 - name: invisible_to_owner description: make the run invisible to the the flow owner (default false) in: query schema: type: boolean requestBody: description: restart flow parameters required: true content: application/json: schema: type: object required: - step_id properties: step_id: type: string description: >- top-level step id to restart the flow from (or the outermost container when restarting at a nested step) branch_or_iteration_n: type: integer description: >- for branchall or loop at the top level, 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) nested_path: type: array description: >- path of additional steps to descend into AFTER `step_id`. Each entry represents one level of nesting inside the spawned child of the previous level's container (BranchOne / sequential ForLoop iteration / Subflow). When non-empty, the actual restart point is the LAST entry's step_id. items: type: object required: - step_id properties: step_id: type: string description: step id at this nesting level branch_or_iteration_n: type: integer description: >- for ForLoop containers, the iteration to restart at (0-based; iterations 0..n-1 are preserved) responses: '201': description: job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run/h/{hash}: post: summary: run script by hash operationId: runScriptByHash tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: hash in: path required: true schema: *ref_101 - 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_116 - 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_110 - name: tag description: Override the tag to use in: query schema: *ref_111 - 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_112 - 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_113 - 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_114 - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query schema: type: boolean requestBody: description: Partially filled args required: true content: application/json: schema: type: object responses: '201': description: job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run/preview: post: summary: run script preview operationId: runScriptPreview tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - 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_114 - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query schema: type: boolean - 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_113 requestBody: description: preview required: true content: application/json: schema: type: object properties: &ref_141 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: true language: type: string enum: *ref_94 tag: type: string kind: type: string enum: - code - identity - http dedicated_worker: type: boolean lock: type: string flow_path: type: string modules: type: object nullable: true description: Additional script modules keyed by relative file path additionalProperties: type: object description: An additional module file associated with a script properties: *ref_95 required: *ref_96 temp_script_refs: type: object nullable: true description: >- Map of relative-import script path -> temp storage hash so the preview job resolves those imports from not-yet-deployed local content instead of the deployed script additionalProperties: type: string required: &ref_142 - args responses: '201': description: job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run_inline/preview: post: summary: run script preview without starting a new job operationId: runScriptPreviewInline tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: preview required: true content: application/json: schema: type: object properties: &ref_423 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_94 required: &ref_424 - content - args - language responses: '200': description: script result content: application/json: schema: {} /w/{workspace}/jobs/run_inline/p/{path}: post: summary: run script by path without starting a new job operationId: runScriptByPathInline tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_92 requestBody: description: script args required: true content: application/json: schema: type: object properties: &ref_140 args: type: object description: The arguments to pass to the script or flow additionalProperties: true responses: '200': description: script result content: application/json: schema: {} /w/{workspace}/jobs/run_inline/h/{hash}: post: summary: run script by hash without starting a new job operationId: runScriptByHashInline tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: hash in: path required: true schema: *ref_101 requestBody: description: script args required: true content: application/json: schema: type: object properties: *ref_140 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_141 required: *ref_142 responses: '200': description: job result content: application/json: schema: {} /w/{workspace}/jobs/workflow_as_code/{job_id}/{entrypoint}: post: summary: run code-workflow task operationId: runCodeWorkflowTask tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: job_id in: path required: true schema: type: string - name: entrypoint in: path required: true schema: type: string requestBody: description: preview required: true content: application/json: schema: type: object properties: &ref_425 args: type: object description: The arguments to pass to the script or flow additionalProperties: true required: &ref_426 - args responses: '201': description: job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run/dependencies: post: summary: run a one-off dependencies job operationId: runRawScriptDependencies tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: raw script content required: true content: application/json: schema: type: object properties: raw_scripts: type: array items: type: object properties: &ref_143 raw_code: type: string path: type: string language: type: string enum: *ref_94 required: &ref_144 - raw_code - path - language entrypoint: type: string required: - entrypoint - raw_scripts responses: '201': description: dependency job result content: application/json: schema: type: object properties: lock: type: string required: - lock /w/{workspace}/jobs/run/dependencies_async: post: summary: queue a one-off dependencies job and return the job uuid operationId: runRawScriptDependenciesAsync tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: raw script content required: true content: application/json: schema: type: object properties: raw_scripts: type: array items: type: object properties: *ref_143 required: *ref_144 entrypoint: type: string required: - entrypoint - raw_scripts responses: '201': description: dependency job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run/flow_dependencies_async: post: summary: queue a one-off flow dependencies job and return the job uuid operationId: runFlowDependenciesAsync tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: flow value and path required: true content: application/json: schema: type: object properties: path: type: string flow_value: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: &ref_149 modules: type: array description: >- Array of steps that execute in sequence. Each step can be a script, subflow, loop, or branch items: type: object description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 failure_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_82 required: *ref_83 preprocessor_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_82 required: *ref_83 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: integer 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: integer description: >- Maximum total time in seconds that a job can be debounced max_total_debounces_amount: type: integer 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 delete_after_secs: type: integer description: >- If set, delete the flow job's args, result and logs after this many seconds following job completion flow_env: type: object description: >- Environment variables available to all steps. Values can be strings, JSON values, or special references: '$var:path' (workspace variable) or '$res:path' (resource). additionalProperties: {} priority: type: number description: Execution priority (higher numbers run first) early_return: type: string description: JavaScript expression to return early from the flow chat_input_enabled: type: boolean description: Whether this flow accepts chat-style input notes: type: array description: Sticky notes attached to the flow items: type: object description: >- A sticky note attached to a flow for documentation and annotation properties: *ref_145 required: *ref_146 groups: type: array description: Semantic groups of modules for organizational purposes items: type: object description: >- A semantic group of flow modules for organizational purposes. Does not affect execution — modules remain in their original position in the flow. Groups provide naming and collapsibility in the editor. Members are computed dynamically from all nodes on paths between start_id and end_id. properties: *ref_147 required: *ref_148 required: &ref_150 - modules required: - path - flow_value responses: '201': description: flow dependencies job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run/preview_flow: post: summary: run flow preview operationId: runFlowPreview tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - 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_114 - name: invisible_to_owner description: make the run invisible to the the script owner (default false) in: query schema: type: boolean - 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_113 - 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_152 value: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_149 required: *ref_150 path: type: string args: type: object description: The arguments to pass to the script or flow additionalProperties: true tag: type: string restarted_from: type: object properties: &ref_151 flow_job_id: type: string format: uuid step_id: type: string branch_or_iteration_n: type: integer description: >- 0-based iteration index for ForLoop / branch index for BranchAll. Iterations 0..n-1 are preserved; iteration n is restarted. flow_version: type: integer branch_chosen: description: >- For BranchOne nested restart — the branch that was originally chosen, used to lock branch evaluation. type: object properties: type: type: string enum: - default - branch branch: type: integer nested: description: >- When set, the worker spawns the child for `step_id` as a `RestartedFlow` against `nested.flow_job_id` instead of fresh-launching it. type: object properties: *ref_151 temp_script_refs: type: object nullable: true description: >- Map of relative-import script path -> temp storage hash, propagated to each flow step so inline-script relative imports resolve from not-yet-deployed local content instead of the deployed script additionalProperties: type: string required: &ref_153 - value - content - args responses: '201': description: job created content: text/plain: schema: type: string format: uuid /w/{workspace}/jobs/run_wait_result/preview_flow: post: summary: run flow preview and wait for result operationId: runFlowPreviewAndWaitResult tags: - job parameters: - 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_152 required: *ref_153 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_529 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_200 - 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_94 required: - source - code required: &ref_530 - 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 operationId: listQueue x-mcp-tool: true tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: order_desc description: order by desc order (default true) in: query schema: *ref_118 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - 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_110 - name: worker description: >- filter by worker this job ran on. Supports comma-separated list (e.g. 'worker-1,worker-2') and negation by prefixing all values with '!' (e.g. '!worker-1,!worker-2') in: query schema: &ref_156 type: string - name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: &ref_157 type: string - name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: &ref_158 type: string - name: schedule_path description: mask to filter by schedule path in: query schema: &ref_159 type: string - name: trigger_path description: >- filter by trigger path. Supports comma-separated list (e.g. 'f/trigger1,f/trigger2') and negation by prefixing all values with '!' (e.g. '!f/trigger1,!f/trigger2') in: query schema: &ref_307 type: string - name: trigger_kind description: >- filter by trigger kind. Supports comma-separated list (e.g. 'schedule,webhook') and negation by prefixing all values with '!' (e.g. '!schedule,!webhook') in: query x-go-name: JobTriggerKindParam schema: &ref_188 type: string - name: script_hash description: mask to filter exact matching path in: query schema: &ref_160 type: string - name: started_before description: filter on started before (inclusive) timestamp in: query schema: &ref_161 type: string format: date-time - name: started_after description: filter on started after (exclusive) timestamp in: query schema: &ref_162 type: string format: date-time - name: success description: filter on successful jobs in: query schema: &ref_170 type: boolean - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: &ref_164 type: boolean - name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: &ref_165 type: string - name: suspended description: filter on suspended jobs in: query schema: &ref_166 type: boolean - name: running description: filter on running jobs in: query schema: &ref_163 type: boolean - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: &ref_167 type: string - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: &ref_169 type: string - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: &ref_171 type: boolean - name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: &ref_168 type: string - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the `admins` workspace) in: query schema: type: boolean - name: is_not_schedule description: is not a scheduled job in: query schema: type: boolean responses: '200': description: All queued jobs content: application/json: schema: type: array items: type: object properties: &ref_191 workspace_id: type: string id: type: string format: uuid parent_job: type: string format: uuid created_by: type: string created_at: type: string format: date-time started_at: type: string format: date-time scheduled_for: type: string format: date-time running: type: boolean script_path: type: string script_hash: type: string args: type: object description: The arguments to pass to the script or flow additionalProperties: true logs: type: string raw_code: type: string canceled: type: boolean canceled_by: type: string canceled_reason: type: string last_ping: type: string format: date-time job_kind: type: string enum: - script - preview - dependencies - flowdependencies - appdependencies - flow - flowpreview - script_hub - identity - deploymentcallback - singlestepflow - flowscript - flownode - appscript - aiagent - unassigned_script - unassigned_flow - unassigned_singlestepflow schedule_path: type: string permissioned_as: type: string description: > The user (u/userfoo) or group (g/groupfoo) whom the execution of this script will be permissioned_as and by extension its DT_TOKEN. flow_status: type: object properties: &ref_175 step: type: integer modules: type: array items: type: object properties: &ref_154 type: type: string enum: - WaitingForPriorSteps - WaitingForEvents - WaitingForExecutor - InProgress - Success - Failure id: type: string job: type: string format: uuid count: type: integer progress: type: integer iterator: type: object properties: index: type: integer itered: type: array items: {} itered_len: type: integer args: {} flow_jobs: type: array items: type: string flow_jobs_success: type: array items: type: boolean flow_jobs_duration: type: object properties: started_at: type: array items: type: string duration_ms: type: array items: type: integer branch_chosen: type: object properties: type: type: string enum: - branch - default branch: type: integer required: - type branchall: type: object properties: branch: type: integer len: type: integer required: - branch - len approvers: type: array items: type: object properties: resume_id: type: integer approver: type: string required: - resume_id - approver failed_retries: type: array items: type: string format: uuid skipped: type: boolean agent_actions: type: array items: type: object oneOf: - type: object properties: job_id: type: string format: uuid function_name: type: string type: type: string enum: - tool_call module_id: type: string required: - job_id - function_name - type - module_id - type: object properties: call_id: type: string format: uuid function_name: type: string resource_path: type: string type: type: string enum: - mcp_tool_call arguments: type: object required: - call_id - function_name - resource_path - type - type: object properties: type: type: string enum: - web_search required: - type - type: object properties: type: type: string enum: - message required: - content - type agent_actions_success: type: array items: type: boolean required: &ref_155 - type user_states: additionalProperties: true preprocessor_module: allOf: - type: object properties: *ref_154 required: *ref_155 failure_module: allOf: - type: object properties: *ref_154 required: *ref_155 - type: object properties: parent_module: type: string retry: type: object properties: fail_count: type: integer failed_jobs: type: array items: type: string format: uuid required: &ref_176 - step - modules - failure_module workflow_as_code_status: type: object properties: &ref_177 scheduled_for: type: string format: date-time started_at: type: string format: date-time duration_ms: type: number name: type: string raw_flow: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_149 required: *ref_150 is_flow_step: type: boolean language: type: string enum: *ref_94 email: type: string visible_to_owner: type: boolean mem_peak: type: integer tag: type: string priority: type: integer self_wait_time_ms: type: number aggregate_wait_time_ms: type: number suspend: type: number preprocessed: type: boolean worker: type: string required: &ref_192 - id - running - canceled - job_kind - permissioned_as - is_flow_step - email - visible_to_owner - tag /w/{workspace}/jobs/queue/count: get: summary: get queue count operationId: getQueueCount tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the `admins` workspace) in: query schema: type: boolean responses: '200': description: queue count content: application/json: schema: type: object properties: database_length: type: integer suspended: type: integer required: - database_length /w/{workspace}/jobs/completed/count: get: summary: get completed count operationId: getCompletedCount tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: completed count content: application/json: schema: type: object properties: database_length: type: integer required: - database_length /w/{workspace}/jobs/completed/count_jobs: get: summary: count number of completed jobs with filter operationId: countCompletedJobs tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: completed_after_s_ago in: query schema: type: integer - name: success in: query schema: type: boolean - name: tags in: query schema: type: string - name: all_workspaces in: query schema: type: boolean responses: '200': description: Count of completed jobs content: application/json: schema: type: integer /w/{workspace}/jobs/list_filtered_uuids: get: summary: get the ids of all jobs matching the given filters operationId: listFilteredJobsUuids tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: label description: >- filter by exact matching job label. Supports comma-separated list (e.g. 'deploy,release') and negation by prefixing all values with '!' (e.g. '!deploy,!release') in: query schema: &ref_174 type: string - name: worker description: >- filter by worker this job ran on. Supports comma-separated list (e.g. 'worker-1,worker-2') and negation by prefixing all values with '!' (e.g. '!worker-1,!worker-2') in: query schema: *ref_156 - 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_110 - name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: *ref_157 - name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: *ref_158 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_159 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_160 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_161 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_162 - name: created_before description: filter on created before (inclusive) timestamp in: query schema: &ref_182 type: string format: date-time - name: created_after description: filter on created after (exclusive) timestamp in: query schema: &ref_183 type: string format: date-time - name: completed_before description: filter on started before (inclusive) timestamp in: query schema: &ref_184 type: string format: date-time - name: completed_after description: filter on started after (exclusive) timestamp in: query schema: &ref_185 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_186 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_187 type: string format: date-time - name: running description: filter on running jobs in: query schema: *ref_163 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_164 - name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: *ref_165 - name: suspended description: filter on suspended jobs in: query schema: *ref_166 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: *ref_168 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_169 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: is_skipped description: is the job skipped in: query schema: type: boolean - name: is_flow_step description: is the job a flow step in: query schema: type: boolean - name: has_null_parent description: has null parent in: query schema: type: boolean - name: success description: filter on successful jobs in: query schema: type: boolean - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the `admins` workspace) in: query schema: type: boolean - name: is_not_schedule description: is not a scheduled job in: query schema: type: boolean responses: '200': description: uuids of jobs content: application/json: schema: type: array items: type: string /w/{workspace}/jobs/queue/list_filtered_uuids: get: summary: get the ids of all queued jobs matching the given filters operationId: listFilteredQueueUuids tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: order_desc description: order by desc order (default true) in: query schema: *ref_118 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - 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_110 - name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: *ref_157 - name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: *ref_158 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_159 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_160 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_161 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_162 - name: success description: filter on successful jobs in: query schema: *ref_170 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_164 - name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: *ref_165 - name: suspended description: filter on suspended jobs in: query schema: *ref_166 - name: running description: filter on running jobs in: query schema: *ref_163 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_169 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_171 - name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: *ref_168 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: concurrency_key in: query required: false schema: type: string - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the `admins` workspace) in: query schema: type: boolean - name: is_not_schedule description: is not a scheduled job in: query schema: type: boolean responses: '200': description: uuids of jobs content: application/json: schema: type: array items: type: string /w/{workspace}/jobs/queue/cancel_selection: post: summary: cancel jobs based on the given uuids operationId: cancelSelection tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: force_cancel in: query schema: type: boolean - name: all_workspaces in: query schema: type: boolean requestBody: description: uuids of the jobs to cancel required: true content: application/json: schema: type: array items: type: string responses: '200': description: uuids of canceled jobs content: application/json: schema: type: array items: type: string /w/{workspace}/jobs/get_otel_traces/{id}: get: summary: get OpenTelemetry traces for a job operationId: getJobOtelTraces tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 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_173 - webhook - default_email - email - schedule - http - websocket - postgres - kafka - nats - mqtt - sqs - gcp - azure - google - github - 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_173 - name: trigger_path description: The path of the trigger (can contain forward slashes) in: path required: true schema: type: string style: simple explode: false requestBody: description: Optional list of job IDs to cancel required: false content: application/json: schema: type: object properties: job_ids: type: array items: type: string format: uuid description: >- Optional list of specific job UUIDs to cancel. If not provided, all suspended jobs for the trigger will be canceled. responses: '200': description: confirmation message content: application/json: schema: type: string /w/{workspace}/jobs/completed/list: get: summary: list all completed jobs operationId: listCompletedJobs tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: order_desc description: order by desc order (default true) in: query schema: *ref_118 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: label description: >- filter by exact matching job label. Supports comma-separated list (e.g. 'deploy,release') and negation by prefixing all values with '!' (e.g. '!deploy,!release') in: query schema: *ref_174 - name: worker description: >- filter by worker this job ran on. Supports comma-separated list (e.g. 'worker-1,worker-2') and negation by prefixing all values with '!' (e.g. '!worker-1,!worker-2') in: query schema: *ref_156 - 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_110 - name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: *ref_157 - name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: *ref_158 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_159 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_160 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_161 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_162 - name: success description: filter on successful jobs in: query schema: *ref_170 - name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: *ref_165 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_169 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_171 - name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: *ref_168 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: is_skipped description: is the job skipped in: query schema: type: boolean - name: is_flow_step description: is the job a flow step in: query schema: type: boolean - name: has_null_parent description: has null parent in: query schema: type: boolean - name: is_not_schedule description: is not a scheduled job in: query schema: type: boolean responses: '200': description: All completed jobs content: application/json: schema: type: array items: type: object properties: &ref_189 workspace_id: type: string id: type: string format: uuid parent_job: type: string format: uuid created_by: type: string created_at: type: string format: date-time started_at: type: string format: date-time completed_at: type: string format: date-time duration_ms: type: integer success: type: boolean script_path: type: string script_hash: type: string args: type: object description: The arguments to pass to the script or flow additionalProperties: true result: {} logs: type: string deleted: type: boolean raw_code: type: string canceled: type: boolean canceled_by: type: string canceled_reason: type: string job_kind: type: string enum: - script - preview - dependencies - flow - flowdependencies - appdependencies - flowpreview - script_hub - identity - deploymentcallback - singlestepflow - flowscript - flownode - appscript - aiagent - unassigned_script - unassigned_flow - unassigned_singlestepflow schedule_path: type: string permissioned_as: type: string description: > The user (u/userfoo) or group (g/groupfoo) whom the execution of this script will be permissioned_as and by extension its DT_TOKEN. flow_status: type: object properties: *ref_175 required: *ref_176 workflow_as_code_status: type: object properties: *ref_177 raw_flow: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_149 required: *ref_150 is_flow_step: type: boolean language: type: string enum: *ref_94 is_skipped: type: boolean email: type: string visible_to_owner: type: boolean mem_peak: type: integer tag: type: string priority: type: integer labels: type: array items: type: string self_wait_time_ms: type: number aggregate_wait_time_ms: type: number preprocessed: type: boolean worker: type: string required: &ref_190 - id - created_by - duration_ms - created_at - started_at - success - canceled - job_kind - permissioned_as - is_flow_step - is_skipped - email - visible_to_owner - tag /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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 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_178 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_94 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_179 - 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_178 required: *ref_179 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 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_180 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_94 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_181 - 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_180 required: *ref_181 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 operationId: listJobs x-mcp-tool: true tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: label description: >- filter by exact matching job label. Supports comma-separated list (e.g. 'deploy,release') and negation by prefixing all values with '!' (e.g. '!deploy,!release') in: query schema: *ref_174 - name: worker description: >- filter by worker this job ran on. Supports comma-separated list (e.g. 'worker-1,worker-2') and negation by prefixing all values with '!' (e.g. '!worker-1,!worker-2') in: query schema: *ref_156 - 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_110 - name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: *ref_157 - name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: *ref_158 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_159 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_160 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_161 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_162 - name: created_before description: filter on created before (inclusive) timestamp in: query schema: *ref_182 - name: created_after description: filter on created after (exclusive) timestamp in: query schema: *ref_183 - name: completed_before description: filter on started before (inclusive) timestamp in: query schema: *ref_184 - name: completed_after description: filter on started after (exclusive) timestamp in: query schema: *ref_185 - name: created_before_queue description: filter on jobs created before X for jobs in the queue only in: query schema: *ref_186 - name: created_after_queue description: filter on jobs created after X for jobs in the queue only in: query schema: *ref_187 - name: running description: filter on running jobs in: query schema: *ref_163 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_164 - name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: *ref_165 - name: suspended description: filter on suspended jobs in: query schema: *ref_166 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: *ref_168 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_169 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_171 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: trigger_kind description: >- filter by trigger kind. Supports comma-separated list (e.g. 'schedule,webhook') and negation by prefixing all values with '!' (e.g. '!schedule,!webhook') in: query x-go-name: JobTriggerKindParam schema: *ref_188 - name: is_skipped description: is the job skipped in: query schema: type: boolean - name: is_flow_step description: is the job a flow step in: query schema: type: boolean - name: has_null_parent description: has null parent in: query schema: type: boolean - name: success description: filter on successful jobs in: query schema: type: boolean - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the `admins` workspace) in: query schema: type: boolean - name: is_not_schedule description: is not a scheduled job in: query schema: type: boolean - name: excludes_entrypoint_override description: >- exclude jobs that were started with a `_ENTRYPOINT_OVERRIDE` arg (e.g. dynamic-select helper runs and preprocessor previews) in: query schema: type: boolean - name: broad_filter description: >- broad search across multiple fields (case-insensitive substring match on path, tag, schedule path, trigger kind, label) in: query schema: type: string responses: '200': description: All jobs content: application/json: schema: type: array items: oneOf: &ref_193 - allOf: - type: object properties: *ref_189 required: *ref_190 - type: object properties: type: type: string enum: - CompletedJob - allOf: - type: object properties: *ref_191 required: *ref_192 - type: object properties: type: type: string enum: - QueuedJob discriminator: &ref_194 propertyName: type /jobs/db_clock: get: summary: get db clock operationId: getDbClock tags: - job responses: '200': description: the timestamp of the db that can be used to compute the drift content: application/json: schema: type: integer /jobs/completed/count_by_tag: get: summary: Count jobs by tag operationId: countJobsByTag tags: - job parameters: - name: horizon_secs in: query description: >- Past Time horizon in seconds (when to start the count = now - horizon) (default is 3600) required: false schema: type: integer - name: workspace_id in: query description: Specific workspace ID to filter results (optional) required: false schema: type: string responses: '200': description: Job counts by tag content: application/json: schema: type: array items: type: object properties: tag: type: string count: type: integer required: - tag - count /w/{workspace}/jobs_u/get/{id}: get: summary: get job operationId: getJob x-mcp-tool: true tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: no_logs in: query schema: type: boolean - name: no_code in: query schema: type: boolean - name: approval_token in: query description: >- Approval token granting read access to the job when not logged in. The token must be the one issued for this job's flow (i.e. the flow id used when generating the approval URL). schema: type: string responses: '200': description: job details content: application/json: schema: oneOf: *ref_193 discriminator: *ref_194 /w/{workspace}/jobs_u/get_root_job_id/{id}: get: summary: get root job id operationId: getRootJobId tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: get root job id content: application/json: schema: type: string /w/{workspace}/jobs_u/get_logs/{id}: get: summary: get job logs operationId: getJobLogs x-mcp-tool: true tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: remove_ansi_warnings in: query schema: type: boolean responses: '200': description: job details content: text/plain: schema: type: string /w/{workspace}/jobs_u/get_flow_all_logs/{id}: get: summary: get all logs for a flow job operationId: getFlowAllLogs tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: concatenated logs of all flow steps content: text/plain: schema: type: string /w/{workspace}/jobs_u/get_completed_logs_tail/{id}: get: summary: get completed job logs tail operationId: getCompletedJobLogsTail tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: completed job logs tail content: text/plain: schema: type: string /w/{workspace}/jobs_u/get_args/{id}: get: summary: get job args operationId: getJobArgs tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 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 operationId: getJobUpdates tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: running in: query schema: type: boolean - name: log_offset in: query schema: type: integer - name: stream_offset in: query schema: type: integer - name: get_progress in: query schema: type: boolean - name: no_logs in: query schema: type: boolean responses: '200': description: job details content: application/json: schema: type: object properties: running: type: boolean completed: type: boolean new_logs: type: string log_offset: type: integer mem_peak: type: integer progress: type: integer stream_offset: type: integer new_result_stream: type: string flow_status: type: object properties: *ref_175 required: *ref_176 workflow_as_code_status: type: object properties: *ref_177 /w/{workspace}/jobs_u/getupdate_sse/{id}: get: summary: get job updates via server-sent events operationId: getJobUpdatesSSE tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: running in: query schema: type: boolean - name: log_offset in: query schema: type: integer - name: stream_offset in: query schema: type: integer - name: get_progress in: query schema: type: boolean - name: only_result in: query schema: type: boolean - name: no_logs in: query schema: type: boolean - name: fast in: query schema: type: boolean responses: '200': description: server-sent events stream of job updates content: text/event-stream: schema: type: string /w/{workspace}/jobs_u/get_log_file/{path}: get: summary: get log file from object store operationId: getLogFileFromStore tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: type: string responses: '200': description: job log content: text/plain: schema: type: string /w/{workspace}/jobs_u/get_flow_debug_info/{id}: get: summary: get flow debug info operationId: getFlowDebugInfo tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: flow debug info details content: application/json: schema: {} /w/{workspace}/jobs_u/completed/get/{id}: get: summary: get completed job operationId: getCompletedJob tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: job details content: application/json: schema: type: object properties: *ref_189 required: *ref_190 /w/{workspace}/jobs_u/completed/get_result/{id}: get: summary: get completed job result operationId: getCompletedJobResult tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: suspended_job in: query schema: type: string - name: resume_id in: query schema: type: integer - name: secret in: query schema: type: string - name: approver in: query schema: type: string responses: '200': description: result content: application/json: schema: {} /w/{workspace}/jobs_u/completed/get_result_maybe/{id}: get: summary: get completed job result if job is completed operationId: getCompletedJobResultMaybe tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: get_started in: query schema: &ref_313 type: boolean responses: '200': description: result content: application/json: schema: type: object properties: completed: type: boolean result: {} success: type: boolean started: type: boolean required: - completed - result /w/{workspace}/jobs_u/completed/get_timing/{id}: get: summary: get completed job timing operationId: getCompletedJobTiming tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: job timing details content: application/json: schema: type: object properties: created_at: type: string format: date-time started_at: type: string format: date-time duration_ms: type: integer required: - created_at /w/{workspace}/jobs/completed/delete/{id}: post: summary: delete completed job (erase content but keep run id) operationId: deleteCompletedJob tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: job details content: application/json: schema: type: object properties: *ref_189 required: *ref_190 /w/{workspace}/jobs_u/queue/cancel/{id}: post: summary: cancel queued or running job operationId: cancelQueuedJob tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 requestBody: description: reason required: true content: application/json: schema: type: object properties: reason: type: string responses: '200': description: job canceled content: text/plain: schema: type: string /w/{workspace}/jobs_u/queue/cancel_persistent/{path}: post: summary: cancel all queued jobs for persistent script operationId: cancelPersistentQueuedJobs tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: reason required: true content: application/json: schema: type: object properties: reason: type: string responses: '200': description: persistent job scaled down to zero content: text/plain: schema: type: string /w/{workspace}/jobs_u/queue/force_cancel/{id}: post: summary: force cancel queued job operationId: forceCancelQueuedJob tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 requestBody: description: reason required: true content: application/json: schema: type: object properties: reason: type: string responses: '200': description: job canceled content: text/plain: schema: type: string /w/{workspace}/jobs/queue/position/{scheduled_for}: get: summary: get queue position for a job operationId: getQueuePosition tags: - job parameters: - 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_172 responses: '200': description: scheduled for timestamp content: application/json: schema: type: integer /w/{workspace}/jobs/job_signature/{id}/{resume_id}: get: summary: create an HMac signature given a job id and a resume id operationId: createJobSignature tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: resume_id in: path required: true schema: type: integer - name: approver in: query schema: type: string responses: '200': description: job signature content: text/plain: schema: type: string /w/{workspace}/jobs/resume_urls/{id}/{resume_id}: get: summary: get resume urls given a job_id, resume_id and a nonce to resume a flow operationId: getResumeUrls tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: resume_id in: path required: true schema: type: integer - name: approver in: query schema: type: string - name: flow_level in: query description: >- If true, generate resume URLs for the parent flow instead of the specific step. This allows pre-approvals that can be consumed by any later suspend step in the same flow. schema: type: boolean responses: '200': description: url endpoints content: application/json: schema: type: object properties: approvalPage: type: string resume: type: string cancel: type: string required: - approvalPage - resume - cancel /w/{workspace}/jobs/slack_approval/{id}: get: summary: generate interactive slack approval for suspended job operationId: getSlackApprovalPayload tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: approver in: query schema: type: string - name: message in: query schema: type: string - name: slack_resource_path in: query required: true schema: type: string - name: channel_id in: query required: true schema: type: string - name: flow_step_id in: query required: true schema: type: string - name: default_args_json in: query required: false schema: type: string - name: dynamic_enums_json in: query required: false schema: type: string - name: resume_button_text in: query required: false schema: type: string - name: cancel_button_text in: query required: false schema: type: string responses: '200': description: Interactive slack approval message sent successfully /w/{workspace}/jobs/teams_approval/{id}: get: summary: generate interactive teams approval for suspended job operationId: getTeamsApprovalPayload tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: approver in: query schema: type: string - name: message in: query schema: type: string - name: team_name in: query required: true schema: type: string - name: channel_name in: query required: true schema: type: string - name: flow_step_id in: query required: true schema: type: string - name: default_args_json in: query required: false schema: type: string - name: dynamic_enums_json in: query required: false schema: type: string - name: resume_button_text in: query required: false schema: type: string - name: cancel_button_text in: query required: false schema: type: string responses: '200': description: Interactive slack approval message sent successfully /w/{workspace}/jobs_u/flow/resume_suspended/{job_id}: post: summary: resume or cancel a suspended flow/WAC job description: > Resume or cancel a suspended flow/WAC job. Uses approval rules to determine authorization. Either a valid approval_token or an authenticated session is required. operationId: resumeSuspended tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: job_id in: path required: true schema: type: string format: uuid requestBody: required: true content: application/json: schema: type: object properties: payload: description: payload to send to the resumed job approval_token: type: string description: approval token for unauthenticated access approved: type: boolean description: whether to approve (true) or cancel (false) the job default: true responses: '201': description: job resumed content: text/plain: schema: type: string /w/{workspace}/jobs_u/flow/approval_info/{job_id}: get: summary: get approval info for a suspended flow/WAC job description: > Get approval info for a suspended flow/WAC job. Returns form schema, approval rules, and whether the current user can approve. Either a valid token query parameter or an authenticated session is required. operationId: getApprovalInfo tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: job_id in: path required: true schema: type: string format: uuid - name: token in: query required: false schema: type: string description: approval token for unauthenticated access responses: '200': description: approval info content: application/json: schema: type: object required: - flow_id - can_approve - user_auth_required - approvers properties: flow_id: type: string format: uuid form_schema: description: form schema for the approval step description: description: description of the approval step approval_conditions: type: object properties: user_auth_required: type: boolean user_groups_required: type: array items: type: string self_approval_disabled: type: boolean required: - user_auth_required - user_groups_required - self_approval_disabled can_approve: type: boolean description: whether the current user/token holder can approve user_auth_required: type: boolean description: whether user authentication is required to approve hide_cancel: type: boolean description: whether to hide the cancel button in the UI approvers: type: array items: type: object required: - resume_id - approver properties: resume_id: type: integer approver: type: string /w/{workspace}/jobs_u/resume/{id}/{resume_id}/{signature}: get: summary: resume a job for a suspended flow operationId: resumeSuspendedJobGet tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - 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_117 - name: resume_id in: path required: true schema: type: integer - name: signature in: path required: true schema: type: string - name: approver in: query schema: type: string responses: '201': description: job resumed content: text/plain: schema: type: string post: summary: resume a job for a suspended flow operationId: resumeSuspendedJobPost tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: resume_id in: path required: true schema: type: integer - name: signature in: path required: true schema: type: string - name: approver in: query schema: type: string requestBody: required: true content: application/json: schema: type: object responses: '201': description: job resumed content: text/plain: schema: type: string /w/{workspace}/jobs/flow/user_states/{id}/{key}: post: summary: set flow user state at a given key operationId: setFlowUserState tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: key in: path required: true schema: type: string requestBody: description: new value required: true content: application/json: schema: {} responses: '200': description: flow user state updated content: text/plain: schema: type: string get: summary: get flow user state at a given key operationId: getFlowUserState tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: key in: path required: true schema: type: string responses: '200': description: flow user state updated content: application/json: schema: {} /w/{workspace}/jobs/flow/resume/{id}: post: summary: resume a job for a suspended flow as an owner operationId: resumeSuspendedFlowAsOwner tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 requestBody: required: true content: application/json: schema: type: object responses: '201': description: job resumed content: text/plain: schema: type: string /w/{workspace}/jobs_u/cancel/{id}/{resume_id}/{signature}: get: summary: cancel a job for a suspended flow operationId: cancelSuspendedJobGet tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: resume_id in: path required: true schema: type: integer - name: signature in: path required: true schema: type: string - name: approver in: query schema: type: string responses: '201': description: job canceled content: text/plain: schema: type: string post: summary: cancel a job for a suspended flow operationId: cancelSuspendedJobPost tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: resume_id in: path required: true schema: type: integer - name: signature in: path required: true schema: type: string - name: approver in: query schema: type: string requestBody: required: true content: application/json: schema: type: object responses: '201': description: job canceled content: text/plain: schema: type: string /w/{workspace}/jobs_u/get_flow/{id}/{resume_id}/{signature}: get: summary: get parent flow job of suspended job operationId: getSuspendedJobFlow tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 - name: resume_id in: path required: true schema: type: integer - name: signature in: path required: true schema: type: string - name: approver in: query schema: type: string responses: '200': description: parent flow details content: application/json: schema: type: object properties: job: oneOf: *ref_193 discriminator: *ref_194 approvers: type: array items: type: object properties: resume_id: type: integer approver: type: string required: - resume_id - approver required: - job - approvers /schedules/preview: post: summary: preview schedule operationId: previewSchedule tags: - schedule requestBody: description: schedule required: true content: application/json: schema: type: object properties: schedule: type: string timezone: type: string cron_version: type: string required: - schedule - timezone responses: '200': description: List of 5 estimated upcoming execution events (in UTC) content: application/json: schema: type: array items: type: string format: date-time /w/{workspace}/schedules/create: post: summary: create schedule operationId: createSchedule x-mcp-tool: true x-mcp-instructions: > Creates a new schedule. The schedule should include seconds. You should get the schema of the script or flow before creating the schedule to correctly specify the arguments needed. tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new schedule required: true content: application/json: schema: type: object properties: &ref_436 path: type: string description: >- The unique Windmill path for this schedule. Must be of the form `u//` or `f//`. schedule: type: string description: >- Cron expression with 6 fields (seconds, minutes, hours, day of month, month, day of week). Example '0 0 12 * * *' for daily at noon timezone: type: string description: >- IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York') script_path: type: string description: Path to the script or flow to execute when triggered is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true enabled: type: boolean description: >- Whether the schedule is currently active and will trigger jobs on_failure: type: string nullable: true description: Path to a script or flow to run when the scheduled job fails on_failure_times: type: number nullable: true description: >- Number of consecutive failures before the on_failure handler is triggered (default 1) on_failure_exact: type: boolean nullable: true description: >- If true, trigger on_failure handler only on exactly N failures, not on every failure after N on_failure_extra_args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_recovery: type: string nullable: true description: >- Path to a script or flow to run when the schedule recovers after failures on_recovery_times: type: number nullable: true description: >- Number of consecutive successes before the on_recovery handler is triggered (default 1) on_recovery_extra_args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_success: type: string nullable: true description: >- Path to a script or flow to run after each successful execution on_success_extra_args: nullable: true type: object description: The arguments to pass to the script or flow 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: nullable: true type: object description: Retry configuration for failed module executions properties: &ref_197 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_195 required: *ref_196 no_flow_overlap: type: boolean description: >- If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs) summary: type: string nullable: true description: Short summary describing the purpose of this schedule description: type: string nullable: true description: Detailed description of what this schedule does tag: type: string nullable: true description: Worker tag to route jobs to specific worker groups paused_until: type: string nullable: true format: date-time description: >- ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time cron_version: type: string nullable: true description: >- Cron parser version. Use 'v2' for extended syntax with additional features dynamic_skip: type: string nullable: true description: >- Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false) permissioned_as: type: string description: >- The user or group this schedule runs as. Used during deployment to preserve the original schedule owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_437 - path - schedule - timezone - script_path - is_flow - args responses: '201': description: schedule created content: text/plain: schema: type: string /w/{workspace}/schedules/update/{path}: post: summary: update schedule operationId: updateSchedule x-mcp-tool: true x-mcp-instructions: > Updates a schedule. The schedule should include seconds. You should get the schema of the script or flow before updating the schedule to correctly specify the arguments needed. tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated schedule required: true content: application/json: schema: type: object properties: &ref_438 schedule: type: string description: >- Cron expression with 6 fields (seconds, minutes, hours, day of month, month, day of week). Example '0 0 12 * * *' for daily at noon timezone: type: string description: >- IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York') args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_failure: type: string nullable: true description: Path to a script or flow to run when the scheduled job fails on_failure_times: type: number nullable: true description: >- Number of consecutive failures before the on_failure handler is triggered (default 1) on_failure_exact: type: boolean nullable: true description: >- If true, trigger on_failure handler only on exactly N failures, not on every failure after N on_failure_extra_args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_recovery: type: string nullable: true description: >- Path to a script or flow to run when the schedule recovers after failures on_recovery_times: type: number nullable: true description: >- Number of consecutive successes before the on_recovery handler is triggered (default 1) on_recovery_extra_args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_success: type: string nullable: true description: >- Path to a script or flow to run after each successful execution on_success_extra_args: nullable: true type: object description: The arguments to pass to the script or flow 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: nullable: true type: object description: Retry configuration for failed module executions properties: *ref_197 no_flow_overlap: type: boolean description: >- If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs) summary: type: string nullable: true description: Short summary describing the purpose of this schedule description: type: string nullable: true description: Detailed description of what this schedule does tag: type: string nullable: true description: Worker tag to route jobs to specific worker groups paused_until: type: string nullable: true format: date-time description: >- ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time cron_version: type: string nullable: true description: >- Cron parser version. Use 'v2' for extended syntax with additional features dynamic_skip: type: string nullable: true description: >- Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false) permissioned_as: type: string nullable: true description: >- The user or group this schedule runs as (e.g., 'u/admin' or 'g/mygroup'). Only admins and wm_deployers can set this via preserve_permissioned_as. preserve_permissioned_as: type: boolean nullable: true description: >- If true and user is admin/wm_deployers, preserve the provided permissioned_as instead of using the deploying user's identity labels: type: array items: type: string required: &ref_439 - schedule - timezone - args responses: '200': description: schedule updated content: text/plain: schema: type: string /w/{workspace}/schedules/setenabled/{path}: post: summary: set enabled schedule operationId: setScheduleEnabled tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated schedule enable required: true content: application/json: schema: type: object properties: enabled: type: boolean force: type: boolean description: > Bypass the parent-state conflict warning when enabling a schedule in a fork whose parent has the same path enabled. required: - enabled responses: '200': description: schedule enabled set content: text/plain: schema: type: string /w/{workspace}/schedules/delete/{path}: delete: summary: delete schedule operationId: deleteSchedule x-mcp-tool: true tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: schedule deleted content: text/plain: schema: type: string /w/{workspace}/schedules/get/{path}: get: summary: get schedule operationId: getSchedule x-mcp-tool: true tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: schedule deleted content: application/json: schema: type: object properties: &ref_198 path: type: string description: >- The unique Windmill path for this schedule. Must be of the form `u//` or `f//`. 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: nullable: true type: object description: The arguments to pass to the script or flow 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 permissioned_as: type: string description: >- The user or group this schedule runs as (e.g., 'u/admin' or 'g/mygroup') error: type: string nullable: true description: Last error message if the schedule failed to trigger on_failure: type: string nullable: true description: >- Path to a script or flow to run when the scheduled job fails on_failure_times: type: number nullable: true description: >- Number of consecutive failures before the on_failure handler is triggered (default 1) on_failure_exact: type: boolean nullable: true description: >- If true, trigger on_failure handler only on exactly N failures, not on every failure after N on_failure_extra_args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_recovery: type: string nullable: true description: >- Path to a script or flow to run when the schedule recovers after failures on_recovery_times: type: number nullable: true description: >- Number of consecutive successes before the on_recovery handler is triggered (default 1) on_recovery_extra_args: nullable: true type: object description: The arguments to pass to the script or flow additionalProperties: true on_success: type: string nullable: true description: >- Path to a script or flow to run after each successful execution on_success_extra_args: nullable: true type: object description: The arguments to pass to the script or flow 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: nullable: true type: object description: Retry configuration for failed module executions properties: *ref_197 summary: type: string nullable: true description: Short summary describing the purpose of this schedule description: type: string nullable: true 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 nullable: true description: Worker tag to route jobs to specific worker groups paused_until: type: string format: date-time nullable: true description: >- ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time cron_version: type: string nullable: true description: >- Cron parser version. Use 'v2' for extended syntax with additional features dynamic_skip: type: string nullable: true description: >- Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false) labels: type: array items: type: string default: [] required: &ref_199 - path - edited_by - edited_at - schedule - script_path - timezone - extra_perms - is_flow - enabled - email - permissioned_as /w/{workspace}/schedules/exists/{path}: get: summary: does schedule exists operationId: existsSchedule tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: schedule exists content: application/json: schema: type: boolean /w/{workspace}/schedules/list: get: summary: list schedules operationId: listSchedules x-mcp-tool: true tags: - schedule parameters: - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: path description: filter by path (script path) in: query schema: type: string - name: is_flow description: filter schedules by whether they target a flow in: query schema: type: boolean - name: path_start description: filter schedules by path prefix in: query schema: type: string - name: schedule_path description: exact match on the schedule's path in: query schema: type: string - name: description description: pattern match filter for description field (case-insensitive) in: query schema: type: string - name: summary description: pattern match filter for summary field (case-insensitive) in: query schema: type: string - name: broad_filter description: >- broad search across multiple fields (case-insensitive substring match) in: query schema: type: string - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: schedule list content: application/json: schema: type: array items: type: object properties: *ref_198 required: *ref_199 /w/{workspace}/schedules/list_with_jobs: get: summary: list schedules with last 20 jobs operationId: listSchedulesWithJobs tags: - schedule 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: schedule list content: application/json: schema: type: array items: allOf: &ref_435 - type: object properties: *ref_198 required: *ref_199 - type: object properties: jobs: type: array items: type: object properties: id: type: string success: type: boolean duration_ms: type: number required: - id - success - duration_ms /w/{workspace}/schedules/setdefaulthandler: post: summary: Set default error or recoevery handler operationId: setDefaultErrorOrRecoveryHandler tags: - schedule parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: Handler description required: true content: application/json: schema: type: object properties: handler_type: type: string enum: - error - recovery - success override_existing: type: boolean path: type: string extra_args: type: object number_of_occurence: type: integer number_of_occurence_exact: type: boolean workspace_handler_muted: type: boolean required: - handler_type - override_existing responses: '201': description: default error handler set /w/{workspace}/openapi/generate: post: summary: generate openapi spec from http routes/webhook operationId: generateOpenapiSpec tags: - openapi parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: openapi spec info and url content: application/json: schema: type: object properties: &ref_201 info: type: object properties: &ref_445 title: type: string version: type: string description: type: string terms_of_service: type: string contact: type: object properties: name: type: string url: type: string email: type: string license: type: object properties: name: type: string identifier: type: string url: type: string required: - name required: &ref_446 - title - version url: type: string openapi_spec_format: type: string enum: &ref_440 - yaml - json http_route_filters: type: array items: type: object properties: &ref_441 folder_regex: type: string path_regex: type: string route_path_regex: type: string required: &ref_442 - folder_regex - path_regex - route_path_regex webhook_filters: type: array items: type: object properties: &ref_443 user_or_folder_regex: type: string enum: - '*' - u - f user_or_folder_regex_value: type: string path: type: string runnable_kind: type: string enum: *ref_200 required: &ref_444 - user_or_folder_regex - user_or_folder_regex_value - path - runnable_kind responses: '200': description: openapi spec content: text/plain: schema: type: string /w/{workspace}/openapi/download: post: summary: Download the OpenAPI v3.1 spec as a file operationId: DownloadOpenapiSpec tags: - openapi parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: openapi spec info and url content: application/json: schema: type: object properties: *ref_201 responses: '200': description: Downloaded OpenAPI spec content: application/octet-stream: schema: type: string format: binary /w/{workspace}/http_triggers/create_many: post: summary: create many HTTP triggers operationId: createHttpTriggers tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new http trigger required: true content: application/json: schema: type: array items: type: object properties: &ref_202 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. 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 nullable: true description: Short summary describing the purpose of this trigger description: type: string nullable: true description: Detailed description of what this trigger does static_asset_config: type: object nullable: true 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_204 - get - post - put - delete - patch authentication_resource_path: type: string nullable: true description: >- Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods) is_async: type: boolean description: Deprecated, use request_type instead request_type: 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_205 - 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_206 - none - windmill - api_key - basic_http - custom_script - signature is_static_website: type: boolean description: >- If true, serves static files from S3/storage instead of running a script wrap_body: type: boolean description: If true, wraps the request body in a 'body' parameter mode: description: job trigger mode type: string enum: &ref_207 - 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_203 - path - script_path - route_path - is_flow - authentication_method - http_method - is_static_website responses: '201': description: http trigger created content: text/plain: schema: type: string /w/{workspace}/http_triggers/create: post: summary: create http trigger operationId: createHttpTrigger tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new http trigger required: true content: application/json: schema: type: object properties: *ref_202 required: *ref_203 responses: '201': description: http trigger created content: text/plain: schema: type: string /w/{workspace}/http_triggers/update/{path}: post: summary: update http trigger operationId: updateHttpTrigger tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_447 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. 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 nullable: true description: Short summary describing the purpose of this trigger description: type: string nullable: true 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 nullable: true 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 nullable: true 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_204 is_async: type: boolean 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_205 authentication_method: description: >- How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature' type: string enum: *ref_206 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_448 - path - script_path - is_flow - kind - authentication_method - http_method - is_static_website responses: '200': description: http trigger updated content: text/plain: schema: type: string /w/{workspace}/http_triggers/delete/{path}: delete: summary: delete http trigger operationId: deleteHttpTrigger tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: http trigger deleted content: text/plain: schema: type: string /w/{workspace}/http_triggers/get/{path}: get: summary: get http trigger operationId: getHttpTrigger tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: http trigger deleted content: application/json: schema: allOf: &ref_208 - type: object properties: &ref_214 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: Path to the script or flow to execute when triggered permissioned_as: type: string description: >- The user or group this trigger runs as (permissioned_as) extra_perms: type: object description: Additional permissions for this trigger additionalProperties: type: boolean workspace_id: type: string description: The workspace this trigger belongs to edited_by: type: string description: Username of the last person who edited this trigger edited_at: type: string format: date-time description: Timestamp of the last edit is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 labels: type: array items: type: string default: [] required: &ref_215 - path - script_path - permissioned_as - extra_perms - workspace_id - edited_by - edited_at - is_flow - mode type: object properties: &ref_209 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 nullable: true 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_204 authentication_resource_path: type: string nullable: true description: >- Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods) summary: type: string nullable: true description: Short summary describing the purpose of this trigger description: type: string nullable: true 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_205 authentication_method: description: >- How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature' type: string enum: *ref_206 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_210 - route_path - request_type - authentication_method - http_method - is_static_website - workspaced_route - wrap_body - raw_string /w/{workspace}/http_triggers/list: get: summary: list http triggers operationId: listHttpTriggers tags: - http_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: http trigger list content: application/json: schema: type: array items: allOf: *ref_208 type: object properties: *ref_209 required: *ref_210 /w/{workspace}/http_triggers/exists/{path}: get: summary: does http trigger exists operationId: existsHttpTrigger tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: http trigger exists content: application/json: schema: type: boolean /w/{workspace}/http_triggers/route_exists: post: summary: does route exists operationId: existsRoute tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: route exists request required: true content: application/json: schema: type: object properties: route_path: type: string http_method: type: string enum: *ref_204 trigger_path: type: string workspaced_route: type: boolean required: - route_path - http_method responses: '200': description: route exists content: application/json: schema: type: boolean /w/{workspace}/http_triggers/setmode/{path}: post: summary: enable/disable http trigger operationId: setHttpTriggerMode tags: - http_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: http trigger enable/disable content: text/plain: schema: type: string /w/{workspace}/websocket_triggers/create: post: summary: create websocket trigger operationId: createWebsocketTrigger tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new websocket trigger required: true content: application/json: schema: type: object properties: &ref_449 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script url: type: string description: >- The WebSocket URL to connect to (can be a static URL or computed by a runnable) mode: description: job trigger mode type: string enum: *ref_207 filters: type: array description: >- Array of key-value filters to match incoming messages (only matching messages trigger the script) items: type: object properties: key: type: string value: {} required: - key - value filter_logic: type: string enum: - and - or default: and description: >- Logic to apply when evaluating filters. 'and' requires all filters to match, 'or' requires any filter to match. initial_messages: type: array nullable: true description: >- Messages to send immediately after connecting (can be raw strings or computed by runnables) items: anyOf: &ref_211 - type: object properties: raw_message: type: string required: - raw_message - type: object properties: runnable_result: type: object properties: path: type: string args: type: object description: The arguments to pass to the script or flow additionalProperties: true is_flow: type: boolean required: - path - args - is_flow required: - runnable_result url_runnable_args: description: The arguments to pass to the script or flow nullable: true 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 heartbeat: nullable: true description: Optional periodic heartbeat message configuration type: object properties: &ref_212 interval_secs: type: integer minimum: 1 description: Interval in seconds between heartbeat messages message: type: string description: >- Message to send as heartbeat. Use {{state}} as a placeholder for a value extracted from incoming messages (see state_field). state_field: type: string description: >- Optional. Top-level JSON field to extract from incoming messages. The extracted value replaces {{state}} in the heartbeat message. required: &ref_213 - interval_secs - message error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_450 - path - script_path - url - is_flow - filters - can_return_message - can_return_error_result responses: '201': description: websocket trigger created content: text/plain: schema: type: string /w/{workspace}/websocket_triggers/update/{path}: post: summary: update websocket trigger operationId: updateWebsocketTrigger tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_451 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 Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script filters: type: array description: >- Array of key-value filters to match incoming messages (only matching messages trigger the script) items: type: object properties: key: type: string value: {} required: - key - value filter_logic: type: string enum: - and - or default: and description: >- Logic to apply when evaluating filters. 'and' requires all filters to match, 'or' requires any filter to match. initial_messages: type: array nullable: true description: >- Messages to send immediately after connecting (can be raw strings or computed by runnables) items: anyOf: *ref_211 url_runnable_args: description: The arguments to pass to the script or flow nullable: true 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 heartbeat: nullable: true description: Optional periodic heartbeat message configuration type: object properties: *ref_212 required: *ref_213 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_452 - path - script_path - url - is_flow - filters - can_return_message - can_return_error_result responses: '200': description: websocket trigger updated content: text/plain: schema: type: string /w/{workspace}/websocket_triggers/delete/{path}: delete: summary: delete websocket trigger operationId: deleteWebsocketTrigger tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: websocket trigger deleted content: text/plain: schema: type: string /w/{workspace}/websocket_triggers/get/{path}: get: summary: get websocket trigger operationId: getWebsocketTrigger tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: websocket trigger deleted content: application/json: schema: allOf: &ref_216 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_217 url: type: string description: >- The WebSocket URL to connect to (can be a static URL or computed by a runnable) server_id: type: string description: >- ID of the server currently handling this trigger (internal) last_server_ping: type: string format: date-time description: Timestamp of last server heartbeat (internal) error: type: string description: Last error message if the trigger failed filters: type: array description: >- Array of key-value filters to match incoming messages (only matching messages trigger the script) items: type: object properties: key: type: string value: {} required: - key - value filter_logic: type: string enum: - and - or default: and description: >- Logic to apply when evaluating filters. 'and' requires all filters to match, 'or' requires any filter to match. initial_messages: type: array nullable: true description: >- Messages to send immediately after connecting (can be raw strings or computed by runnables) items: anyOf: *ref_211 url_runnable_args: description: The arguments to pass to the script or flow nullable: true 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 heartbeat: nullable: true description: Optional periodic heartbeat message configuration type: object properties: *ref_212 required: *ref_213 error_handler_path: type: string description: >- Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_218 - url - filters - can_return_message - can_return_error_result /w/{workspace}/websocket_triggers/list: get: summary: list websocket triggers operationId: listWebsocketTriggers tags: - websocket_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: websocket trigger list content: application/json: schema: type: array items: allOf: *ref_216 type: object properties: *ref_217 required: *ref_218 /w/{workspace}/websocket_triggers/exists/{path}: get: summary: does websocket trigger exists operationId: existsWebsocketTrigger tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: websocket trigger exists content: application/json: schema: type: boolean /w/{workspace}/websocket_triggers/setmode/{path}: post: summary: set enabled websocket trigger operationId: setWebsocketTriggerMode tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated websocket trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: websocket trigger enabled set content: text/plain: schema: type: string /w/{workspace}/websocket_triggers/test: post: summary: test websocket connection operationId: testWebsocketConnection tags: - websocket_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test websocket connection required: true content: application/json: schema: type: object properties: url: type: string url_runnable_args: type: object description: The arguments to pass to the script or flow additionalProperties: true can_return_message: type: boolean required: - url - can_return_message responses: '200': description: successfuly connected to websocket content: text/plain: schema: type: string /w/{workspace}/kafka_triggers/create: post: summary: create kafka trigger operationId: createKafkaTrigger tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new kafka trigger required: true content: application/json: schema: type: object properties: &ref_484 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script kafka_resource_path: type: string description: >- Path to the Kafka resource containing connection configuration group_id: type: string description: Kafka consumer group ID for this trigger topics: type: array items: type: string description: Array of Kafka topic names to subscribe to filters: type: array items: type: object properties: key: type: string value: {} required: - key - value filter_logic: type: string enum: - and - or default: and description: >- Logic to apply when evaluating filters. 'and' requires all filters to match, 'or' requires any filter to match. auto_offset_reset: type: string enum: - latest - earliest default: latest description: >- Initial offset behavior when consumer group has no committed offset. auto_commit: type: boolean default: true description: >- When true (default), offsets are committed automatically after receiving each message. When false, you must manually commit offsets using the commit_offsets endpoint. mode: description: job trigger mode type: string enum: *ref_207 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_485 - path - script_path - is_flow - kafka_resource_path - group_id - topics - filters responses: '201': description: kafka trigger created content: text/plain: schema: type: string /w/{workspace}/kafka_triggers/update/{path}: post: summary: update kafka trigger operationId: updateKafkaTrigger tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_486 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 filter_logic: type: string enum: - and - or default: and description: >- Logic to apply when evaluating filters. 'and' requires all filters to match, 'or' requires any filter to match. auto_offset_reset: type: string enum: - latest - earliest default: latest description: >- Initial offset behavior when consumer group has no committed offset. auto_commit: type: boolean default: true description: >- When true (default), offsets are committed automatically after receiving each message. When false, you must manually commit offsets using the commit_offsets endpoint. path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_487 - path - script_path - kafka_resource_path - group_id - topics - filters - is_flow responses: '200': description: kafka trigger updated content: text/plain: schema: type: string /w/{workspace}/kafka_triggers/delete/{path}: delete: summary: delete kafka trigger operationId: deleteKafkaTrigger tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: kafka trigger deleted content: text/plain: schema: type: string /w/{workspace}/kafka_triggers/get/{path}: get: summary: get kafka trigger operationId: getKafkaTrigger tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: kafka trigger deleted content: application/json: schema: allOf: &ref_219 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_220 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 filter_logic: type: string enum: - and - or default: and description: >- Logic to apply when evaluating filters. 'and' requires all filters to match, 'or' requires any filter to match. auto_offset_reset: type: string enum: - latest - earliest default: latest description: >- Initial offset behavior when consumer group has no committed offset. 'latest' starts from new messages only, 'earliest' starts from the beginning. auto_commit: type: boolean default: true description: >- When true (default), offsets are committed automatically after receiving each message. When false, you must manually commit offsets using the commit_offsets endpoint. server_id: type: string description: >- ID of the server currently handling this trigger (internal) last_server_ping: type: string format: date-time description: Timestamp of last server heartbeat (internal) error: type: string description: Last error message if the trigger failed error_handler_path: type: string description: >- Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_221 - kafka_resource_path - group_id - topics - filters /w/{workspace}/kafka_triggers/list: get: summary: list kafka triggers operationId: listKafkaTriggers tags: - kafka_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: kafka trigger list content: application/json: schema: type: array items: allOf: *ref_219 type: object properties: *ref_220 required: *ref_221 /w/{workspace}/kafka_triggers/exists/{path}: get: summary: does kafka trigger exists operationId: existsKafkaTrigger tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: kafka trigger exists content: application/json: schema: type: boolean /w/{workspace}/kafka_triggers/setmode/{path}: post: summary: set enabled kafka trigger operationId: setKafkaTriggerMode tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated kafka trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: kafka trigger enabled set content: text/plain: schema: type: string /w/{workspace}/kafka_triggers/test: post: summary: test kafka connection operationId: testKafkaConnection tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test kafka connection required: true content: application/json: schema: type: object properties: connection: type: object required: - connection responses: '200': description: successfuly connected to kafka brokers content: text/plain: schema: type: string /w/{workspace}/kafka_triggers/reset_offsets/{path}: post: summary: reset kafka trigger offsets to earliest operationId: resetKafkaOffsets tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: kafka trigger offsets reset successfully /w/{workspace}/kafka_triggers/commit_offsets/{path}: post: summary: commit kafka offsets for a specific trigger operationId: commitKafkaOffsets tags: - kafka_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: offsets to commit required: true content: application/json: schema: type: object properties: topic: type: string partition: type: integer format: int32 offset: type: integer format: int64 required: - topic - partition - offset responses: '200': description: kafka offsets committed successfully /w/{workspace}/nats_triggers/create: post: summary: create nats trigger operationId: createNatsTrigger tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new nats trigger required: true content: application/json: schema: type: object properties: &ref_488 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. 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 nullable: true description: JetStream stream name (required when use_jetstream is true) consumer_name: type: string nullable: true description: >- JetStream consumer name (required when use_jetstream is true) subjects: type: array items: type: string description: Array of NATS subjects to subscribe to mode: description: job trigger mode type: string enum: *ref_207 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_489 - path - script_path - is_flow - nats_resource_path - use_jetstream - subjects responses: '201': description: nats trigger created content: text/plain: schema: type: string /w/{workspace}/nats_triggers/update/{path}: post: summary: update nats trigger operationId: updateNatsTrigger tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_490 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 nullable: true description: JetStream stream name (required when use_jetstream is true) consumer_name: type: string nullable: true 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 Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_491 - path - script_path - nats_resource_path - use_jetstream - subjects - is_flow responses: '200': description: nats trigger updated content: text/plain: schema: type: string /w/{workspace}/nats_triggers/delete/{path}: delete: summary: delete nats trigger operationId: deleteNatsTrigger tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: nats trigger deleted content: text/plain: schema: type: string /w/{workspace}/nats_triggers/get/{path}: get: summary: get nats trigger operationId: getNatsTrigger tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: nats trigger deleted content: application/json: schema: allOf: &ref_222 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_223 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 nullable: true description: >- JetStream stream name (required when use_jetstream is true) consumer_name: type: string nullable: true description: >- JetStream consumer name (required when use_jetstream is true) subjects: type: array items: type: string description: Array of NATS subjects to subscribe to server_id: type: string description: >- ID of the server currently handling this trigger (internal) last_server_ping: type: string format: date-time description: Timestamp of last server heartbeat (internal) error: type: string description: Last error message if the trigger failed error_handler_path: type: string description: >- Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_224 - nats_resource_path - use_jetstream - subjects /w/{workspace}/nats_triggers/list: get: summary: list nats triggers operationId: listNatsTriggers tags: - nats_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: nats trigger list content: application/json: schema: type: array items: allOf: *ref_222 type: object properties: *ref_223 required: *ref_224 /w/{workspace}/nats_triggers/exists/{path}: get: summary: does nats trigger exists operationId: existsNatsTrigger tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: nats trigger exists content: application/json: schema: type: boolean /w/{workspace}/nats_triggers/setmode/{path}: post: summary: set enabled nats trigger operationId: setNatsTriggerMode tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated nats trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: nats trigger enabled set content: text/plain: schema: type: string /w/{workspace}/nats_triggers/test: post: summary: test NATS connection operationId: testNatsConnection tags: - nats_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test nats connection required: true content: application/json: schema: type: object properties: connection: type: object required: - connection responses: '200': description: successfuly connected to NATS servers content: text/plain: schema: type: string /w/{workspace}/sqs_triggers/create: post: summary: create sqs trigger operationId: createSqsTrigger tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new sqs trigger required: true content: application/json: schema: type: object properties: &ref_471 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_225 - oidc - credentials aws_resource_path: type: string description: >- Path to the AWS resource containing credentials or OIDC configuration message_attributes: type: array nullable: true items: type: string description: >- Array of SQS message attribute names to include with each message path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_472 - queue_url - aws_resource_path - path - script_path - is_flow - aws_auth_resource_type responses: '201': description: sqs trigger created content: text/plain: schema: type: string /w/{workspace}/sqs_triggers/update/{path}: post: summary: update sqs trigger operationId: updateSqsTrigger tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_473 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_225 aws_resource_path: type: string description: >- Path to the AWS resource containing credentials or OIDC configuration message_attributes: type: array nullable: true items: type: string description: >- Array of SQS message attribute names to include with each message path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_474 - queue_url - aws_resource_path - path - script_path - is_flow - enabled - aws_auth_resource_type responses: '200': description: sqs trigger updated content: text/plain: schema: type: string /w/{workspace}/sqs_triggers/delete/{path}: delete: summary: delete sqs trigger operationId: deleteSqsTrigger tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: sqs trigger deleted content: text/plain: schema: type: string /w/{workspace}/sqs_triggers/get/{path}: get: summary: get sqs trigger operationId: getSqsTrigger tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: sqs trigger deleted content: application/json: schema: allOf: &ref_226 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_227 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_225 aws_resource_path: type: string description: >- Path to the AWS resource containing credentials or OIDC configuration message_attributes: type: array nullable: true items: type: string description: >- Array of SQS message attribute names to include with each message server_id: type: string description: >- ID of the server currently handling this trigger (internal) last_server_ping: type: string format: date-time description: Timestamp of last server heartbeat (internal) error: type: string description: Last error message if the trigger failed error_handler_path: type: string description: >- Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_228 - queue_url - aws_resource_path - aws_auth_resource_type /w/{workspace}/sqs_triggers/list: get: summary: list sqs triggers operationId: listSqsTriggers tags: - sqs_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: sqs trigger list content: application/json: schema: type: array items: allOf: *ref_226 type: object properties: *ref_227 required: *ref_228 /w/{workspace}/sqs_triggers/exists/{path}: get: summary: does sqs trigger exists operationId: existsSqsTrigger tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: sqs trigger exists content: application/json: schema: type: boolean /w/{workspace}/sqs_triggers/setmode/{path}: post: summary: set enabled sqs trigger operationId: setSqsTriggerMode tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated sqs trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: sqs trigger enabled set content: text/plain: schema: type: string /w/{workspace}/sqs_triggers/test: post: summary: test sqs connection operationId: testSqsConnection tags: - sqs_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test sqs connection required: true content: application/json: schema: type: object properties: connection: type: object required: - connection responses: '200': description: successfuly connected to sqs content: text/plain: schema: type: string /w/{workspace}/native_triggers/integrations/list: get: summary: list available native trigger services operationId: listNativeTriggerServices tags: - workspace_integration parameters: - 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_576 service_name: type: string enum: &ref_229 - nextcloud - google - github oauth_data: nullable: true type: object properties: &ref_230 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_231 - client_id - client_secret - base_url - redirect_uri resource_path: type: string nullable: true description: Path to the resource storing the OAuth token required: &ref_577 - 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_229 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_229 requestBody: description: new native trigger service required: true content: application/json: schema: type: object properties: *ref_230 required: *ref_231 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_229 requestBody: description: redirect_uri required: true content: application/json: schema: type: object properties: &ref_232 redirect_uri: type: string required: &ref_233 - redirect_uri responses: '200': description: native trigger service connect url content: application/json: schema: type: string /w/{workspace}/native_triggers/integrations/{service_name}/instance_sharing_available: get: summary: check if instance-level credential sharing is available for a service operationId: checkInstanceSharingAvailable 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_229 responses: '200': description: whether instance sharing is available content: application/json: schema: type: boolean /w/{workspace}/native_triggers/integrations/{service_name}/generate_instance_connect_url: post: summary: generate connect url using instance-level credentials operationId: generateInstanceConnectUrl 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_229 requestBody: description: redirect_uri required: true content: application/json: schema: type: object properties: *ref_232 required: *ref_233 responses: '200': description: authorization URL using instance credentials 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_229 responses: '200': description: native trigger service deleted content: text/plain: schema: type: string /w/{workspace}/native_triggers/integrations/{service_name}/callback: 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_229 requestBody: description: OAuth callback data required: true content: application/json: schema: type: object properties: code: type: string state: type: string redirect_uri: type: string resource_path: type: string required: - code - state - redirect_uri 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_229 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_234 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 summary: type: string nullable: true description: Short summary to be displayed when listed required: &ref_235 - 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_579 external_id: type: string description: >- The external ID of the created trigger from the external service required: &ref_580 - 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_229 - 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_234 required: *ref_235 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_229 - 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_574 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_229 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 summary: type: string nullable: true description: Short summary to be displayed when listed external_data: type: object description: Configuration data from the external service additionalProperties: true required: &ref_575 - 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_229 - 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_229 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: native triggers list content: application/json: schema: type: array items: type: object description: A native trigger stored in Windmill properties: &ref_572 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_229 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 summary: type: string nullable: true description: Short summary to be displayed when listed required: &ref_573 - 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_229 - 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_229 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_581 id: type: string name: type: string description: type: string category: type: string path: type: string required: &ref_582 - id - name - path /w/{workspace}/native_triggers/google/calendars: get: summary: list Google Calendars for the authenticated user operationId: listGoogleCalendars tags: - native_trigger parameters: - name: workspace in: path required: true schema: type: string responses: '200': description: list of Google Calendars content: application/json: schema: type: array items: type: object properties: &ref_583 id: type: string summary: type: string primary: type: boolean default: false required: &ref_584 - id - summary /w/{workspace}/native_triggers/google/drive/files: get: summary: list or search Google Drive files operationId: listGoogleDriveFiles tags: - native_trigger parameters: - name: workspace in: path required: true schema: type: string - name: q in: query description: search query to filter files by name schema: type: string - name: parent_id in: query description: folder ID to list children of schema: type: string - name: page_token in: query description: token for next page of results schema: type: string - name: shared_with_me in: query description: if true, list files shared with the user schema: type: boolean default: false responses: '200': description: list of Google Drive files content: application/json: schema: type: object properties: &ref_587 files: type: array items: type: object properties: &ref_585 id: type: string name: type: string mime_type: type: string is_folder: type: boolean default: false required: &ref_586 - id - name - mime_type next_page_token: type: string required: &ref_588 - files /w/{workspace}/native_triggers/google/drive/shared_drives: get: summary: list shared drives accessible to the user operationId: listGoogleSharedDrives tags: - native_trigger parameters: - name: workspace in: path required: true schema: type: string responses: '200': description: list of shared drives content: application/json: schema: type: array items: type: object properties: &ref_589 id: type: string name: type: string required: &ref_590 - id - name /w/{workspace}/native_triggers/github/repos: get: summary: list GitHub repositories accessible to the user operationId: listGithubRepos tags: - native_trigger parameters: - name: workspace in: path required: true schema: type: string responses: '200': description: list of GitHub repositories content: application/json: schema: type: array items: type: object properties: &ref_591 full_name: type: string name: type: string owner: type: string private: type: boolean required: &ref_592 - full_name - name - owner - private /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_229 - name: workspace_id in: path required: true schema: type: string - name: internal_id in: path required: true schema: type: integer format: int64 description: The internal database ID of the trigger requestBody: description: webhook payload from external service required: false content: application/json: schema: type: object additionalProperties: true text/plain: schema: type: string responses: '200': description: webhook received successfully content: text/plain: schema: type: string /w/{workspace}/mqtt_triggers/create: post: summary: create mqtt trigger operationId: createMqttTrigger tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new mqtt trigger required: true content: application/json: schema: type: object properties: &ref_454 mqtt_resource_path: type: string description: >- Path to the MQTT resource containing broker connection configuration subscribe_topics: type: array items: type: object properties: &ref_236 qos: type: string enum: &ref_453 - qos0 - qos1 - qos2 topic: type: string required: &ref_237 - qos - topic description: >- Array of MQTT topics to subscribe to, each with topic name and QoS level client_id: type: string nullable: true description: MQTT client ID for this connection v3_config: nullable: true description: MQTT v3 specific configuration (clean_session) type: object properties: &ref_238 clean_session: type: boolean v5_config: nullable: true description: >- MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval) type: object properties: &ref_239 clean_start: type: boolean topic_alias_maximum: type: number session_expiry_interval: type: number client_version: nullable: true description: MQTT protocol version ('v3' or 'v5') type: string enum: &ref_240 - v3 - v5 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_455 - path - script_path - is_flow - subscribe_topics - mqtt_resource_path responses: '201': description: mqtt trigger created content: text/plain: schema: type: string /w/{workspace}/mqtt_triggers/update/{path}: post: summary: update mqtt trigger operationId: updateMqttTrigger tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_456 mqtt_resource_path: type: string description: >- Path to the MQTT resource containing broker connection configuration subscribe_topics: type: array items: type: object properties: *ref_236 required: *ref_237 description: >- Array of MQTT topics to subscribe to, each with topic name and QoS level client_id: type: string nullable: true description: MQTT client ID for this connection v3_config: nullable: true description: MQTT v3 specific configuration (clean_session) type: object properties: *ref_238 v5_config: nullable: true description: >- MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval) type: object properties: *ref_239 client_version: nullable: true description: MQTT protocol version ('v3' or 'v5') type: string enum: *ref_240 path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_457 - path - script_path - is_flow - enabled - subscribe_topics - mqtt_resource_path responses: '200': description: mqtt trigger updated content: text/plain: schema: type: string /w/{workspace}/mqtt_triggers/delete/{path}: delete: summary: delete mqtt trigger operationId: deleteMqttTrigger tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: mqtt trigger deleted content: text/plain: schema: type: string /w/{workspace}/mqtt_triggers/get/{path}: get: summary: get mqtt trigger operationId: getMqttTrigger tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: mqtt trigger deleted content: application/json: schema: allOf: &ref_241 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_242 mqtt_resource_path: type: string description: >- Path to the MQTT resource containing broker connection configuration subscribe_topics: type: array items: type: object properties: *ref_236 required: *ref_237 description: >- Array of MQTT topics to subscribe to, each with topic name and QoS level v3_config: nullable: true description: MQTT v3 specific configuration (clean_session) type: object properties: *ref_238 v5_config: nullable: true description: >- MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval) type: object properties: *ref_239 client_id: type: string nullable: true description: MQTT client ID for this connection client_version: nullable: true description: MQTT protocol version ('v3' or 'v5') type: string enum: *ref_240 server_id: type: string description: >- ID of the server currently handling this trigger (internal) last_server_ping: type: string format: date-time description: Timestamp of last server heartbeat (internal) error: type: string description: Last error message if the trigger failed error_handler_path: type: string description: >- Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_243 - subscribe_topics - mqtt_resource_path /w/{workspace}/mqtt_triggers/list: get: summary: list mqtt triggers operationId: listMqttTriggers tags: - mqtt_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: mqtt trigger list content: application/json: schema: type: array items: allOf: *ref_241 type: object properties: *ref_242 required: *ref_243 /w/{workspace}/mqtt_triggers/exists/{path}: get: summary: does mqtt trigger exists operationId: existsMqttTrigger tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: mqtt trigger exists content: application/json: schema: type: boolean /w/{workspace}/mqtt_triggers/setmode/{path}: post: summary: set enabled mqtt trigger operationId: setMqttTriggerMode tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated mqtt trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: mqtt trigger enabled set content: text/plain: schema: type: string /w/{workspace}/mqtt_triggers/test: post: summary: test mqtt connection operationId: testMqttConnection tags: - mqtt_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test mqtt connection required: true content: application/json: schema: type: object properties: connection: type: object required: - connection responses: '200': description: successfully connected to mqtt content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/create: post: summary: create gcp trigger operationId: createGcpTrigger tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new gcp trigger required: true content: application/json: schema: type: object description: Data for creating or updating a Google Cloud Pub/Sub trigger. properties: &ref_244 gcp_resource_path: type: string description: >- Path to the GCP resource containing service account credentials for authentication. subscription_mode: type: string enum: &ref_249 - existing - create_update description: >- The mode of subscription. 'existing' means using an existing GCP subscription, while 'create_update' involves creating or updating a new subscription. 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_246 - 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: nullable: true type: object description: Configuration for push delivery mode. properties: &ref_247 audience: type: string description: >- The audience claim for OIDC tokens used in push authentication. authenticate: type: boolean description: >- If true, push messages will include OIDC authentication tokens. required: &ref_248 - authenticate - base_endpoint path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when a message is received. is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script. mode: description: job trigger mode type: string enum: *ref_207 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_245 - path - script_path - is_flow - gcp_resource_path - topic_id - subscription_mode responses: '201': description: gcp trigger created content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/update/{path}: post: summary: update gcp trigger operationId: updateGcpTrigger tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object description: Data for creating or updating a Google Cloud Pub/Sub trigger. properties: *ref_244 required: *ref_245 responses: '200': description: gcp trigger updated content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/delete/{path}: delete: summary: delete gcp trigger operationId: deleteGcpTrigger tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: gcp trigger deleted content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/get/{path}: get: summary: get gcp trigger operationId: getGcpTrigger tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: gcp trigger deleted content: application/json: schema: allOf: &ref_250 - type: object properties: *ref_214 required: *ref_215 type: object description: >- A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received. properties: &ref_251 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_246 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: nullable: true type: object description: Configuration for push delivery mode. properties: *ref_247 required: *ref_248 subscription_mode: type: string enum: *ref_249 description: >- The mode of subscription. 'existing' means using an existing GCP subscription, while 'create_update' involves creating or updating a new subscription. last_server_ping: type: string format: date-time description: Timestamp of last server heartbeat (internal use). error: type: string description: Last error message if the trigger failed. error_handler_path: type: string description: >- Path to a script or flow to run when the triggered job fails. error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_252 - gcp_resource_path - topic_id - subscription_id - delivery_type - subscription_mode /w/{workspace}/gcp_triggers/list: get: summary: list gcp triggers operationId: listGcpTriggers tags: - gcp_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: gcp trigger list content: application/json: schema: type: array items: allOf: *ref_250 type: object description: >- A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received. properties: *ref_251 required: *ref_252 /w/{workspace}/gcp_triggers/exists/{path}: get: summary: does gcp trigger exists operationId: existsGcpTrigger tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: gcp trigger exists content: application/json: schema: type: boolean /w/{workspace}/gcp_triggers/setmode/{path}: post: summary: set enabled gcp trigger operationId: setGcpTriggerMode tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated gcp trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: gcp trigger enabled set content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/test: post: summary: test gcp connection operationId: testGcpConnection tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test gcp connection required: true content: application/json: schema: type: object properties: connection: type: object required: - connection responses: '200': description: try to connect to a gcp broker content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/subscriptions/delete/{path}: delete: summary: delete gcp trigger operationId: deleteGcpSubscription tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: args to delete subscription from google cloud required: true content: application/json: schema: type: object properties: &ref_460 subscription_id: type: string required: &ref_461 - subscription_id responses: '200': description: gcp trigger deleted content: text/plain: schema: type: string /w/{workspace}/gcp_triggers/topics/list/{path}: get: summary: list all topics of google cloud service operationId: listGoogleTopics tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: get all google topics content: application/json: schema: type: array items: type: string /w/{workspace}/gcp_triggers/subscriptions/list/{path}: post: summary: list all subscription of a give topic from google cloud service operationId: listAllTGoogleTopicSubscriptions tags: - gcp_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: args to get subscription's topic from google cloud required: true content: application/json: schema: type: object properties: &ref_458 topic_id: type: string required: &ref_459 - topic_id responses: '200': description: get all google topic subscriptions name content: application/json: schema: type: array items: type: string /w/{workspace}/azure_triggers/create: post: summary: create an Azure Event Grid trigger operationId: createAzureTrigger tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object description: Data for creating or updating an Azure Event Grid trigger. properties: &ref_253 azure_resource_path: type: string azure_mode: type: string enum: &ref_255 - basic_push - namespace_push - namespace_pull description: Azure Event Grid trigger mode. scope_resource_id: type: string topic_name: type: string nullable: true subscription_name: type: string base_endpoint: type: string description: Base URL for push delivery endpoints (push modes only). event_type_filters: type: array items: type: string path: type: string description: >- The unique Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string is_flow: type: boolean mode: description: job trigger mode type: string enum: *ref_207 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_197 permissioned_as: type: string preserve_permissioned_as: type: boolean labels: type: array items: type: string required: &ref_254 - path - script_path - is_flow - azure_resource_path - azure_mode - scope_resource_id - subscription_name responses: '201': description: azure trigger created content: text/plain: schema: type: string /w/{workspace}/azure_triggers/update/{path}: post: summary: update an Azure Event Grid trigger operationId: updateAzureTrigger tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: required: true content: application/json: schema: type: object description: Data for creating or updating an Azure Event Grid trigger. properties: *ref_253 required: *ref_254 responses: '200': description: azure trigger updated content: text/plain: schema: type: string /w/{workspace}/azure_triggers/delete/{path}: delete: summary: delete an Azure Event Grid trigger operationId: deleteAzureTrigger tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: azure trigger deleted content: text/plain: schema: type: string /w/{workspace}/azure_triggers/get/{path}: get: summary: get an Azure Event Grid trigger operationId: getAzureTrigger tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: azure trigger content: application/json: schema: allOf: &ref_256 - type: object properties: *ref_214 required: *ref_215 type: object description: >- An Azure Event Grid trigger that executes a script or flow when events arrive. properties: &ref_257 azure_resource_path: type: string azure_mode: type: string enum: *ref_255 description: Azure Event Grid trigger mode. scope_resource_id: type: string description: >- ARM resource ID of the topic (basic) or namespace (namespace modes). topic_name: type: string nullable: true description: Topic name within the namespace (namespace modes only). subscription_name: type: string event_type_filters: type: array items: type: string nullable: true server_id: type: string last_server_ping: type: string format: date-time error: type: string 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_197 required: &ref_258 - azure_resource_path - azure_mode - scope_resource_id - subscription_name /w/{workspace}/azure_triggers/list: get: summary: list azure triggers operationId: listAzureTriggers tags: - azure_trigger 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: path description: filter by exact 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: azure trigger list content: application/json: schema: type: array items: allOf: *ref_256 type: object description: >- An Azure Event Grid trigger that executes a script or flow when events arrive. properties: *ref_257 required: *ref_258 /w/{workspace}/azure_triggers/exists/{path}: get: summary: check whether an azure trigger exists operationId: existsAzureTrigger tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: true/false content: application/json: schema: type: boolean /w/{workspace}/azure_triggers/setmode/{path}: post: summary: set azure trigger mode operationId: setAzureTriggerMode tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: trigger mode updated content: text/plain: schema: type: string /w/{workspace}/azure_triggers/test: post: summary: test Azure service principal connection operationId: testAzureConnection tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object properties: &ref_464 azure_resource_path: type: string required: &ref_465 - azure_resource_path responses: '200': description: connection successful content: text/plain: schema: type: string /w/{workspace}/azure_triggers/namespaces/topics/list/{path}: post: summary: list topics under an Event Grid Namespace operationId: listAzureNamespaceTopics tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: required: true content: application/json: schema: type: object properties: &ref_466 scope_resource_id: type: string required: &ref_467 - scope_resource_id responses: '200': description: topic list content: application/json: schema: type: array items: type: object /w/{workspace}/azure_triggers/namespaces/subscriptions/list/{path}: post: summary: list subscriptions under a Namespace topic operationId: listAzureNamespaceSubscriptions tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: required: true content: application/json: schema: type: object properties: &ref_468 scope_resource_id: type: string topic_name: type: string required: &ref_469 - scope_resource_id - topic_name responses: '200': description: subscription list content: application/json: schema: type: array items: type: object /w/{workspace}/azure_triggers/subscriptions/delete/{path}: delete: summary: delete an Event Grid subscription on Azure operationId: deleteAzureSubscription tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: required: true content: application/json: schema: type: object properties: &ref_462 azure_mode: type: string enum: *ref_255 description: Azure Event Grid trigger mode. scope_resource_id: type: string topic_name: type: string nullable: true subscription_name: type: string required: &ref_463 - azure_mode - scope_resource_id - subscription_name responses: '200': description: subscription deleted content: text/plain: schema: type: string /w/{workspace}/azure_triggers/namespaces/list/{path}: post: summary: list Event Grid Namespaces the service principal can access operationId: listAzureNamespaces tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: namespace list content: application/json: schema: type: array items: type: object description: An ARM resource the service principal can see. properties: &ref_259 id: type: string name: type: string location: type: string type: type: string required: &ref_260 - id - name - type /w/{workspace}/azure_triggers/basic/topics/list/{path}: post: summary: >- list Basic Event Grid topics + system topics the service principal can access operationId: listAzureBasicTopics tags: - azure_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: topic list content: application/json: schema: type: array items: type: object description: An ARM resource the service principal can see. properties: *ref_259 required: *ref_260 /w/{workspace}/postgres_triggers/postgres/version/{path}: get: summary: get postgres version operationId: getPostgresVersion tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: postgres version content: application/json: schema: type: string /w/{workspace}/postgres_triggers/is_valid_postgres_configuration/{path}: get: summary: check if postgres configuration is set to logical operationId: isValidPostgresConfiguration tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: boolean that indicates if postgres is set to logical level or not content: application/json: schema: type: boolean /w/{workspace}/postgres_triggers/create_template_script: post: summary: create template script operationId: createTemplateScript tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: template script required: true content: application/json: schema: type: object properties: &ref_478 postgres_resource_path: type: string relations: type: array items: type: object properties: &ref_262 schema_name: type: string table_to_track: type: array items: &ref_476 type: object properties: table_name: type: string columns_name: type: array items: type: string where_clause: type: string required: - table_name required: &ref_263 - schema_name - table_to_track language: type: string enum: &ref_477 - Typescript required: &ref_479 - postgres_resource_path - relations - language responses: '200': description: custom id to retrieve template script content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/get_template_script/{id}: get: summary: get template script operationId: getTemplateScript tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: &ref_304 type: string responses: '200': description: template script content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/slot/list/{path}: get: summary: list postgres replication slot operationId: listPostgresReplicationSlot tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: list postgres slot content: application/json: schema: type: array items: type: object properties: &ref_475 slot_name: type: string active: type: boolean /w/{workspace}/postgres_triggers/slot/create/{path}: post: summary: create replication slot for postgres operationId: createPostgresReplicationSlot tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: new slot for postgres required: true content: application/json: schema: type: object properties: &ref_261 name: type: string responses: '201': description: slot created content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/slot/delete/{path}: delete: summary: delete postgres replication slot operationId: deletePostgresReplicationSlot tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: replication slot of postgres required: true content: application/json: schema: type: object properties: *ref_261 responses: '200': description: postgres replication slot deleted content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/publication/list/{path}: get: summary: list postgres publication operationId: listPostgresPublication tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: database publication list content: application/json: schema: type: array items: type: string /w/{workspace}/postgres_triggers/publication/get/{publication}/{path}: get: summary: get postgres publication operationId: getPostgresPublication tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: publication in: path required: true description: The name of the publication schema: &ref_264 type: string responses: '200': description: postgres publication get content: application/json: schema: type: object properties: &ref_265 table_to_track: type: array items: type: object properties: *ref_262 required: *ref_263 transaction_to_track: type: array items: type: string required: &ref_266 - transaction_to_track /w/{workspace}/postgres_triggers/publication/create/{publication}/{path}: post: summary: create publication for postgres operationId: createPostgresPublication tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: publication in: path required: true description: The name of the publication schema: *ref_264 requestBody: description: new publication for postgres required: true content: application/json: schema: type: object properties: *ref_265 required: *ref_266 responses: '201': description: publication created content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/publication/update/{publication}/{path}: post: summary: update publication for postgres operationId: updatePostgresPublication tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: publication in: path required: true description: The name of the publication schema: *ref_264 requestBody: description: update publication for postgres required: true content: application/json: schema: type: object properties: *ref_265 required: *ref_266 responses: '201': description: publication updated content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/publication/delete/{publication}/{path}: delete: summary: delete postgres publication operationId: deletePostgresPublication tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: publication in: path required: true description: The name of the publication schema: *ref_264 responses: '200': description: postgres publication deleted content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/create: post: summary: create postgres trigger operationId: createPostgresTrigger tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new postgres trigger required: true content: application/json: schema: type: object properties: &ref_480 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 Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when database changes are detected is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 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_265 required: *ref_266 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_481 - path - script_path - is_flow - enabled - postgres_resource_path responses: '201': description: postgres trigger created content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/update/{path}: post: summary: update postgres trigger operationId: updatePostgresTrigger tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_482 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 Windmill path for this trigger. Must be of the form `u//` or `f//`. This is the trigger object path, not the HTTP route path. script_path: type: string description: >- Path to the script or flow to execute when database changes are detected is_flow: type: boolean description: >- True if script_path points to a flow, false if it points to a script mode: description: job trigger mode type: string enum: *ref_207 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_265 required: *ref_266 error_handler_path: type: string description: Path to a script or flow to run when the triggered job fails error_handler_args: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_483 - path - script_path - is_flow - enabled - postgres_resource_path - publication_name - replication_slot_name responses: '200': description: postgres trigger updated content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/delete/{path}: delete: summary: delete postgres trigger operationId: deletePostgresTrigger tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: postgres trigger deleted content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/get/{path}: get: summary: get postgres trigger operationId: getPostgresTrigger tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: get postgres trigger content: application/json: schema: allOf: &ref_267 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_268 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: description: The arguments to pass to the script or flow type: object additionalProperties: true retry: description: Retry configuration for failed module executions type: object properties: *ref_197 required: &ref_269 - postgres_resource_path - replication_slot_name - publication_name /w/{workspace}/postgres_triggers/list: get: summary: list postgres triggers operationId: listPostgresTriggers tags: - postgres_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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: postgres trigger list content: application/json: schema: type: array items: allOf: *ref_267 type: object properties: *ref_268 required: *ref_269 /w/{workspace}/postgres_triggers/exists/{path}: get: summary: does postgres trigger exists operationId: existsPostgresTrigger tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 responses: '200': description: postgres trigger exists content: application/json: schema: type: boolean /w/{workspace}/postgres_triggers/setmode/{path}: post: summary: set enabled postgres trigger operationId: setPostgresTriggerMode tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 requestBody: description: updated postgres trigger enable required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: postgres trigger enabled set content: text/plain: schema: type: string /w/{workspace}/postgres_triggers/test: post: summary: test postgres connection operationId: testPostgresConnection tags: - postgres_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: test postgres connection required: true content: application/json: schema: type: object properties: database: type: string required: - database responses: '200': description: successfuly connected to postgres content: text/plain: schema: type: string /w/{workspace}/email_triggers/create: post: summary: create email trigger operationId: createEmailTrigger tags: - email_trigger parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: new email trigger required: true content: application/json: schema: type: object properties: &ref_492 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_197 mode: description: job trigger mode type: string enum: *ref_207 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_493 - 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_60 requestBody: description: updated trigger required: true content: application/json: schema: type: object properties: &ref_494 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_197 permissioned_as: type: string description: >- The user or group this trigger runs as. Used during deployment to preserve the original trigger owner. preserve_permissioned_as: type: boolean description: >- When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it. labels: type: array items: type: string required: &ref_495 - 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_60 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_60 responses: '200': description: email trigger retrieved content: application/json: schema: allOf: &ref_270 - type: object properties: *ref_214 required: *ref_215 type: object properties: &ref_271 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_197 required: &ref_272 - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - 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 - name: label in: query required: false schema: type: string description: Filter by label responses: '200': description: email trigger list content: application/json: schema: type: array items: allOf: *ref_270 type: object properties: *ref_271 required: *ref_272 /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_60 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_60 requestBody: required: true content: application/json: schema: type: object properties: mode: description: job trigger mode type: string enum: *ref_207 force: type: boolean description: > Bypass the parent-state conflict warning when enabling a trigger in a fork whose parent has the same path enabled. required: - mode responses: '200': description: email trigger enable/disable content: text/plain: schema: type: string /groups/list: get: summary: list instance groups operationId: listInstanceGroups tags: - group responses: '200': description: instance group list content: application/json: schema: type: array items: type: object required: &ref_496 - name properties: &ref_497 name: type: string summary: type: string emails: type: array items: type: string instance_role: type: string nullable: true enum: - superadmin - devops /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_274 - name properties: &ref_275 name: type: string summary: type: string emails: type: array items: type: string instance_role: type: string nullable: true enum: - superadmin - devops workspaces: type: array items: type: object properties: &ref_498 workspace_id: type: string workspace_name: type: string role: type: string required: &ref_499 - name /groups/get/{name}: get: summary: get instance group operationId: getInstanceGroup tags: - group parameters: - name: name in: path required: true schema: *ref_273 responses: '200': description: instance group content: application/json: schema: type: object required: *ref_274 properties: *ref_275 /groups/create: post: summary: create instance group operationId: createInstanceGroup tags: - group requestBody: description: create instance group required: true content: application/json: schema: type: object properties: name: type: string summary: type: string required: - name responses: '200': description: instance group created content: text/plain: schema: type: string /groups/update/{name}: post: summary: update instance group operationId: updateInstanceGroup tags: - group parameters: - name: name in: path required: true schema: *ref_273 requestBody: description: update instance group required: true content: application/json: schema: type: object properties: new_summary: type: string instance_role: type: string nullable: true description: >- Instance-level role for group members. 'superadmin', 'devops', 'user' or empty to clear. required: - new_summary responses: '200': description: instance group updated content: text/plain: schema: type: string /groups/delete/{name}: delete: summary: delete instance group operationId: deleteInstanceGroup tags: - group parameters: - name: name in: path required: true schema: *ref_273 responses: '200': description: instance group deleted content: text/plain: schema: type: string /groups/adduser/{name}: post: summary: add user to instance group operationId: addUserToInstanceGroup tags: - group parameters: - name: name in: path required: true schema: *ref_273 requestBody: description: user to add to instance group required: true content: application/json: schema: type: object properties: email: type: string required: - email responses: '200': description: user added to instance group content: text/plain: schema: type: string /groups/removeuser/{name}: post: summary: remove user from instance group operationId: removeUserFromInstanceGroup tags: - group parameters: - name: name in: path required: true schema: *ref_273 requestBody: description: user to remove from instance group required: true content: application/json: schema: type: object properties: email: type: string required: - email responses: '200': description: user removed from instance group content: text/plain: schema: type: string /groups/export: get: summary: export instance groups operationId: exportInstanceGroups tags: - group responses: '200': description: exported instance groups content: application/json: schema: type: array items: type: object properties: &ref_276 name: type: string summary: type: string emails: type: array items: type: string id: type: string scim_display_name: type: string external_id: type: string instance_role: type: string nullable: true enum: - superadmin - devops required: &ref_277 - name /groups/overwrite: post: summary: overwrite instance groups operationId: overwriteInstanceGroups tags: - group requestBody: description: overwrite instance groups required: true content: application/json: schema: type: array items: type: object properties: *ref_276 required: *ref_277 responses: '200': description: success message content: text/plain: schema: type: string /w/{workspace}/groups/list: get: summary: list groups operationId: listGroups tags: - group 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: group list content: application/json: schema: type: array items: type: object properties: &ref_278 name: type: string summary: type: string members: type: array items: type: string extra_perms: type: object additionalProperties: type: boolean required: &ref_279 - name /w/{workspace}/groups/listnames: get: summary: list group names operationId: listGroupNames tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: only_member_of in: query description: only list the groups the user is member of (default false) schema: type: boolean responses: '200': description: group list content: application/json: schema: type: array items: type: string /w/{workspace}/groups/create: post: summary: create group operationId: createGroup tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: create group required: true content: application/json: schema: type: object properties: name: type: string summary: type: string required: - name responses: '200': description: group created content: text/plain: schema: type: string /w/{workspace}/groups/update/{name}: post: summary: update group operationId: updateGroup tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 requestBody: description: updated group required: true content: application/json: schema: type: object properties: summary: type: string responses: '200': description: group updated content: text/plain: schema: type: string /w/{workspace}/groups/delete/{name}: delete: summary: delete group operationId: deleteGroup tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 responses: '200': description: group deleted content: text/plain: schema: type: string /w/{workspace}/groups/get/{name}: get: summary: get group operationId: getGroup tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 responses: '200': description: group content: application/json: schema: type: object properties: *ref_278 required: *ref_279 /w/{workspace}/groups/adduser/{name}: post: summary: add user to group operationId: addUserToGroup tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 requestBody: description: added user to group required: true content: application/json: schema: type: object properties: username: type: string responses: '200': description: user added to group content: text/plain: schema: type: string /w/{workspace}/groups/removeuser/{name}: post: summary: remove user to group operationId: removeUserToGroup tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 requestBody: description: added user to group required: true content: application/json: schema: type: object properties: username: type: string responses: '200': description: user removed from group content: text/plain: schema: type: string /w/{workspace}/groups_history/get/{name}: get: summary: get group permission history operationId: getGroupPermissionHistory tags: - group parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: group permission history content: application/json: schema: type: array items: type: object properties: id: type: integer changed_by: type: string changed_at: type: string format: date-time change_type: type: string member_affected: type: string nullable: true /w/{workspace}/folders/list: get: summary: list folders operationId: listFolders tags: - folder parameters: - 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_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: folder list content: application/json: schema: type: array items: type: object properties: &ref_281 name: type: string owners: type: array items: type: string extra_perms: type: object additionalProperties: type: boolean summary: type: string created_by: type: string edited_at: type: string format: date-time default_permissioned_as: description: > Ordered list of rules applied at create-time when admins or `wm_deployers` members deploy items in this folder. The first rule whose `path_glob` matches the item path (relative to the folder root) wins, and its `permissioned_as` is used as the default. type: array items: &ref_280 type: object required: - path_glob - permissioned_as properties: path_glob: type: string description: > Glob pattern evaluated against the item path *relative* to the folder root (e.g. "jobs/**" matches every item whose full path is `f//jobs/...`). Supports `*`, `**`, `?`, `[abc]`, `{a,b}`. permissioned_as: type: string description: > Target identity the matched item should be permissioned as. Must be `u/`, `g/`, or an email that exists in this workspace. required: &ref_282 - name - owners - extra_perms /w/{workspace}/folders/listnames: get: summary: list folder names operationId: listFolderNames tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: only_member_of in: query description: only list the folders the user is member of (default false) schema: type: boolean responses: '200': description: folder list content: application/json: schema: type: array items: type: string /w/{workspace}/folders/create: post: summary: create folder operationId: createFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: create folder required: true content: application/json: schema: type: object properties: name: type: string summary: type: string owners: type: array items: type: string extra_perms: additionalProperties: type: boolean default_permissioned_as: description: > Ordered list of rules applied at create-time when admins or `wm_deployers` members deploy items in this folder. The first rule whose `path_glob` matches the item path (relative to the folder root) wins, and its `permissioned_as` is used as the default. type: array items: *ref_280 required: - name responses: '200': description: folder created content: text/plain: schema: type: string /w/{workspace}/folders/update/{name}: post: summary: update folder operationId: updateFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 requestBody: description: update folder required: true content: application/json: schema: type: object properties: summary: type: string owners: type: array items: type: string extra_perms: additionalProperties: type: boolean default_permissioned_as: description: > Ordered list of rules applied at create-time when admins or `wm_deployers` members deploy items in this folder. The first rule whose `path_glob` matches the item path (relative to the folder root) wins, and its `permissioned_as` is used as the default. type: array items: *ref_280 responses: '200': description: folder updated content: text/plain: schema: type: string /w/{workspace}/folders/delete/{name}: delete: summary: delete folder operationId: deleteFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 responses: '200': description: folder deleted content: text/plain: schema: type: string /w/{workspace}/folders/get/{name}: get: summary: get folder operationId: getFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 responses: '200': description: folder content: application/json: schema: type: object properties: *ref_281 required: *ref_282 /w/{workspace}/folders/exists/{name}: get: summary: exists folder operationId: existsFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 responses: '200': description: folder exists content: application/json: schema: type: boolean /w/{workspace}/folders/getusage/{name}: get: summary: get folder usage operationId: getFolderUsage tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 responses: '200': description: folder content: application/json: schema: type: object properties: scripts: type: number flows: type: number apps: type: number resources: type: number variables: type: number schedules: type: number required: - scripts - flows - apps - resources - variables - schedules /w/{workspace}/folders/addowner/{name}: post: summary: add owner to folder operationId: addOwnerToFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 requestBody: description: owner user to folder required: true content: application/json: schema: type: object properties: owner: type: string required: - owner responses: '200': description: owner added to folder content: text/plain: schema: type: string /w/{workspace}/folders/removeowner/{name}: post: summary: remove owner to folder operationId: removeOwnerToFolder tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 requestBody: description: added owner to folder required: true content: application/json: schema: type: object properties: owner: type: string write: type: boolean required: - owner responses: '200': description: owner removed from folder content: text/plain: schema: type: string /w/{workspace}/folders_history/get/{name}: get: summary: get folder permission history operationId: getFolderPermissionHistory tags: - folder parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: *ref_273 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: folder permission history content: application/json: schema: type: array items: type: object properties: id: type: integer changed_by: type: string changed_at: type: string format: date-time change_type: type: string affected: type: string nullable: true /workers/list: get: summary: list workers operationId: listWorkers x-mcp-tool: true tags: - worker parameters: - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: ping_since in: query required: false description: >- number of seconds the worker must have had a last ping more recent of (default to 300) schema: type: integer responses: '200': description: a list of workers content: application/json: schema: type: array items: type: object properties: &ref_500 worker: type: string worker_instance: type: string last_ping: type: number started_at: type: string format: date-time ip: type: string jobs_executed: type: integer custom_tags: type: array items: type: string worker_group: type: string wm_version: type: string last_job_id: type: string last_job_workspace_id: type: string occupancy_rate: type: number occupancy_rate_15s: type: number occupancy_rate_5m: type: number occupancy_rate_30m: type: number memory: type: number vcpus: type: number memory_usage: type: number wm_memory_usage: type: number job_isolation: type: string native_mode: type: boolean required: &ref_501 - worker - worker_instance - ping_at - started_at - ip - jobs_executed - worker_group - wm_version /workers/exists_workers_with_tags: get: summary: exists workers with tags operationId: existsWorkersWithTags tags: - worker parameters: - name: tags in: query required: true description: comma separated list of tags schema: type: string - name: workspace in: query required: false description: >- workspace to filter tags visibility (required when TAGS_ARE_SENSITIVE is enabled for non-superadmins) schema: type: string responses: '200': description: map of tags to whether at least one worker with the tag exists content: application/json: schema: type: object additionalProperties: type: boolean /workers/queue_metrics: get: summary: get queue metrics operationId: getQueueMetrics tags: - worker responses: '200': description: metrics content: application/json: schema: type: array items: type: object properties: id: type: string values: type: array items: type: object properties: created_at: type: string value: type: number required: - created_at - value required: - id - values /workers/queue_counts: get: summary: get counts of jobs waiting for an executor per tag operationId: getCountsOfJobsWaitingPerTag tags: - worker responses: '200': description: queue counts content: application/json: schema: type: object additionalProperties: type: integer /workers/queue_running_counts: get: summary: get counts of currently running jobs per tag operationId: getCountsOfRunningJobsPerTag tags: - worker responses: '200': description: queue running counts content: application/json: schema: type: object additionalProperties: type: integer /configs/list_worker_groups: get: summary: list worker groups operationId: listWorkerGroups tags: - config responses: '200': description: a list of worker group configs content: application/json: schema: type: array items: type: object properties: name: type: string config: {} required: - name - config /configs/get/{name}: get: summary: get config operationId: get config tags: - config parameters: - name: name in: path required: true schema: *ref_273 responses: '200': description: a config content: application/json: schema: type: object nullable: true properties: &ref_384 alerts: type: array items: type: object properties: &ref_382 name: type: string tags_to_monitor: type: array items: type: string jobs_num_threshold: type: integer alert_cooldown_seconds: type: integer alert_time_threshold_seconds: type: integer required: &ref_383 - name - tags_to_monitor - jobs_num_threshold - alert_cooldown_seconds - alert_time_threshold_seconds /configs/update/{name}: post: summary: Update config operationId: updateConfig tags: - config parameters: - name: name in: path required: true schema: *ref_273 requestBody: description: worker group required: true content: application/json: schema: {} responses: '200': description: Update a worker group content: text/plain: schema: type: string delete: summary: Delete Config operationId: deleteConfig tags: - config parameters: - name: name in: path required: true schema: *ref_273 responses: '200': description: Delete config content: text/plain: schema: type: string /configs/list: get: summary: list configs operationId: listConfigs tags: - config responses: '200': description: list of configs content: application/json: schema: type: array items: type: object properties: &ref_547 name: type: string config: type: object required: &ref_548 - name /configs/list_autoscaling_events/{worker_group}: get: summary: List autoscaling events operationId: listAutoscalingEvents tags: - config parameters: - name: worker_group in: path required: true schema: type: string - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: List of autoscaling events content: application/json: schema: type: array items: type: object properties: &ref_551 id: type: integer format: int64 worker_group: type: string event_type: type: string desired_workers: type: integer reason: type: string applied_at: type: string format: date-time /configs/native_kubernetes_autoscaling_healthcheck: get: summary: Check Kubernetes autoscaling health for a worker group operationId: nativeKubernetesAutoscalingHealthcheck tags: - config responses: '200': description: Kubernetes autoscaling is healthy '400': description: Error content: text/plain: schema: type: string /configs/list_available_python_versions: get: summary: Get currently available python versions provided by UV. operationId: listAvailablePythonVersions tags: - config responses: '200': description: List of python versions content: application/json: schema: type: array items: type: string /configs/list_all_workspace_dependencies: get: summary: list all workspace dependencies operationId: listAllWorkspaceDependencies tags: - config responses: '200': description: a list of workspace dependency summaries content: application/json: schema: type: array items: type: object properties: workspace_id: type: string name: type: string language: type: string enum: *ref_94 required: - workspace_id - language /configs/list_all_dedicated_with_deps: get: summary: list all dedicated scripts with their dependencies operationId: listAllDedicatedWithDeps tags: - config responses: '200': description: a list of dedicated scripts with workspace dependencies content: application/json: schema: type: array items: type: object properties: workspace_id: type: string path: type: string language: type: string enum: *ref_94 workspace_dep_names: type: array items: type: string required: - workspace_id - path - language - workspace_dep_names /agent_workers/create_agent_token: post: summary: create agent token operationId: createAgentToken tags: - agent_workers requestBody: description: agent token required: true content: application/json: schema: type: object properties: worker_group: type: string tags: type: array items: type: string exp: type: integer required: - worker_group - tags - exp responses: '200': description: agent token created content: application/json: schema: type: string /agent_workers/blacklist_token: post: summary: blacklist agent token (requires super admin) operationId: blacklistAgentToken tags: - agent_workers requestBody: description: token to blacklist required: true content: application/json: schema: type: object properties: token: type: string description: The agent token to blacklist expires_at: type: string format: date-time description: Optional expiration date for the blacklist entry required: - token responses: '200': description: token blacklisted successfully /agent_workers/remove_blacklist_token: post: summary: remove agent token from blacklist (requires super admin) operationId: removeBlacklistAgentToken tags: - agent_workers requestBody: description: token to remove from blacklist required: true content: application/json: schema: type: object properties: token: type: string description: The agent token to remove from blacklist required: - token responses: '200': description: token removed from blacklist successfully /agent_workers/list_blacklisted_tokens: get: summary: list blacklisted agent tokens (requires super admin) operationId: listBlacklistedAgentTokens tags: - agent_workers parameters: - name: include_expired in: query description: Whether to include expired blacklisted tokens schema: type: boolean default: false responses: '200': description: list of blacklisted tokens content: application/json: schema: type: array items: type: object properties: token: type: string description: The blacklisted token (without prefix) expires_at: type: string format: date-time description: When the blacklist entry expires blacklisted_at: type: string format: date-time description: When the token was blacklisted blacklisted_by: type: string description: Email of the user who blacklisted the token required: - token - expires_at - blacklisted_at - blacklisted_by /agent_workers/get_min_version: get: summary: get minimum worker version across all workers operationId: getMinVersion tags: - agent_workers responses: '200': description: minimum worker version content: application/json: schema: type: string description: Minimum semantic version across all workers (e.g. "1.583.0") /w/{workspace}/acls/get/{kind}/{path}: get: summary: get granular acls operationId: getGranularAcls tags: - granular_acl parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: kind in: path required: true schema: type: string enum: - script - group_ - resource - schedule - variable - flow - folder - app - raw_app - http_trigger - websocket_trigger - kafka_trigger - nats_trigger - postgres_trigger - mqtt_trigger - gcp_trigger - azure_trigger - sqs_trigger - email_trigger - volume responses: '200': description: acls content: application/json: schema: type: object additionalProperties: type: boolean /w/{workspace}/acls/add/{kind}/{path}: post: summary: add granular acls operationId: addGranularAcls tags: - granular_acl parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: kind in: path required: true schema: type: string enum: - script - group_ - resource - schedule - variable - flow - folder - app - raw_app - http_trigger - websocket_trigger - kafka_trigger - nats_trigger - postgres_trigger - mqtt_trigger - gcp_trigger - azure_trigger - sqs_trigger - email_trigger - volume requestBody: description: acl to add required: true content: application/json: schema: type: object properties: owner: type: string write: type: boolean required: - owner responses: '200': description: granular acl added content: text/plain: schema: type: string /w/{workspace}/acls/remove/{kind}/{path}: post: summary: remove granular acls operationId: removeGranularAcls tags: - granular_acl parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: kind in: path required: true schema: type: string enum: - script - group_ - resource - schedule - variable - flow - folder - app - raw_app - http_trigger - websocket_trigger - kafka_trigger - nats_trigger - postgres_trigger - mqtt_trigger - gcp_trigger - azure_trigger - sqs_trigger - email_trigger - volume requestBody: description: acl to add required: true content: application/json: schema: type: object properties: owner: type: string required: - owner responses: '200': description: granular acl removed content: text/plain: schema: type: string /w/{workspace}/capture/set_config: post: summary: set capture config operationId: setCaptureConfig tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: capture config required: true content: application/json: schema: type: object properties: trigger_kind: type: string enum: &ref_283 - webhook - http - websocket - kafka - default_email - nats - postgres - sqs - mqtt - gcp - azure - email path: type: string is_flow: type: boolean trigger_config: type: object required: - trigger_kind - path - is_flow responses: '200': description: capture config set content: application/json: schema: type: object /w/{workspace}/capture/ping_config/{trigger_kind}/{runnable_kind}/{path}: post: summary: ping capture config operationId: pingCaptureConfig tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 - name: trigger_kind in: path required: true schema: type: string enum: *ref_283 - name: runnable_kind in: path required: true schema: *ref_132 - name: path in: path required: true schema: *ref_60 responses: '200': description: capture config pinged /w/{workspace}/capture/get_configs/{runnable_kind}/{path}: get: summary: get capture configs for a script or flow operationId: getCaptureConfigs tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_kind in: path required: true schema: *ref_132 - name: path in: path required: true schema: *ref_60 responses: '200': description: capture configs for a script or flow content: application/json: schema: type: array items: type: object properties: &ref_552 trigger_config: {} trigger_kind: type: string enum: *ref_283 error: type: string last_server_ping: type: string format: date-time required: &ref_553 - trigger_kind /w/{workspace}/capture/list/{runnable_kind}/{path}: get: summary: list captures for a script or flow operationId: listCaptures tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_kind in: path required: true schema: *ref_132 - name: path in: path required: true schema: *ref_60 - name: trigger_kind in: query schema: type: string enum: *ref_283 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: list of captures for a script or flow content: application/json: schema: type: array items: type: object properties: &ref_284 trigger_kind: type: string enum: *ref_283 main_args: {} preprocessor_args: {} id: type: integer created_at: type: string format: date-time required: &ref_285 - trigger_kind - main_args - preprocessor_args - id - created_at /w/{workspace}/capture/move/{runnable_kind}/{path}: post: summary: move captures and configs for a script or flow operationId: moveCapturesAndConfigs tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_kind in: path required: true schema: *ref_132 - name: path in: path required: true schema: *ref_60 requestBody: description: move captures and configs to a new path required: true content: application/json: schema: type: object properties: new_path: type: string responses: '200': description: captures and configs moved content: text/plain: schema: type: string /w/{workspace}/capture/{id}: get: summary: get a capture operationId: getCapture tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: type: integer responses: '200': description: capture content: application/json: schema: type: object properties: *ref_284 required: *ref_285 delete: summary: delete a capture operationId: deleteCapture tags: - capture parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: type: integer responses: '200': description: capture deleted /w/{workspace}/favorites/star: post: summary: star item operationId: star tags: - favorite parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: content: application/json: schema: type: object properties: path: type: string favorite_kind: type: string enum: - flow - app - script - raw_app - asset responses: '200': description: star item /w/{workspace}/favorites/unstar: post: summary: unstar item operationId: unstar tags: - favorite parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: content: application/json: schema: type: object properties: path: type: string favorite_kind: type: string enum: - flow - app - script - raw_app - asset responses: '200': description: unstar item /w/{workspace}/inputs/history: get: summary: List Inputs used in previously completed jobs operationId: getInputHistory tags: - input parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_id in: query schema: &ref_286 type: string - name: runnable_type in: query schema: &ref_287 type: string enum: &ref_392 - ScriptHash - ScriptPath - FlowPath - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: include_preview in: query schema: type: boolean responses: '200': description: Input history for completed jobs content: application/json: schema: type: array items: type: object properties: &ref_288 id: type: string name: type: string created_by: type: string created_at: type: string format: date-time is_public: type: boolean success: type: boolean required: &ref_289 - id - name - args - created_by - created_at - is_public /w/{workspace}/inputs/{jobOrInputId}/args: get: summary: Get args from history or saved input operationId: getArgsFromHistoryOrSavedInput tags: - input parameters: - name: workspace in: path required: true schema: *ref_4 - name: jobOrInputId in: path required: true schema: type: string - name: input in: query schema: type: boolean - name: allow_large in: query schema: type: boolean responses: '200': description: args content: application/json: schema: {} /w/{workspace}/inputs/list: get: summary: List saved Inputs for a Runnable operationId: listInputs tags: - input parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_id in: query schema: *ref_286 - name: runnable_type in: query schema: *ref_287 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 responses: '200': description: Saved Inputs for a Runnable content: application/json: schema: type: array items: type: object properties: *ref_288 required: *ref_289 /w/{workspace}/inputs/create: post: summary: Create an Input for future use in a script or flow operationId: createInput tags: - input parameters: - name: workspace in: path required: true schema: *ref_4 - name: runnable_id in: query schema: *ref_286 - name: runnable_type in: query schema: *ref_287 requestBody: description: Input required: true content: application/json: schema: type: object properties: &ref_388 name: type: string args: type: object required: &ref_389 - name - args - created_by responses: '201': description: Input created content: text/plain: schema: type: string format: uuid /w/{workspace}/inputs/update: post: summary: Update an Input operationId: updateInput tags: - input parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: UpdateInput required: true content: application/json: schema: type: object properties: &ref_390 id: type: string name: type: string is_public: type: boolean required: &ref_391 - id - name - is_public responses: '201': description: Input updated content: text/plain: schema: type: string format: uuid /w/{workspace}/inputs/delete/{input}: post: summary: Delete a Saved Input operationId: deleteInput tags: - input parameters: - name: workspace in: path required: true schema: *ref_4 - name: input in: path required: true schema: &ref_312 type: string responses: '200': description: Input deleted content: text/plain: schema: type: string format: uuid /w/{workspace}/job_helpers/duckdb_connection_settings: post: summary: >- Converts an S3 resource to the set of instructions necessary to connect DuckDB to an S3 bucket operationId: duckdbConnectionSettings tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: S3 resource to connect to required: true content: application/json: schema: type: object properties: s3_resource: type: object properties: &ref_290 bucket: type: string region: type: string endPoint: type: string useSSL: type: boolean accessKey: type: string secretKey: type: string pathStyle: type: boolean required: &ref_291 - bucket - region - endPoint - useSSL - pathStyle responses: '200': description: Connection settings content: application/json: schema: type: object properties: connection_settings_str: type: string /w/{workspace}/job_helpers/v2/duckdb_connection_settings: post: summary: >- Converts an S3 resource to the set of instructions necessary to connect DuckDB to an S3 bucket operationId: duckdbConnectionSettingsV2 tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: >- S3 resource path to use to generate the connection settings. If empty, the S3 resource defined in the workspace settings will be used required: true content: application/json: schema: type: object properties: s3_resource_path: type: string responses: '200': description: Connection settings content: application/json: schema: type: object properties: connection_settings_str: type: string azure_container_path: type: string required: - connection_settings_str /w/{workspace}/job_helpers/polars_connection_settings: post: summary: >- Converts an S3 resource to the set of arguments necessary to connect Polars to an S3 bucket operationId: polarsConnectionSettings tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: S3 resource to connect to required: true content: application/json: schema: type: object properties: s3_resource: type: object properties: *ref_290 required: *ref_291 responses: '200': description: Connection settings content: application/json: schema: type: object properties: endpoint_url: type: string key: type: string secret: type: string use_ssl: type: boolean cache_regions: type: boolean client_kwargs: type: object properties: &ref_292 region_name: type: string required: &ref_293 - region_name required: - endpoint_url - use_ssl - cache_regions - client_kwargs /w/{workspace}/job_helpers/v2/polars_connection_settings: post: summary: >- Converts an S3 resource to the set of arguments necessary to connect Polars to an S3 bucket operationId: polarsConnectionSettingsV2 tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: >- S3 resource path to use to generate the connection settings. If empty, the S3 resource defined in the workspace settings will be used required: true content: application/json: schema: type: object properties: s3_resource_path: type: string responses: '200': description: Connection settings content: application/json: schema: type: object properties: s3fs_args: type: object properties: endpoint_url: type: string key: type: string secret: type: string use_ssl: type: boolean cache_regions: type: boolean client_kwargs: type: object properties: *ref_292 required: *ref_293 required: - endpoint_url - use_ssl - cache_regions - client_kwargs storage_options: type: object properties: aws_endpoint_url: type: string aws_access_key_id: type: string aws_secret_access_key: type: string aws_region: type: string aws_allow_http: type: string required: - aws_endpoint_url - aws_region - aws_allow_http required: - s3fs_args - storage_options /w/{workspace}/job_helpers/v2/s3_resource_info: post: summary: >- Returns the s3 resource associated to the provided path, or the workspace default S3 resource operationId: s3ResourceInfo tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: >- S3 resource path to use. If empty, the S3 resource defined in the workspace settings will be used required: true content: application/json: schema: type: object properties: s3_resource_path: type: string responses: '200': description: Connection settings content: application/json: schema: type: object properties: *ref_290 required: *ref_291 /w/{workspace}/job_helpers/test_connection: get: summary: Test connection to the workspace object storage operationId: datasetStorageTestConnection tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: storage in: query schema: type: string responses: '200': description: Connection settings content: application/json: schema: {} /w/{workspace}/job_helpers/list_stored_files: get: summary: List the file keys available in a workspace object storage operationId: listStoredFiles tags: - helpers parameters: - 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 schema: type: string - name: storage in: query schema: type: string responses: '200': description: List of file keys content: application/json: schema: type: object properties: next_marker: type: string windmill_large_files: type: array items: type: object properties: &ref_294 s3: type: string required: &ref_295 - s3 restricted_access: type: boolean required: - windmill_large_files /w/{workspace}/job_helpers/load_file_metadata: get: summary: Load metadata of the file operationId: loadFileMetadata tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: file_key in: query required: true schema: type: string - name: storage in: query schema: type: string responses: '200': description: FileMetadata content: application/json: schema: type: object properties: &ref_298 mime_type: type: string size_in_bytes: type: integer last_modified: type: string format: date-time expires: type: string format: date-time version_id: type: string /w/{workspace}/job_helpers/load_file_preview: get: summary: Load a preview of the file operationId: loadFilePreview tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: file_key in: query required: true schema: type: string - name: file_size_in_bytes in: query schema: type: integer - name: file_mime_type in: query schema: type: string - name: csv_separator in: query schema: type: string - name: csv_has_header in: query schema: type: boolean - name: read_bytes_from in: query schema: type: integer - name: read_bytes_length in: query schema: type: integer - name: storage in: query schema: type: string responses: '200': description: FilePreview content: application/json: schema: type: object properties: &ref_296 msg: type: string content: type: string content_type: type: string enum: - RawText - Csv - Parquet - Unknown required: &ref_297 - 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_294 required: *ref_295 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_296 required: *ref_297 /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_298 /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 - name: marker_file description: | If provided, the folder is only considered to exist when this exact sentinel file is present under file_key. Lets callers distinguish a fully populated folder from a partial upload. in: query required: false schema: type: string responses: '200': description: S3 folder existence check result content: application/json: schema: type: object properties: exists: type: boolean description: Whether the path exists is_folder: type: boolean description: Whether the path is a folder (true) or file (false) required: - exists - is_folder /w/{workspace}/job_helpers/load_parquet_preview/{path}: get: summary: Load a preview of a parquet file operationId: loadParquetPreview tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: offset in: query schema: type: number - name: limit in: query schema: type: number - name: sort_col in: query schema: type: string - name: sort_desc in: query schema: type: boolean - name: search_col in: query schema: type: string - name: search_term in: query schema: type: string - name: storage in: query schema: type: string responses: '200': description: Parquet Preview content: application/json: {} /w/{workspace}/job_helpers/load_table_count/{path}: get: summary: Load the table row count operationId: loadTableRowCount tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: search_col in: query schema: type: string - name: search_term in: query schema: type: string - name: storage in: query schema: type: string responses: '200': description: Table count content: application/json: schema: type: object properties: count: type: number /w/{workspace}/job_helpers/load_csv_preview/{path}: get: summary: Load a preview of a csv file operationId: loadCsvPreview tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: path in: path required: true schema: *ref_60 - name: offset in: query schema: type: number - name: limit in: query schema: type: number - name: sort_col in: query schema: type: string - name: sort_desc in: query schema: type: boolean - name: search_col in: query schema: type: string - name: search_term in: query schema: type: string - name: storage in: query schema: type: string - name: csv_separator in: query schema: type: string responses: '200': description: Csv Preview content: application/json: {} /w/{workspace}/job_helpers/delete_s3_file: delete: summary: Permanently delete file from S3 operationId: deleteS3File tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: file_key in: query required: true schema: type: string - name: storage in: query schema: type: string responses: '200': description: Confirmation content: application/json: schema: {} /w/{workspace}/job_helpers/move_s3_file: get: summary: Move a S3 file from one path to the other within the same bucket operationId: moveS3File tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: src_file_key in: query required: true schema: type: string - name: dest_file_key in: query required: true schema: type: string - name: storage in: query schema: type: string responses: '200': description: Confirmation content: application/json: schema: {} /w/{workspace}/job_helpers/upload_s3_file: post: summary: Upload file to S3 bucket operationId: fileUpload tags: - helpers parameters: - name: workspace in: path required: true 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 schema: type: string - name: file_extension in: query required: false schema: type: string - name: s3_resource_path in: query required: false schema: type: string - name: resource_type in: query required: false schema: type: string - name: storage in: query schema: type: string - name: content_type in: query schema: type: string - name: content_disposition in: query schema: type: string requestBody: description: File content required: true content: application/octet-stream: schema: type: string format: binary responses: '200': description: File upload status content: application/json: schema: type: object properties: file_key: type: string required: - file_key /w/{workspace}/job_helpers/download_s3_file: get: summary: Download file from S3 bucket operationId: fileDownload tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: file_key in: query required: true schema: type: string - name: s3_resource_path in: query required: false schema: type: string - name: resource_type in: query required: false schema: type: string - name: storage in: query schema: type: string responses: '200': description: Chunk of the downloaded file content: application/octet-stream: schema: type: string format: binary /w/{workspace}/job_helpers/download_s3_parquet_file_as_csv: get: summary: Download file to S3 bucket operationId: fileDownloadParquetAsCsv tags: - helpers parameters: - name: workspace in: path required: true schema: *ref_4 - name: file_key in: query required: true schema: type: string - name: s3_resource_path in: query required: false schema: type: string - name: resource_type in: query required: false schema: type: string responses: '200': description: The downloaded file content: text/csv: schema: type: string /w/{workspace}/job_metrics/get/{id}: post: summary: get job metrics operationId: getJobMetrics tags: - metrics parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 requestBody: description: parameters for statistics retrieval required: true content: application/json: schema: type: object properties: timeseries_max_datapoints: type: integer from_timestamp: type: string format: date-time to_timestamp: type: string format: date-time responses: '200': description: job details content: application/json: schema: type: object properties: metrics_metadata: type: array items: type: object properties: &ref_533 id: type: string name: type: string required: &ref_534 - id scalar_metrics: type: array items: type: object properties: &ref_535 metric_id: type: string value: type: number required: &ref_536 - id - value timeseries_metrics: type: array items: type: object properties: &ref_537 metric_id: type: string values: type: array items: type: object properties: &ref_539 timestamp: type: string format: date-time value: type: number required: &ref_540 - timestamp - value required: &ref_538 - id - values /w/{workspace}/job_metrics/set_progress/{id}: post: summary: set job metrics operationId: setJobProgress tags: - metrics parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 requestBody: description: parameters for statistics retrieval required: true content: application/json: schema: type: object properties: percent: type: integer flow_job_id: type: string format: uuid responses: '200': description: Job progress updated content: application/json: schema: {} /w/{workspace}/job_metrics/get_progress/{id}: get: summary: get job progress operationId: getJobProgress tags: - metrics parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_172 responses: '200': description: job progress between 0 and 99 content: application/json: schema: type: integer /service_logs/list_files: get: summary: list log files ordered by timestamp operationId: listLogFiles tags: - service_logs parameters: - name: before description: filter on started before (inclusive) timestamp in: query schema: *ref_299 - name: after description: filter on created after (exclusive) timestamp in: query schema: *ref_300 - name: with_error in: query required: false schema: type: boolean responses: '200': description: time content: application/json: schema: type: array items: type: object properties: hostname: type: string mode: type: string worker_group: type: string log_ts: type: string format: date-time file_path: type: string ok_lines: type: integer err_lines: type: integer json_fmt: type: boolean required: - hostname - mode - log_ts - file_path - json_fmt /service_logs/get_log_file/{path}: get: summary: get log file by path operationId: getLogFile tags: - service_logs parameters: - name: path in: path required: true schema: *ref_60 responses: '200': description: log stream content: text/plain: schema: type: string /concurrency_groups/list: get: summary: List all concurrency groups operationId: listConcurrencyGroups tags: - concurrencyGroups responses: '200': description: all concurrency groups content: application/json: schema: type: array items: type: object properties: &ref_541 concurrency_key: type: string total_running: type: number required: &ref_542 - concurrency_key - total_running /concurrency_groups/prune/{concurrency_id}: delete: summary: Delete concurrency group operationId: deleteConcurrencyGroup tags: - concurrencyGroups parameters: - name: concurrency_id in: path required: true schema: &ref_314 type: string responses: '200': description: concurrency group removed content: application/json: schema: type: object properties: {} /concurrency_groups/{id}/key: get: summary: Get the concurrency key for a job that has concurrency limits enabled operationId: getConcurrencyKey tags: - concurrencyGroups parameters: - name: id in: path required: true schema: *ref_172 responses: '200': description: concurrency key for given job content: application/json: schema: type: string /w/{workspace}/concurrency_groups/list_jobs: get: summary: Get intervals of job runtime concurrency operationId: listExtendedJobs tags: - concurrencyGroups - job parameters: - name: concurrency_key in: query required: false schema: type: string - name: row_limit in: query required: false schema: type: number - name: workspace in: path required: true schema: *ref_4 - name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 - name: label description: >- filter by exact matching job label. Supports comma-separated list (e.g. 'deploy,release') and negation by prefixing all values with '!' (e.g. '!deploy,!release') in: query schema: *ref_174 - 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_110 - name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: *ref_157 - name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: *ref_158 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_159 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_160 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_161 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_162 - name: running description: filter on running jobs in: query schema: *ref_163 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_164 - name: completed_before description: filter on started before (inclusive) timestamp in: query schema: *ref_184 - name: completed_after description: filter on started after (exclusive) timestamp in: query schema: *ref_185 - name: created_before_queue description: filter on jobs created before X for jobs in the queue only in: query schema: *ref_186 - name: created_after_queue description: filter on jobs created after X for jobs in the queue only in: query schema: *ref_187 - name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: *ref_165 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 - name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: *ref_168 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_169 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_171 - name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 - name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 - name: trigger_kind description: >- filter by trigger kind. Supports comma-separated list (e.g. 'schedule,webhook') and negation by prefixing all values with '!' (e.g. '!schedule,!webhook') in: query x-go-name: JobTriggerKindParam schema: *ref_188 - name: is_skipped description: is the job skipped in: query schema: type: boolean - name: is_flow_step description: is the job a flow step in: query schema: type: boolean - name: has_null_parent description: has null parent in: query schema: type: boolean - name: success description: filter on successful jobs in: query schema: type: boolean - name: all_workspaces description: >- get jobs from all workspaces (only valid if request come from the `admins` workspace) in: query schema: type: boolean - name: is_not_schedule description: is not a scheduled job in: query schema: type: boolean responses: '200': description: time content: application/json: schema: type: object properties: &ref_543 jobs: type: array items: oneOf: *ref_193 discriminator: *ref_194 obscured_jobs: type: array items: type: object properties: &ref_393 typ: type: string started_at: type: string format: date-time duration_ms: type: number omitted_obscured_jobs: description: >- Obscured jobs omitted for security because of too specific filtering type: boolean required: &ref_544 - jobs - obscured_jobs /srch/w/{workspace}/index/search/job: get: summary: Search through jobs with a string query operationId: searchJobsIndex tags: - indexSearch parameters: - name: workspace in: path required: true schema: *ref_4 - name: search_query in: query required: true schema: type: string - name: pagination_offset in: query required: false schema: type: integer responses: '200': description: search results content: application/json: schema: type: object properties: query_parse_errors: description: >- a list of the terms that couldn't be parsed (and thus ignored) type: array items: type: string hits: description: the jobs that matched the query type: array items: type: object properties: &ref_549 dancer: type: string hit_count: description: how many jobs matched in total type: number index_metadata: description: Metadata about the index current state type: object properties: indexed_until: description: Datetime of the most recently indexed job type: string format: date-time lost_lock_ownership: description: Is the current indexer service being replaced type: boolean max_index_time_window_secs: description: Maximum time window in seconds for indexing type: number /srch/index/search/service_logs: get: summary: Search through service logs with a string query operationId: searchLogsIndex tags: - indexSearch parameters: - name: search_query in: query required: true schema: type: string - name: mode in: query required: true schema: type: string - name: worker_group in: query required: false schema: type: string - name: hostname in: query required: true schema: type: string - name: min_ts in: query required: false schema: type: string format: date-time - name: max_ts in: query required: false schema: type: string format: date-time responses: '200': description: search results content: application/json: schema: type: object properties: query_parse_errors: description: >- a list of the terms that couldn't be parsed (and thus ignored) type: array items: type: string hits: description: log files that matched the query type: array items: type: object properties: &ref_550 dancer: type: string /srch/index/search/count_service_logs: get: summary: Search and count the log line hits on every provided host operationId: countSearchLogsIndex tags: - indexSearch parameters: - name: search_query in: query required: true schema: type: string - name: min_ts in: query required: false schema: type: string format: date-time - name: max_ts in: query required: false schema: type: string format: date-time responses: '200': description: search results content: application/json: schema: type: object properties: query_parse_errors: description: >- a list of the terms that couldn't be parsed (and thus ignored) type: array items: type: string count_per_host: description: count of log lines that matched the query per hostname type: object /srch/index/storage/disk: get: summary: Get index disk storage sizes from the indexer. operationId: getIndexDiskStorageSizes tags: - indexSearch responses: '200': description: disk storage sizes for each index content: application/json: schema: type: object properties: job_index_disk_size_bytes: type: integer nullable: true log_index_disk_size_bytes: type: integer nullable: true /indexer/delete/{idx_name}: delete: summary: Clear an index and restart the indexer. operationId: clearIndex tags: - indexSearch parameters: - name: idx_name in: path required: true schema: type: string enum: - JobIndex - ServiceLogIndex responses: '200': description: idx to be deleted and indexer restarting content: text/plain: schema: type: string /indexer/storage: get: summary: Get index storage sizes (disk and S3). operationId: getIndexStorageSizes tags: - indexSearch responses: '200': description: storage sizes for each index content: application/json: schema: type: object properties: job_index: type: object properties: disk_size_bytes: type: integer nullable: true s3_size_bytes: type: integer nullable: true service_log_index: type: object properties: disk_size_bytes: type: integer nullable: true s3_size_bytes: type: integer nullable: true /indexer/status: get: summary: Get indexer status including liveness and storage sizes. operationId: getIndexerStatus tags: - indexSearch responses: '200': description: indexer status for each index content: application/json: schema: type: object properties: job_indexer: type: object properties: is_alive: type: boolean state: type: string enum: - running - stale - never_started last_locked_at: type: string format: date-time nullable: true owner: type: string nullable: true storage: type: object properties: disk_size_bytes: type: integer nullable: true s3_size_bytes: type: integer nullable: true log_indexer: type: object properties: is_alive: type: boolean state: type: string enum: - running - stale - never_started last_locked_at: type: string format: date-time nullable: true owner: type: string nullable: true storage: type: object properties: disk_size_bytes: type: integer nullable: true s3_size_bytes: type: integer nullable: true /w/{workspace}/assets/list: get: summary: List all assets in the workspace with cursor pagination operationId: listAssets tags: - asset parameters: - name: workspace in: path required: true 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 - name: path in: query description: exact path match filter schema: type: string - name: columns in: query description: JSONB subset match filter for columns using base64 encoded JSON schema: type: string - name: broad_filter description: >- broad search across multiple fields (case-insensitive substring match) in: query schema: type: string responses: '200': description: paginated assets in the workspace content: application/json: schema: type: object required: - assets properties: assets: type: array items: type: object required: - path - kind - usages properties: path: type: string kind: type: string enum: *ref_301 usages: type: array items: type: object required: - path - kind properties: path: type: string kind: type: string enum: &ref_303 - script - flow - job access_type: type: string enum: &ref_302 - r - w - rw nullable: true columns: type: object description: The columns used (for tables) additionalProperties: type: string enum: *ref_302 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 operationId: listAssetsByUsage tags: - asset parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: description: list assets by usages required: true content: application/json: schema: type: object required: - usages properties: usages: type: array items: type: object required: - path - kind properties: path: type: string kind: type: string enum: *ref_303 responses: '200': description: all assets used by the given usage paths, in the same order content: application/json: schema: type: array items: type: array items: type: object required: - path - kind properties: path: type: string kind: type: string enum: *ref_301 access_type: type: string enum: *ref_302 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 /w/{workspace}/volumes/list: get: summary: List all volumes in the workspace operationId: listVolumes tags: - volume parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of volumes content: application/json: schema: type: array items: type: object required: &ref_563 - name - size_bytes - file_count - created_at - created_by properties: &ref_564 name: type: string size_bytes: type: integer format: int64 file_count: type: integer created_at: type: string format: date-time created_by: type: string updated_at: type: string format: date-time nullable: true last_used_at: type: string format: date-time nullable: true extra_perms: type: object additionalProperties: true /w/{workspace}/volumes/storage: get: summary: Get the volume storage name (secondary storage) or null for primary operationId: getVolumeStorage tags: - volume parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: volume storage name or null content: application/json: schema: type: string nullable: true /w/{workspace}/volumes/create: post: summary: Create a new volume operationId: createVolume tags: - volume parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - name properties: name: type: string responses: '200': description: volume created content: text/plain: schema: type: string /w/{workspace}/volumes/delete/{name}: delete: summary: Delete a volume (admin only) operationId: deleteVolume tags: - volume parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: type: string responses: '200': description: volume deleted content: text/plain: schema: type: string /mcp/w/{workspace}/list_tools: get: summary: list available MCP tools operationId: listMcpTools tags: - mcp parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: list of MCP tools available for the workspace content: application/json: schema: type: array items: type: object required: &ref_376 - name - description - instructions - path - method properties: &ref_377 name: type: string description: The tool name/operation ID description: type: string description: Short description of the tool instructions: type: string description: Detailed instructions for using the tool path: type: string description: API endpoint path method: type: string description: HTTP method (GET, POST, etc.) path_params_schema: type: object description: JSON schema for path parameters nullable: true query_params_schema: type: object description: JSON schema for query parameters nullable: true body_schema: type: object description: JSON schema for request body nullable: true /mcp/oauth/discover: post: summary: discover MCP server OAuth metadata operationId: discoverMcpOAuth tags: - mcp_oauth requestBody: required: true content: application/json: schema: type: object required: - mcp_server_url properties: mcp_server_url: type: string description: URL of the MCP server to discover OAuth metadata from responses: '200': description: OAuth metadata from MCP server content: application/json: schema: type: object properties: scopes_supported: type: array items: type: string authorization_endpoint: type: string token_endpoint: type: string registration_endpoint: type: string supports_dynamic_registration: type: boolean /mcp/oauth/start: get: summary: start MCP OAuth popup flow description: >- Opens in a popup, discovers OAuth metadata, registers client, and redirects to OAuth provider operationId: startMcpOAuthPopup tags: - mcp_oauth parameters: - name: mcp_server_url in: query required: true schema: type: string description: URL of the MCP server to connect to - name: scopes in: query required: false schema: type: string description: Comma-separated list of OAuth scopes to request responses: '302': description: Redirect to OAuth provider authorization URL /mcp/oauth/callback: get: security: [] summary: MCP OAuth callback description: >- Handles OAuth callback, exchanges code for tokens, returns HTML that posts message to opener operationId: mcpOAuthCallback tags: - mcp_oauth parameters: - name: code in: query required: true schema: type: string description: OAuth authorization code - name: state in: query required: true schema: type: string description: CSRF state token responses: '200': description: >- HTML page with JavaScript that posts tokens to opener window and closes content: text/html: schema: type: string components: securitySchemes: bearerAuth: type: http scheme: bearer cookieAuth: type: apiKey in: cookie name: token parameters: Id: name: id in: path required: true schema: *ref_304 Key: name: key in: path required: true schema: *ref_25 WorkspaceId: name: workspace in: path required: true schema: *ref_4 PublicationName: name: publication in: path required: true description: The name of the publication schema: *ref_264 VersionId: name: version in: path required: true schema: type: number Token: name: token in: path required: true schema: *ref_305 AccountId: name: id in: path required: true schema: *ref_76 ClientName: name: client_name in: path required: true schema: *ref_73 ScriptPath: name: path in: path required: true schema: *ref_92 ScriptHash: name: hash in: path required: true schema: *ref_101 JobId: name: id in: path required: true schema: *ref_172 Path: name: path in: path required: true schema: *ref_60 CustomPath: name: custom_path in: path required: true schema: *ref_133 PathId: name: id in: path required: true schema: *ref_79 PathVersion: name: version in: path required: true schema: *ref_306 Name: name: name in: path required: true schema: *ref_273 Page: name: page description: which page to return (start at 1, default 1) in: query schema: *ref_17 PerPage: name: per_page description: number of items to return for a given page (default 30, max 100) in: query schema: *ref_18 JobTriggerKind: name: trigger_kind description: >- filter by trigger kind. Supports comma-separated list (e.g. 'schedule,webhook') and negation by prefixing all values with '!' (e.g. '!schedule,!webhook') in: query x-go-name: JobTriggerKindParam schema: *ref_188 OrderDesc: name: order_desc description: order by desc order (default true) in: query schema: *ref_118 CreatedBy: name: created_by description: >- filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob') in: query schema: *ref_119 Label: name: label description: >- filter by exact matching job label. Supports comma-separated list (e.g. 'deploy,release') and negation by prefixing all values with '!' (e.g. '!deploy,!release') in: query schema: *ref_174 Worker: name: worker description: >- filter by worker this job ran on. Supports comma-separated list (e.g. 'worker-1,worker-2') and negation by prefixing all values with '!' (e.g. '!worker-1,!worker-2') in: query schema: *ref_156 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_110 WorkerTag: name: tag description: Override the tag to use in: query schema: *ref_111 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_112 NewJobId: name: job_id description: >- The job id to assign to the created job. if missing, job is chosen randomly using the ULID scheme. If a job id already exists in the queue or as a completed job, the request to create one will fail (Bad Request) in: query schema: *ref_113 IncludeHeader: 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_114 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_115 SkipPreprocessor: name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_116 Payload: 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_117 ScriptStartPath: name: script_path_start description: >- filter by script path prefix. Supports comma-separated list (e.g. 'f/folder1,f/folder2') and negation by prefixing all values with '!' (e.g. '!f/folder1,!f/folder2') in: query schema: *ref_158 SchedulePath: name: schedule_path description: mask to filter by schedule path in: query schema: *ref_159 TriggerPath: name: trigger_path description: >- filter by trigger path. Supports comma-separated list (e.g. 'f/trigger1,f/trigger2') and negation by prefixing all values with '!' (e.g. '!f/trigger1,!f/trigger2') in: query schema: *ref_307 ScriptExactPath: name: script_path_exact description: >- filter by exact matching script path. Supports comma-separated list (e.g. 'f/script1,f/script2') and negation by prefixing all values with '!' (e.g. '!f/script1,!f/script2') in: query schema: *ref_157 ScriptExactHash: name: script_hash description: mask to filter exact matching path in: query schema: *ref_160 CreatedBefore: name: created_before description: filter on created before (inclusive) timestamp in: query schema: *ref_182 CreatedAfter: name: created_after description: filter on created after (exclusive) timestamp in: query schema: *ref_183 StartedBefore: name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_161 StartedAfter: name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_162 Before: name: before description: filter on started before (inclusive) timestamp in: query schema: *ref_299 CompletedBefore: name: completed_before description: filter on started before (inclusive) timestamp in: query schema: *ref_184 CompletedAfter: name: completed_after description: filter on started after (exclusive) timestamp in: query schema: *ref_185 CreatedAfterQueue: name: created_after_queue description: filter on jobs created after X for jobs in the queue only in: query schema: *ref_187 CreatedBeforeQueue: name: created_before_queue description: filter on jobs created before X for jobs in the queue only in: query schema: *ref_186 Success: name: success description: filter on successful jobs in: query schema: *ref_170 ScheduledForBeforeNow: name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_164 Suspended: name: suspended description: filter on suspended jobs in: query schema: *ref_166 Running: name: running description: filter on running jobs in: query schema: *ref_163 AllowWildcards: name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_171 ArgsFilter: name: args description: filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_167 Tag: name: tag description: >- filter by tag/worker group. Supports comma-separated list (e.g. 'gpu,highmem') and negation by prefixing all values with '!' (e.g. '!gpu,!highmem') in: query schema: *ref_168 ResultFilter: name: result description: filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_169 After: name: after description: filter on created after (exclusive) timestamp in: query schema: *ref_300 Username: name: username description: filter on exact username of user in: query schema: *ref_308 Operation: name: operation description: filter on exact or prefix name of operation in: query schema: *ref_309 ResourceName: name: resource description: filter on exact or prefix name of resource in: query schema: *ref_310 ActionKind: name: action_kind description: filter on type of operation in: query schema: *ref_311 JobKinds: name: job_kinds description: >- filter by job kind. Supports comma-separated list of values ('preview', 'script', 'dependencies', 'flow') and negation by prefixing all values with '!' (e.g. '!preview,!dependencies') in: query schema: *ref_165 RunnableId: name: runnable_id in: query schema: *ref_286 RunnableTypeQuery: name: runnable_type in: query schema: *ref_287 InputId: name: input in: path required: true schema: *ref_312 GetStarted: name: get_started in: query schema: *ref_313 ConcurrencyId: name: concurrency_id in: path required: true schema: *ref_314 RunnableKind: name: runnable_kind in: path required: true schema: *ref_132 schemas: OpenFlow: type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: *ref_120 required: *ref_121 FlowValue: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_149 required: *ref_150 Retry: type: object description: Retry configuration for failed module executions properties: *ref_197 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 nullable: true description: >- Custom error message when stopping with an error. Mutually exclusive with skip_if_stopped. If set to a non-empty string, the flow stops with this error. If empty string, a default error message is used. If null or omitted, no error is raised. 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: description: >- The actual implementation of a flow step. Can be a script (inline or referenced), subflow, loop, branch, or special module type oneOf: *ref_88 discriminator: *ref_89 stop_after_if: description: Early termination condition for a module type: object properties: *ref_90 required: *ref_91 stop_after_all_iters_if: description: Early termination condition for a module type: object properties: *ref_90 required: *ref_91 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: 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_80 discriminator: *ref_81 cache_ttl: type: number description: Cache duration in seconds for this step's results cache_ignore_s3_path: type: boolean timeout: 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_80 discriminator: *ref_81 delete_after_secs: type: integer description: >- If set, delete the step's args, result and logs after this many seconds following job completion summary: type: string description: Short description of what this step does mock: type: object description: Mock configuration for testing without executing the actual step properties: enabled: type: boolean description: If true, return mock value instead of executing return_value: description: Value to return when mocked suspend: type: object description: Configuration for approval/resume steps that wait for user input properties: required_events: type: integer description: Number of approvals required before continuing timeout: type: integer description: Timeout in seconds before auto-continuing or canceling resume_form: type: object description: Form schema for collecting input when resuming properties: schema: type: object description: JSON Schema for the resume form user_auth_required: type: boolean description: If true, only authenticated users can approve user_groups_required: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_80 discriminator: *ref_81 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_315 debouncing: description: Debounce configuration for this step (EE only) type: object properties: debounce_delay_s: type: integer description: >- Delay in seconds to debounce this step's executions across flow runs debounce_key: type: string description: >- Expression to group debounced executions. Supports $workspace and $args[name]. Default: $workspace/flow/- debounce_args_to_accumulate: type: array description: Array-type arguments to accumulate across debounced executions items: type: string max_total_debouncing_time: type: integer description: Maximum total time in seconds before forced execution max_total_debounces_amount: type: integer description: Maximum number of debounces before forced execution required: - value - id InputTransform: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_138 discriminator: *ref_139 StaticTransform: type: object description: >- Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource' properties: value: description: The static value. For resources, use format '$res:path/to/resource' type: type: string enum: - static required: - type JavascriptTransform: type: object description: >- JavaScript expression evaluated at runtime. Can reference previous step results via 'results.step_id' or flow inputs via 'flow_input.property'. Inside loops, use 'flow_input.iter.value' for the current iteration value properties: expr: type: string description: >- JavaScript expression returning the value. Available variables - results (object with all previous step results), flow_input (flow inputs), flow_input.iter (in loops) type: type: string enum: - javascript required: - expr - type AiTransform: type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: type: type: string enum: - ai required: - type ProviderConfig: type: object description: >- Complete AI provider configuration with resource reference and model selection properties: kind: type: string description: Supported AI provider types enum: *ref_316 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 description: No conversation memory/context properties: *ref_317 required: *ref_318 - type: object description: Automatic context management properties: *ref_319 required: *ref_320 - type: object description: Explicit message history properties: *ref_321 required: *ref_322 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 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_323 required: *ref_324 - type: object description: >- Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code properties: *ref_325 required: *ref_326 - type: object description: >- Reference to an existing flow by path. Use this to call another flow as a subflow properties: *ref_327 required: *ref_328 - 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: *ref_329 required: *ref_330 - 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: *ref_331 required: *ref_332 - 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_333 required: *ref_334 - 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_335 required: *ref_336 - type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: *ref_337 required: *ref_338 - 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_339 required: *ref_340 discriminator: propertyName: type mapping: rawscript: '#/components/schemas/schemas-RawScript' script: '#/components/schemas/schemas-PathScript' flow: '#/components/schemas/schemas-PathFlow' forloopflow: '#/components/schemas/schemas-ForloopFlow' whileloopflow: '#/components/schemas/schemas-WhileloopFlow' branchone: '#/components/schemas/schemas-BranchOne' branchall: '#/components/schemas/schemas-BranchAll' identity: '#/components/schemas/schemas-Identity' aiagent: '#/components/schemas/schemas-AiAgent' RawScript: type: object description: >- Inline script with code defined directly in the flow. Use 'bun' as default language if unspecified. The script receives arguments from input_transforms properties: input_transforms: type: object description: >- Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments additionalProperties: 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_80 discriminator: *ref_81 content: type: string description: The script source code. Should export a 'main' function language: type: string description: Programming language for this script enum: - deno - bun - python3 - go - bash - powershell - postgresql - mysql - bigquery - snowflake - mssql - oracledb - graphql - nativets - php - rust - ansible - csharp - nu - java - ruby - rlang - duckdb path: type: string description: Optional path for saving this script lock: type: string description: Lock file content for dependencies type: type: string enum: - rawscript tag: type: string description: Worker group tag for execution routing concurrent_limit: type: number description: Maximum concurrent executions of this script concurrency_time_window_s: type: number description: Time window for concurrent_limit custom_concurrency_key: type: string description: Custom key for grouping concurrent executions is_trigger: type: boolean description: If true, this script is a trigger that can start the flow assets: type: array description: >- External resources this script accesses (S3 objects, resources, etc.) items: type: object required: - path - kind properties: path: type: string description: Path to the asset kind: type: string description: Type of asset enum: - s3object - resource - ducklake - datatable - volume access_type: type: string nullable: true description: Access level for this asset enum: - r - w - rw alt_access_type: type: string nullable: true description: Alternative access level enum: - r - w - rw required: - type - content - language - input_transforms PathScript: type: object description: >- Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code properties: input_transforms: type: object description: >- Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments additionalProperties: 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_80 discriminator: *ref_81 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: 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_80 discriminator: *ref_81 path: type: string description: Path to the flow in the workspace (e.g., 'f/flows/process_user') type: type: string enum: - flow required: - type - path - input_transforms ForloopFlow: type: object description: >- Executes nested modules in a loop over an iterator. Inside the loop, use 'flow_input.iter.value' to access the current iteration value, and 'flow_input.iter.index' for the index. Supports parallel execution for better performance on I/O-bound operations properties: modules: type: array description: >- Steps to execute for each iteration. These can reference the iteration value via 'flow_input.iter.value' items: type: object description: A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 iterator: 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_80 discriminator: *ref_81 skip_failures: type: boolean description: >- If true, iteration failures don't stop the loop. Failed iterations return null type: type: string enum: - forloopflow parallel: type: boolean description: >- If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency parallelism: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_80 discriminator: *ref_81 squash: type: boolean required: - modules - iterator - skip_failures - type WhileloopFlow: type: object description: >- Executes nested modules repeatedly while a condition is true. The loop checks the condition after each iteration. Use stop_after_if on modules to control loop termination properties: modules: type: array description: >- Steps to execute in each iteration. Use stop_after_if to control when the loop ends items: type: object description: A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 skip_failures: type: boolean description: >- If true, iteration failures don't stop the loop. Failed iterations return null type: type: string enum: - whileloopflow parallel: type: boolean description: >- If true, iterations run concurrently (use with caution in while loops) parallelism: description: >- Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs oneOf: *ref_80 discriminator: *ref_81 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 description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 required: - modules - expr default: type: array description: Steps to execute if no branch expressions match items: type: object description: A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 type: type: string enum: - branchone required: - branches - default - type BranchAll: type: object description: >- Parallel branching where all branches execute simultaneously. Unlike BranchOne, all branches run regardless of conditions. Useful for executing independent tasks concurrently properties: branches: type: array description: >- Array of branches that all execute (either in parallel or sequentially) items: type: object properties: summary: type: string description: Short description of this branch's purpose skip_failure: type: boolean description: If true, failure in this branch doesn't fail the entire flow modules: type: array description: Steps to execute in this branch items: type: object description: >- A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 required: - modules type: type: string enum: - branchall parallel: type: boolean description: >- If true, all branches execute concurrently. If false, they execute sequentially required: - branches - type AiAgent: type: object description: >- AI agent step that can use tools to accomplish tasks. The agent receives inputs and can call any of its configured tools to complete the task properties: input_transforms: type: object description: Input parameters for the AI agent mapped to their values properties: provider: description: >- Provider configuration - can be static (ProviderConfig), JavaScript expression, or AI-determined oneOf: *ref_341 discriminator: *ref_342 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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_343 discriminator: *ref_344 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_80 discriminator: *ref_81 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_attachments: 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_80 discriminator: *ref_81 description: > Array of file references (images or PDFs) for the AI agent. Format: Array<{ bucket: string, key: string }> - S3 object references Example: [{ bucket: 'my-bucket', key: 'documents/report.pdf' }] 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_80 discriminator: *ref_81 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_80 discriminator: *ref_81 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 max_iterations: 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_80 discriminator: *ref_81 description: > Number. Limits how many times the agent can loop through reasoning and tool use. Range: 1-1000. 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_345 required: *ref_346 type: type: string enum: - aiagent omit_output_from_conversation: type: boolean default: false description: >- If true, this AI agent step does not persist its assistant or tool messages to the flow conversation when chat mode is enabled. parallel: type: boolean description: If true, the agent can execute multiple tool calls in parallel required: - tools - type - input_transforms Identity: type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: type: type: string enum: - identity flow: type: boolean description: If true, marks this as a flow identity (special handling) required: - type FlowStatus: type: object properties: *ref_175 required: *ref_176 FlowStatusModule: type: object properties: type: type: string enum: - WaitingForPriorSteps - WaitingForEvents - WaitingForExecutor - InProgress - Success - Failure id: type: string job: type: string format: uuid count: type: integer progress: type: integer iterator: type: object properties: index: type: integer itered: type: array items: {} itered_len: type: integer args: {} flow_jobs: type: array items: type: string flow_jobs_success: type: array items: type: boolean flow_jobs_duration: type: object properties: started_at: type: array items: type: string duration_ms: type: array items: type: integer branch_chosen: type: object properties: type: type: string enum: - branch - default branch: type: integer required: - type branchall: type: object properties: branch: type: integer len: type: integer required: - branch - len approvers: type: array items: type: object properties: resume_id: type: integer approver: type: string required: - resume_id - approver failed_retries: type: array items: type: string format: uuid skipped: type: boolean agent_actions: type: array items: type: object oneOf: - type: object properties: job_id: type: string format: uuid function_name: type: string type: type: string enum: - tool_call module_id: type: string required: - job_id - function_name - type - module_id - type: object properties: call_id: type: string format: uuid function_name: type: string resource_path: type: string type: type: string enum: - mcp_tool_call arguments: type: object required: - call_id - function_name - resource_path - type - type: object properties: type: type: string enum: - web_search required: - type - type: object properties: type: type: string enum: - message required: - content - type agent_actions_success: type: array items: type: boolean required: - type FlowNote: type: object description: A sticky note attached to a flow for documentation and annotation properties: id: type: string description: Unique identifier for the note text: type: string description: Content of the note position: type: object description: Position of the note in the flow editor properties: x: type: number description: X coordinate 'y': type: number description: Y coordinate required: - x - 'y' size: type: object description: Size of the note in the flow editor properties: width: type: number description: Width in pixels height: type: number description: Height in pixels required: - width - height color: type: string description: Color of the note (e.g., "yellow", "#ffff00") type: type: string enum: - free - group description: >- Type of note - 'free' for standalone notes, 'group' for notes that group other nodes locked: type: boolean default: false description: Whether the note is locked and cannot be edited or moved contained_node_ids: type: array items: type: string description: For group notes, the IDs of nodes contained within this group required: - id - text - color - type CiTestResult: type: object properties: *ref_108 required: *ref_109 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_347 properties: *ref_348 DatabaseHealth: type: object description: Database health status required: *ref_349 properties: *ref_350 PoolStats: type: object description: Database connection pool statistics required: *ref_351 properties: *ref_352 WorkersHealth: type: object description: Workers health status required: *ref_353 properties: *ref_354 QueueHealth: type: object description: Job queue status required: *ref_355 properties: *ref_356 ReadinessHealth: type: object description: Server readiness status required: *ref_357 properties: *ref_358 AutoInviteConfig: type: object description: Configuration for auto-inviting users to the workspace properties: *ref_359 ErrorHandlerConfig: type: object description: Configuration for the workspace error handler properties: *ref_360 SuccessHandlerConfig: type: object description: Configuration for the workspace success handler properties: *ref_361 EditErrorHandler: description: >- Request body for editing the workspace error handler. Accepts both new grouped format and legacy flat format for backward compatibility. oneOf: *ref_362 EditErrorHandlerNew: type: object description: New grouped format for editing error handler properties: *ref_363 EditErrorHandlerLegacy: type: object description: >- Legacy flat format for editing error handler (deprecated, use new format) properties: *ref_364 EditSuccessHandler: description: >- Request body for editing the workspace success handler. Accepts both new grouped format and legacy flat format for backward compatibility. oneOf: *ref_365 EditSuccessHandlerNew: type: object description: New grouped format for editing success handler properties: *ref_366 EditSuccessHandlerLegacy: type: object description: >- Legacy flat format for editing success handler (deprecated, use new format) properties: *ref_367 VaultSettings: type: object required: *ref_27 properties: *ref_28 AzureKeyVaultSettings: type: object required: *ref_31 properties: *ref_32 AwsSecretsManagerSettings: type: object required: *ref_33 properties: *ref_34 SecretMigrationFailure: type: object required: *ref_368 properties: *ref_369 SecretMigrationReport: type: object required: *ref_29 properties: *ref_30 JwksResponse: type: object required: *ref_370 properties: *ref_371 FlowConversation: type: object required: *ref_372 properties: *ref_373 FlowConversationMessage: type: object required: *ref_374 properties: *ref_375 EndpointTool: type: object required: *ref_376 properties: *ref_377 AIProvider: type: string enum: *ref_51 GitSyncObjectType: type: string enum: *ref_48 AIProviderModel: type: object properties: *ref_43 required: *ref_44 AIProviderConfig: type: object properties: *ref_378 required: *ref_379 AIConfig: type: object properties: *ref_50 InstanceAIProviderSummary: type: object properties: *ref_380 required: *ref_381 InstanceAISummary: type: object properties: *ref_52 required: *ref_53 Alert: type: object properties: *ref_382 required: *ref_383 Configs: type: object nullable: true properties: *ref_384 WorkspaceDependencies: type: object properties: *ref_97 required: *ref_98 NewWorkspaceDependencies: type: object properties: *ref_385 required: *ref_386 Script: type: object properties: *ref_99 required: *ref_100 NewScript: type: object properties: *ref_104 required: *ref_105 NewScriptWithDraft: allOf: *ref_387 ScriptHistory: type: object properties: *ref_106 required: *ref_107 ScriptArgs: type: object description: The arguments to pass to the script or flow additionalProperties: true Input: type: object properties: *ref_288 required: *ref_289 CreateInput: type: object properties: *ref_388 required: *ref_389 UpdateInput: type: object properties: *ref_390 required: *ref_391 RunnableType: type: string enum: *ref_392 QueuedJob: type: object properties: *ref_191 required: *ref_192 CompletedJob: type: object properties: *ref_189 required: *ref_190 ExportableCompletedJob: type: object description: Completed job with full data for export/import operations properties: *ref_178 required: *ref_179 ExportableQueuedJob: type: object description: Queued job with full data for export/import operations properties: *ref_180 required: *ref_181 ObscuredJob: type: object properties: *ref_393 Job: oneOf: *ref_193 discriminator: *ref_194 User: type: object properties: *ref_35 required: *ref_36 UserSource: type: object properties: *ref_394 required: *ref_395 UserUsage: type: object properties: *ref_396 Login: type: object properties: *ref_397 required: *ref_398 PasswordResetResponse: type: object properties: *ref_7 required: *ref_8 EditWorkspaceUser: type: object properties: *ref_399 OffboardAffectedPaths: type: object properties: *ref_11 OffboardPreview: type: object properties: *ref_12 required: *ref_13 OffboardTokenInfo: type: object properties: *ref_400 required: *ref_401 OffboardRequest: type: object properties: *ref_402 required: *ref_403 OffboardResponse: type: object properties: *ref_14 OffboardSummary: type: object properties: *ref_404 required: *ref_405 GlobalOffboardPreview: type: object properties: *ref_406 required: *ref_407 WorkspaceOffboardPreview: type: object properties: *ref_408 required: *ref_409 GlobalOffboardRequest: type: object properties: *ref_410 WorkspaceReassignment: type: object properties: *ref_411 required: *ref_412 TruncatedToken: type: object properties: *ref_102 required: *ref_103 ExternalJwtToken: type: object properties: *ref_413 required: *ref_414 NewToken: type: object properties: *ref_415 NewTokenImpersonate: type: object properties: *ref_416 required: *ref_417 ListableVariable: type: object properties: *ref_61 required: *ref_62 ContextualVariable: type: object properties: *ref_418 required: *ref_419 CreateVariable: type: object properties: *ref_420 required: *ref_421 EditVariable: type: object properties: *ref_422 AuditLog: type: object properties: *ref_5 required: *ref_6 MainArgSignature: type: object properties: type: type: string enum: - Valid - Invalid error: type: string star_args: type: boolean star_kwargs: type: boolean args: type: array items: type: object properties: name: type: string typ: oneOf: - type: string enum: - float - int - bool - email - unknown - bytes - dict - datetime - sql - type: object properties: resource: type: string nullable: true required: - resource - type: object properties: str: type: array items: type: string nullable: true required: - str - type: object properties: object: type: object properties: name: type: string props: type: array items: type: object properties: key: type: string typ: oneOf: - type: string enum: - float - int - bool - email - unknown - bytes - dict - datetime - sql - type: object properties: str: {} required: - str required: - key - typ required: - object - type: object properties: list: oneOf: - type: string enum: - float - int - bool - email - unknown - bytes - dict - datetime - sql - type: object properties: str: {} required: - str nullable: true required: - list has_default: type: boolean default: {} required: - name - typ auto_kind: type: string nullable: true has_preprocessor: type: boolean nullable: true required: - star_args - start_kwargs - args - type - error - auto_kind - has_preprocessor ScriptLang: type: string enum: *ref_94 ScriptModule: type: object description: An additional module file associated with a script properties: *ref_95 required: *ref_96 Preview: type: object properties: *ref_141 required: *ref_142 PreviewInline: type: object properties: *ref_423 required: *ref_424 InlineScriptArgs: type: object properties: *ref_140 WorkflowTask: type: object properties: *ref_425 required: *ref_426 WorkflowStatusRecord: type: object additionalProperties: type: object properties: *ref_177 WorkflowStatus: type: object properties: *ref_177 CreateResource: type: object properties: *ref_427 required: *ref_428 EditResource: type: object properties: *ref_429 Resource: type: object properties: *ref_430 required: *ref_431 ListableResource: type: object properties: *ref_432 required: *ref_433 ResourceType: type: object properties: *ref_77 required: *ref_78 EditResourceType: type: object properties: *ref_434 Schedule: type: object properties: *ref_198 required: *ref_199 ScheduleWJobs: allOf: *ref_435 ErrorHandler: type: string enum: - custom - slack - teams - email NewSchedule: type: object properties: *ref_436 required: *ref_437 EditSchedule: type: object properties: *ref_438 required: *ref_439 JobTriggerKind: description: job trigger kind (schedule, http, websocket...) type: string enum: *ref_173 TriggerMode: description: job trigger mode type: string enum: *ref_207 TriggerExtraProperty: type: object properties: *ref_214 required: *ref_215 AuthenticationMethod: type: string enum: *ref_206 RunnableKind: type: string enum: *ref_200 OpenapiSpecFormat: type: string enum: *ref_440 OpenapiHttpRouteFilters: type: object properties: *ref_441 required: *ref_442 WebhookFilters: type: object properties: *ref_443 required: *ref_444 OpenapiV3Info: type: object properties: *ref_445 required: *ref_446 GenerateOpenapiSpec: type: object properties: *ref_201 HttpMethod: type: string enum: *ref_204 HttpRequestType: type: string enum: *ref_205 HttpTrigger: allOf: *ref_208 type: object properties: *ref_209 required: *ref_210 NewHttpTrigger: type: object properties: *ref_202 required: *ref_203 EditHttpTrigger: type: object properties: *ref_447 required: *ref_448 TriggersCount: type: object properties: *ref_125 WebsocketHeartbeat: type: object properties: *ref_212 required: *ref_213 WebsocketTrigger: allOf: *ref_216 type: object properties: *ref_217 required: *ref_218 NewWebsocketTrigger: type: object properties: *ref_449 required: *ref_450 EditWebsocketTrigger: type: object properties: *ref_451 required: *ref_452 WebsocketTriggerInitialMessage: anyOf: *ref_211 MqttQoS: type: string enum: *ref_453 MqttV3Config: type: object properties: *ref_238 MqttV5Config: type: object properties: *ref_239 MqttSubscribeTopic: type: object properties: *ref_236 required: *ref_237 MqttClientVersion: type: string enum: *ref_240 MqttTrigger: allOf: *ref_241 type: object properties: *ref_242 required: *ref_243 NewMqttTrigger: type: object properties: *ref_454 required: *ref_455 EditMqttTrigger: type: object properties: *ref_456 required: *ref_457 DeliveryType: type: string enum: *ref_246 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: *ref_247 required: *ref_248 GcpTrigger: allOf: *ref_250 type: object description: >- A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received. properties: *ref_251 required: *ref_252 SubscriptionMode: type: string enum: *ref_249 description: >- The mode of subscription. 'existing' means using an existing GCP subscription, while 'create_update' involves creating or updating a new subscription. GcpTriggerData: type: object description: Data for creating or updating a Google Cloud Pub/Sub trigger. properties: *ref_244 required: *ref_245 GetAllTopicSubscription: type: object properties: *ref_458 required: *ref_459 DeleteGcpSubscription: type: object properties: *ref_460 required: *ref_461 AzureMode: type: string enum: *ref_255 description: Azure Event Grid trigger mode. AzureArmResource: type: object description: An ARM resource the service principal can see. properties: *ref_259 required: *ref_260 AzureDeleteSubscription: type: object properties: *ref_462 required: *ref_463 AzureTrigger: allOf: *ref_256 type: object description: >- An Azure Event Grid trigger that executes a script or flow when events arrive. properties: *ref_257 required: *ref_258 AzureTriggerData: type: object description: Data for creating or updating an Azure Event Grid trigger. properties: *ref_253 required: *ref_254 TestAzureConnection: type: object properties: *ref_464 required: *ref_465 AzureListTopics: type: object properties: *ref_466 required: *ref_467 AzureListSubscriptions: type: object properties: *ref_468 required: *ref_469 AwsAuthResourceType: type: string enum: *ref_225 SqsTrigger: allOf: *ref_226 type: object properties: *ref_227 required: *ref_228 LoggedWizardStatus: type: string enum: *ref_21 CustomInstanceDbLogs: type: object properties: *ref_470 CustomInstanceDbTag: type: string enum: *ref_22 CustomInstanceDb: type: object required: *ref_23 properties: *ref_24 NewSqsTrigger: type: object properties: *ref_471 required: *ref_472 EditSqsTrigger: type: object properties: *ref_473 required: *ref_474 Slot: type: object properties: *ref_261 SlotList: type: object properties: *ref_475 PublicationData: type: object properties: *ref_265 required: *ref_266 TableToTrack: type: array items: *ref_476 Relations: type: object properties: *ref_262 required: *ref_263 Language: type: string enum: *ref_477 TemplateScript: type: object properties: *ref_478 required: *ref_479 PostgresTrigger: allOf: *ref_267 type: object properties: *ref_268 required: *ref_269 NewPostgresTrigger: type: object properties: *ref_480 required: *ref_481 EditPostgresTrigger: type: object properties: *ref_482 required: *ref_483 KafkaTrigger: allOf: *ref_219 type: object properties: *ref_220 required: *ref_221 NewKafkaTrigger: type: object properties: *ref_484 required: *ref_485 EditKafkaTrigger: type: object properties: *ref_486 required: *ref_487 NatsTrigger: allOf: *ref_222 type: object properties: *ref_223 required: *ref_224 NewNatsTrigger: type: object properties: *ref_488 required: *ref_489 EditNatsTrigger: type: object properties: *ref_490 required: *ref_491 EmailTrigger: allOf: *ref_270 type: object properties: *ref_271 required: *ref_272 NewEmailTrigger: type: object properties: *ref_492 required: *ref_493 EditEmailTrigger: type: object properties: *ref_494 required: *ref_495 Group: type: object properties: *ref_278 required: *ref_279 InstanceGroup: type: object required: *ref_496 properties: *ref_497 InstanceGroupWithWorkspaces: type: object required: *ref_274 properties: *ref_275 WorkspaceInfo: type: object properties: *ref_498 required: *ref_499 Folder: type: object properties: *ref_281 required: *ref_282 FolderDefaultPermissionedAs: description: > Ordered list of rules applied at create-time when admins or `wm_deployers` members deploy items in this folder. The first rule whose `path_glob` matches the item path (relative to the folder root) wins, and its `permissioned_as` is used as the default. type: array items: *ref_280 WorkerPing: type: object properties: *ref_500 required: *ref_501 UserWorkspaceList: type: object properties: *ref_502 required: *ref_503 CreateWorkspace: type: object properties: *ref_504 required: *ref_505 CreateWorkspaceFork: type: object properties: *ref_19 required: *ref_20 Workspace: type: object properties: *ref_15 required: *ref_16 DependencyMap: type: object properties: *ref_506 DependencyDependent: type: object properties: *ref_507 required: *ref_508 DependentsAmount: type: object properties: *ref_509 required: *ref_510 WorkspaceInvite: type: object properties: *ref_41 required: *ref_42 GlobalUserInfo: type: object properties: *ref_39 required: *ref_40 Flow: allOf: *ref_124 ExtraPerms: type: object additionalProperties: *ref_511 FlowMetadata: type: object properties: *ref_512 required: *ref_513 OpenFlowWPath: allOf: *ref_126 FlowPreview: type: object properties: *ref_152 required: *ref_153 RestartedFrom: type: object properties: *ref_151 Policy: type: object properties: *ref_127 ListableApp: type: object properties: *ref_514 required: *ref_515 ScopeDefinition: type: object properties: *ref_516 required: *ref_517 ScopeDomain: type: object properties: *ref_518 required: *ref_519 ListableRawApp: type: object properties: *ref_520 required: *ref_521 AppWithLastVersion: type: object properties: *ref_128 required: *ref_129 AppWithLastVersionWDraft: allOf: *ref_522 AppHistory: type: object properties: *ref_130 required: *ref_131 FlowVersion: type: object properties: *ref_122 required: *ref_123 SlackToken: type: object properties: access_token: type: string team: type: object properties: id: type: string name: type: string required: - id - name required: - access_token TokenResponse: type: object properties: *ref_74 required: *ref_75 HubScriptKind: type: string enum: *ref_93 PolarsClientKwargs: type: object properties: *ref_292 required: *ref_293 LargeFileStorage: type: object properties: *ref_45 DucklakeSettings: type: object required: *ref_54 properties: *ref_55 DataTableSettings: type: object required: *ref_46 properties: *ref_47 DataTableSchema: type: object required: *ref_523 properties: *ref_524 DataTableTables: type: object required: *ref_525 properties: *ref_526 DataTableTableSchema: type: object required: *ref_527 properties: *ref_528 DynamicInputData: type: object properties: *ref_529 required: *ref_530 WindmillLargeFile: type: object properties: *ref_294 required: *ref_295 WindmillFileMetadata: type: object properties: *ref_298 WindmillFilePreview: type: object properties: *ref_296 required: *ref_297 S3Resource: type: object properties: *ref_290 required: *ref_291 WorkspaceGitSyncSettings: type: object properties: *ref_56 WorkspaceDeployUISettings: type: object properties: *ref_49 WorkspaceDefaultScripts: type: object properties: *ref_59 S3PermissionRule: type: object properties: *ref_531 required: *ref_532 GitRepositorySettings: type: object properties: *ref_57 required: *ref_58 MetricMetadata: type: object properties: *ref_533 required: *ref_534 ScalarMetric: type: object properties: *ref_535 required: *ref_536 TimeseriesMetric: type: object properties: *ref_537 required: *ref_538 MetricDataPoint: type: object properties: *ref_539 required: *ref_540 RawScriptForDependencies: type: object properties: *ref_143 required: *ref_144 ConcurrencyGroup: type: object properties: *ref_541 required: *ref_542 ExtendedJobs: type: object properties: *ref_543 required: *ref_544 ExportedUser: type: object properties: *ref_9 required: *ref_10 GlobalSetting: type: object properties: *ref_545 required: *ref_546 InstanceConfig: type: object description: >- Unified instance configuration combining global settings and worker group configs properties: *ref_26 Config: type: object properties: *ref_547 required: *ref_548 ExportedInstanceGroup: type: object properties: *ref_276 required: *ref_277 JobSearchHit: type: object properties: *ref_549 LogSearchHit: type: object properties: *ref_550 AutoscalingEvent: type: object properties: *ref_551 CriticalAlert: type: object properties: *ref_63 CaptureTriggerKind: type: string enum: *ref_283 Capture: type: object properties: *ref_284 required: *ref_285 CaptureConfig: type: object properties: *ref_552 required: *ref_553 OperatorSettings: nullable: true type: object required: *ref_37 properties: *ref_38 WorkspaceComparison: type: object required: *ref_554 properties: *ref_555 WorkspaceItemDiff: type: object required: *ref_556 properties: *ref_557 CompareSummary: type: object required: *ref_558 properties: *ref_559 TeamInfo: type: object required: - team_id - team_name - channels properties: team_id: type: string description: The unique identifier of the Microsoft Teams team example: 19:abc123def456@thread.tacv2 team_name: type: string description: The display name of the Microsoft Teams team example: Engineering Team channels: type: array description: List of channels within the team items: type: object required: &ref_560 - channel_id - channel_name - tenant_id - service_url properties: &ref_561 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_560 properties: *ref_561 GithubInstallations: type: array items: *ref_562 WorkspaceGithubInstallation: type: object properties: account_id: type: string installation_id: type: number required: - account_id - installation_id S3Object: type: object properties: *ref_134 required: *ref_135 TeamsChannel: type: object required: - team_id - team_name - channel_id - channel_name properties: team_id: type: string description: Microsoft Teams team ID minLength: 1 team_name: type: string description: Microsoft Teams team name minLength: 1 channel_id: type: string description: Microsoft Teams channel ID minLength: 1 channel_name: type: string description: Microsoft Teams channel name minLength: 1 AssetUsageKind: type: string enum: *ref_303 AssetUsageAccessType: type: string enum: *ref_302 nullable: true AssetKind: type: string enum: *ref_301 Asset: type: object properties: path: type: string kind: type: string enum: *ref_301 required: - path - kind Volume: type: object required: *ref_563 properties: *ref_564 ProtectionRuleset: type: object description: A workspace protection rule defining restrictions and bypass permissions required: *ref_565 properties: *ref_566 ProtectionRules: type: array description: Configuration of protection restrictions items: *ref_64 ProtectionRuleKind: type: string enum: *ref_567 RuleBypasserGroups: type: array description: Groups that can bypass this ruleset items: *ref_65 RuleBypasserUsers: type: array description: Users that can bypass this ruleset items: *ref_66 DeploymentRequestEligibleDeployer: type: object required: *ref_568 properties: *ref_569 DeploymentRequestAssignee: type: object required: *ref_570 properties: *ref_571 DeploymentRequestComment: type: object required: *ref_69 properties: *ref_70 DeploymentRequest: type: object required: *ref_67 properties: *ref_68 QuotaInfo: type: object properties: *ref_71 required: *ref_72 NativeServiceName: type: string enum: *ref_229 NativeTrigger: type: object description: A native trigger stored in Windmill properties: *ref_572 required: *ref_573 NativeTriggerWithExternal: type: object description: >- Full trigger response containing both Windmill data and external service data properties: *ref_574 required: *ref_575 WorkspaceIntegrations: type: object properties: *ref_576 required: *ref_577 WorkspaceOAuthConfig: type: object properties: *ref_230 required: *ref_231 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_578 - async - sync required: - type - request_type WebhookRequestType: type: string description: The type of webhook request (define possible values here) enum: *ref_578 RedirectUri: type: object properties: *ref_232 required: *ref_233 NativeTriggerData: type: object description: Data for creating or updating a native trigger properties: *ref_234 required: *ref_235 CreateTriggerResponse: type: object description: Response returned when a native trigger is created properties: *ref_579 required: *ref_580 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_581 required: *ref_582 GoogleCalendarEntry: type: object properties: *ref_583 required: *ref_584 GoogleDriveFile: type: object properties: *ref_585 required: *ref_586 GoogleDriveFilesResponse: type: object properties: *ref_587 required: *ref_588 SharedDriveEntry: type: object properties: *ref_589 required: *ref_590 GithubRepoEntry: type: object properties: *ref_591 required: *ref_592 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: *ref_136 required: *ref_137 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: *ref_84 required: *ref_85 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_86 required: *ref_87 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_80 discriminator: *ref_81 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: *ref_323 required: *ref_324 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: *ref_325 required: *ref_326 schemas-PathFlow: type: object description: >- Reference to an existing flow by path. Use this to call another flow as a subflow properties: *ref_327 required: *ref_328 schemas-FlowModule: type: object description: A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_82 required: *ref_83 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: *ref_329 required: *ref_330 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: *ref_331 required: *ref_332 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: *ref_333 required: *ref_334 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: *ref_335 required: *ref_336 schemas-Identity: type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: *ref_337 required: *ref_338 AIProviderKind: type: string description: Supported AI provider types enum: *ref_316 schemas-ProviderConfig: type: object description: >- Complete AI provider configuration with resource reference and model selection properties: *ref_593 required: *ref_594 StaticProviderTransform: type: object description: Static provider configuration passed directly to the AI agent properties: *ref_595 required: *ref_596 ProviderTransform: description: >- Provider configuration - can be static (ProviderConfig), JavaScript expression, or AI-determined oneOf: *ref_341 discriminator: *ref_342 MemoryOff: type: object description: No conversation memory/context properties: *ref_317 required: *ref_318 MemoryAuto: type: object description: Automatic context management properties: *ref_319 required: *ref_320 MemoryMessage: type: object description: A single message in conversation history properties: *ref_597 required: *ref_598 MemoryManual: type: object description: Explicit message history properties: *ref_321 required: *ref_322 schemas-MemoryConfig: description: Conversation memory configuration oneOf: *ref_599 discriminator: *ref_600 StaticMemoryTransform: type: object description: Static memory configuration passed directly to the AI agent properties: *ref_601 required: *ref_602 MemoryTransform: description: >- Memory configuration - can be static (MemoryConfig), JavaScript expression, or AI-determined oneOf: *ref_343 discriminator: *ref_344 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_88 discriminator: *ref_89 FlowModuleTool: description: >- A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module allOf: *ref_603 McpToolValue: type: object description: >- Reference to an external MCP (Model Context Protocol) tool. The AI can call tools from MCP servers properties: *ref_604 required: *ref_605 WebsearchToolValue: type: object description: >- A tool implemented as a websearch tool. The AI can call this like any other websearch tool properties: *ref_606 required: *ref_607 ToolValue: description: >- The implementation of a tool. Can be a flow module (script/flow) or an MCP tool reference oneOf: *ref_608 discriminator: *ref_609 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_345 required: *ref_346 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_339 required: *ref_340 schemas-StopAfterIf: type: object description: Early termination condition for a module properties: *ref_90 required: *ref_91 RetryIf: type: object description: Conditional retry based on error or result properties: *ref_195 required: *ref_196 schemas-Retry: type: object description: Retry configuration for failed module executions properties: *ref_315 schemas-FlowNote: type: object description: A sticky note attached to a flow for documentation and annotation properties: *ref_145 required: *ref_146 FlowGroup: type: object description: >- A semantic group of flow modules for organizational purposes. Does not affect execution — modules remain in their original position in the flow. Groups provide naming and collapsibility in the editor. Members are computed dynamically from all nodes on paths between start_id and end_id. properties: *ref_147 required: *ref_148 schemas-FlowValue: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_610 required: *ref_611 schemas-FlowStatusModule: type: object properties: *ref_154 required: *ref_155