openapi: 3.0.3 info: version: 1.734.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_352 - database - readiness properties: &ref_353 database: type: object description: Database health status required: &ref_354 - healthy - latency_ms - pool properties: &ref_355 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_356 - size - idle - max_connections properties: &ref_357 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_358 - healthy - active_count - worker_groups - min_version - versions properties: &ref_359 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_360 - pending_jobs - running_jobs properties: &ref_361 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_362 - healthy properties: &ref_363 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_84 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_304 type: string format: date-time - name: after description: filter on created after (exclusive) timestamp in: query schema: &ref_305 type: string format: date-time - name: username description: filter on exact username of user in: query schema: &ref_313 type: string - name: operation description: filter on exact or prefix name of operation in: query schema: &ref_314 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_315 type: string - name: action_kind description: filter on type of operation in: query schema: &ref_316 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_403 email: type: string password: type: string required: &ref_404 - 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_read: type: array items: type: string folders_owners: type: array items: type: string added_via: nullable: true allOf: - type: object properties: &ref_400 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_401 - source is_service_account: type: boolean required: &ref_36 - email - username - is_admin - is_super_admin - created_at - operator - disabled - folders - folders_read - 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_405 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_419 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_420 - 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_406 label: type: string scopes: type: array items: type: string expiration: type: string required: &ref_407 - 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_408 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_409 - 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_410 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_411 - 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_412 workspaces: type: array items: type: object properties: &ref_414 workspace_id: type: string username: type: string preview: type: object properties: *ref_12 required: *ref_13 required: &ref_415 - workspace_id - username - preview required: &ref_413 - 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_416 reassignments: type: object additionalProperties: type: object properties: &ref_417 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_418 - 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_563 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_504 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_505 - 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_506 id: type: string name: type: string username: type: string color: type: string required: &ref_507 - 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_472 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 used_by_workspaces: type: array items: type: string description: >- Workspaces that reference this database via a ducklake catalog or datatable database with resource_type 'instance'. Computed at request time, not persisted. /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_546 name: type: string value: {} required: &ref_547 - 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_375 - keys properties: &ref_376 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_373 - workspace_id - path - error properties: &ref_374 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_555 - all_ahead_items_visible - all_behind_items_visible - skipped_comparison - diffs - summary properties: &ref_556 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_557 - kind - path - ahead - behind - has_changes - exists_in_source - exists_in_fork properties: &ref_558 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_559 - 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_560 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_532 pattern: type: string allow: type: string required: &ref_533 - 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_364 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_383 resource_path: type: string models: type: array items: type: string web_search_enabled: type: boolean required: &ref_384 - 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 metadata_model: type: object properties: *ref_43 required: *ref_44 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_365 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_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 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_509 importer_path: type: string importer_kind: type: string enum: - script - flow - app importer_node_ids: type: array items: type: string nullable: true required: &ref_510 - 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_511 imported_path: type: string count: type: integer format: int64 required: &ref_512 - 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_508 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_385 provider: type: string enum: *ref_51 models: type: array items: type: string required: &ref_386 - provider - models default_model: type: object properties: *ref_43 required: *ref_44 metadata_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_367 - type: object description: New grouped format for editing error handler properties: &ref_368 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_369 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_370 - type: object description: New grouped format for editing success handler properties: &ref_371 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_372 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_524 - datatable_name - schemas properties: &ref_525 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_526 - datatable_name - schemas properties: &ref_527 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_528 - datatable_name - schema_name - table_name - columns properties: &ref_529 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_402 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_520 name: type: string description: type: string nullable: true scopes: type: array items: type: object properties: &ref_518 value: type: string label: type: string description: type: string nullable: true requires_resource_path: type: boolean required: &ref_519 - value - label - requires_resource_path required: &ref_521 - 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_421 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_422 label: type: string expiration: type: string format: date-time impersonate_email: type: string workspace_id: type: string required: &ref_423 - 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/update_label/{token_prefix}: post: summary: update label of an existing token (owner only) operationId: updateTokenLabel tags: - user parameters: - name: token_prefix in: path required: true schema: type: string requestBody: description: new label (null or omitted = no label) required: true content: application/json: schema: type: object properties: label: type: string nullable: true responses: '200': description: label 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_108 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_109 - 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_426 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_427 - 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_428 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: &ref_77 type: boolean responses: '200': description: variable content: application/json: schema: allOf: - 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 inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. ws_specific: type: boolean edited_at: type: string format: date-time edited_by: type: string draft_only: description: > True when this row is a per-user draft with no deployed variable at the same path. Frontend renders a "Draft" badge. type: boolean is_draft: description: > True when the authed user has a per-user draft at this path (over a deployed row or a synthesized draft-only row). Frontend appends a `*` to the displayed name. type: boolean required: &ref_62 - workspace_id - path - is_secret - extra_perms - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: &ref_78 is_draft: type: boolean draft_saved_at: type: string format: date-time no_deployed: type: boolean draft: type: object additionalProperties: true other_drafts_users: description: > Other workspace users (and the legacy NULL-email row, if any) with a saved draft at the same path. Populated only on the authed user's "get by path" responses for kinds the editor surfaces a fork banner for (script, flow, app, raw_app). Empty / omitted for kinds without that UI. type: array items: type: object properties: username: type: string nullable: true description: > Workspace username of the draft owner. `null` represents the legacy workspace-level (NULL-email) row. Emails never leave the server. draft_saved_at: type: string format: date-time description: > When this user's draft was last saved (`draft.created_at`), surfaced in the fork modal as "Last updated". required: - draft_saved_at required: &ref_79 - is_draft /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 - name: include_draft_only description: | When true, append per-user draft variables whose path has no deployed variable. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. in: query required: false schema: type: boolean 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_424 name: type: string value: type: string description: type: string is_custom: type: boolean required: &ref_425 - 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_566 - name - rules - bypass_groups - bypass_users properties: &ref_567 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_568 - DisableDirectDeployment - DisableWorkspaceForking - RestrictDeployToDeployers - RestrictAnonymousAppDeployment 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_569 - username - email - is_admin properties: &ref_570 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_571 - username - email properties: &ref_572 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_instance: type: string description: >- Instance name for built-in providers whose client-credentials token URL is instance-templated; substituted into the fixed-host registry template server-side (client_credentials flow only). The token URL is never caller-supplied. cc_token_url: type: string description: >- Bring-your-own token endpoint override (client_credentials flow only). Only honored together with cc_client_id/cc_client_secret and mutually exclusive with cc_instance; ignored/rejected on the shared-instance path. 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 /w/{workspace}/oauth/connect_client_credentials/{client}: post: summary: connect OAuth using client credentials operationId: connectClientCredentials tags: - oauth parameters: - name: workspace in: path required: true schema: *ref_4 - 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. Omit to use the credentials configured on the provider's instance OAuth entry. cc_client_secret: type: string description: >- OAuth client secret. Omit to use the credentials configured on the provider's instance OAuth entry. cc_instance: type: string description: >- Instance name for built-in providers whose client-credentials token URL is instance-templated; substituted into the fixed-host registry template server-side. The token URL is never caller-supplied. cc_token_url: type: string description: >- Bring-your-own token endpoint override. Only honored together with cc_client_id/cc_client_secret and mutually exclusive with cc_instance; rejected on the shared-instance path. 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: object properties: name: type: string supports_client_credentials: type: boolean has_shared_credentials: type: boolean required: - name - supports_client_credentials - has_shared_credentials /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 client_credentials_configured: type: boolean description: >- The instance OAuth entry carries shared client-credentials, so the connect dialog can skip the bring-your-own form and run the exchange server-side /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_433 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_434 - 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_435 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: resource content: application/json: schema: allOf: - type: object properties: &ref_80 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 inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. ws_specific: type: boolean draft_only: description: > True when this row is a per-user draft with no deployed resource at the same path. Frontend renders a "Draft" badge. type: boolean is_draft: description: > True when the authed user has a per-user draft at this path (over a deployed row or a synthesized draft-only row). Frontend appends a `*` to the displayed name. type: boolean required: &ref_81 - path - resource_type - is_oauth - is_linked - is_refreshed - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only description: | When true, append per-user draft resources whose path has no deployed resource. Synthesized rows carry `draft_only: true`. in: query required: false schema: type: boolean responses: '200': description: resource list content: application/json: schema: type: array items: type: object properties: *ref_80 required: *ref_81 /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_278 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_82 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_83 - 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_436 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_82 required: *ref_83 /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_82 required: *ref_83 /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_84 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_124 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_611 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_87 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_93 - 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_328 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_85 - type: object description: >- Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource' properties: &ref_140 value: description: >- The static value. For resources, use format '$res:path/to/resource' type: type: string enum: - static required: &ref_141 - 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_89 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_90 - 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_91 type: type: string enum: - ai required: &ref_92 - type discriminator: &ref_86 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_329 - 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_330 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_85 discriminator: *ref_86 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_331 - 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_332 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_85 discriminator: *ref_86 path: type: string description: >- Path to the flow in the workspace (e.g., 'f/flows/process_user') type: type: string enum: - flow required: &ref_333 - 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_334 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_87 required: &ref_88 - 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 squash: type: boolean required: &ref_335 - 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_336 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_87 required: *ref_88 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_85 discriminator: *ref_86 squash: type: boolean required: &ref_337 - 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_338 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_87 required: *ref_88 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_87 required: *ref_88 type: type: string enum: - branchone required: &ref_339 - 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_340 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_87 required: *ref_88 required: - modules type: type: string enum: - branchall parallel: type: boolean description: >- If true, all branches execute concurrently. If false, they execute sequentially required: &ref_341 - branches - type - type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: &ref_342 type: type: string enum: - identity flow: type: boolean description: >- If true, marks this as a flow identity (special handling) required: &ref_343 - 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_344 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_346 - type: object description: >- Static provider configuration passed directly to the AI agent properties: &ref_596 value: type: object description: >- Complete AI provider configuration with resource reference and model selection properties: &ref_594 kind: type: string description: Supported AI provider types enum: &ref_321 - 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_595 - kind - resource - model type: type: string enum: - static required: &ref_597 - 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_89 required: *ref_90 - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: *ref_91 required: *ref_92 discriminator: &ref_347 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_348 - type: object description: >- Static memory configuration passed directly to the AI agent properties: &ref_602 value: description: Conversation memory configuration oneOf: &ref_600 - type: object description: No conversation memory/context properties: &ref_322 kind: type: string enum: - 'off' required: &ref_323 - kind - type: object description: Automatic context management properties: &ref_324 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_325 - kind - type: object description: Explicit message history properties: &ref_326 kind: type: string enum: - manual messages: type: array items: type: object description: A single message in conversation history properties: &ref_598 role: type: string enum: - user - assistant - system content: type: string required: &ref_599 - role - content required: &ref_327 - kind - messages discriminator: &ref_601 propertyName: kind mapping: 'off': '#/components/schemas/MemoryOff' auto: '#/components/schemas/MemoryAuto' manual: '#/components/schemas/MemoryManual' type: type: string enum: - static required: &ref_603 - 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_89 required: *ref_90 - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: *ref_91 required: *ref_92 discriminator: &ref_349 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_350 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_609 - description: >- A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module allOf: &ref_604 - 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_93 discriminator: &ref_94 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_605 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_606 - 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_607 tool_type: type: string enum: - websearch required: &ref_608 - tool_type discriminator: &ref_610 propertyName: tool_type mapping: flowmodule: '#/components/schemas/FlowModuleTool' mcp: '#/components/schemas/McpToolValue' websearch: '#/components/schemas/WebsearchToolValue' required: &ref_351 - id - value type: type: string enum: - aiagent tag: type: string description: >- Worker group tag for execution routing. If not set, the AI agent step runs on the flow's tag (default `flow`) 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_345 - tools - type - input_transforms discriminator: *ref_94 stop_after_if: description: Early termination condition for a module type: object properties: &ref_95 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. error_include_result: type: boolean description: >- When stopping with an error (error_message set), embed the stopping step's own result inside the raised error object (as error.result) instead of discarding it. The top-level result stays { error }. Defaults to false. required: &ref_96 - expr stop_after_all_iters_if: description: Early termination condition for a module type: object properties: *ref_95 required: *ref_96 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_320 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_199 expr: type: string description: >- JavaScript expression that returns true to retry. Has access to 'result' and 'error' variables required: &ref_200 - 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_88 failure_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_87 required: *ref_88 preprocessor_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_87 required: *ref_88 same_worker: type: boolean description: >- If true, all steps run on the same worker for better performance preserve_step_tags: type: boolean description: >- If true and the flow runs on a custom worker tag, steps that declare their own non-empty tag run on it instead of inheriting the flow tag. Steps without their own tag still inherit the flow tag. 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_149 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_150 - 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_151 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_152 - start_id - end_id required: &ref_612 - 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_125 - 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_84 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_84 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_137 type: string responses: '200': description: app details content: application/json: schema: allOf: - type: object properties: &ref_132 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_131 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_133 - 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_97 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_97 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_97 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_98 - 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_98 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_122 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_123 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: allOf: - type: object properties: &ref_105 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_99 - 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 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_101 content: type: string description: The source code content of this module language: type: string enum: *ref_99 lock: type: string nullable: true description: >- Lock file content for this module's dependencies required: &ref_102 - content - language labels: type: array items: type: string default: [] inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. required: &ref_106 - hash - path - summary - description - content - created_by - created_at - archived - deleted - is_template - extra_perms - language - kind - starred - has_preprocessor - type: object properties: is_draft: type: boolean description: | True when the authed user has a draft for this script — either no deployed row exists at this path (draft-only) or the user saved a per-user draft on top of the deployed row. draft_path: type: string description: | User-typed path the editor has staged but not yet deployed. Surfaced for draft-only rows so the home list can render the meaningful name instead of the autogenerated `u/{user}/draft_{uuid}` URL path. Omitted when unchanged. draft_users: description: | Workspace users (including the authed user, and the legacy NULL-email row if any) who have a per-user draft at this path. Drives the home page's user-avatar circles inside the Draft badge. Omitted when no drafts exist. type: array items: type: object properties: username: type: string nullable: true /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/list: get: summary: >- list every draft the current user has in this workspace, across all kinds operationId: listDrafts tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 - name: all_users in: query description: >- List every draft in the workspace (all users), not just the current user's own + legacy rows. Other users' rows come back with `mine=false` (view-only). schema: type: boolean responses: '200': description: the user's drafts content: application/json: schema: type: array items: type: object properties: kind: type: string description: > Closed set of item kinds a user can autosave as a draft. Mirrors the Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`. enum: &ref_100 - script - flow - app - raw_app - resource - variable - trigger_schedule - trigger_webhook - trigger_default_email - trigger_email - trigger_http - trigger_websocket - trigger_postgres - trigger_kafka - trigger_nats - trigger_mqtt - trigger_sqs - trigger_gcp - trigger_azure - trigger_poll - trigger_cli - trigger_nextcloud - trigger_google - trigger_github - data_pipeline path: type: string summary: type: string description: >- Best-effort, read from the draft JSON's `summary` field when the editor shape carries one. draft_path: type: string description: >- User-typed friendly path from the draft JSON's `draft_path`, when set and different from the storage path (e.g. a never-deployed item parked at `u/{user}/draft_{uuid}`). draft_only: type: boolean description: >- No deployed counterpart exists at this path — the draft is the whole item. legacy_draft: type: boolean description: >- The listed draft is a legacy workspace-level row (email NULL) predating the per-user drafts migration. Only true when no per-user draft exists at this path. created_at: type: string format: date-time can_write: type: boolean description: >- Whether the current user may deploy/discard this draft (same check the deploy/discard endpoints enforce). mine: type: boolean description: >- The row belongs to the current user (own draft or the legacy no-owner row) and is therefore actionable. Always true in the default listing; with `all_users=true`, other users' rows are false (view-only). draft_users: description: > Draft authors at this (path, kind) — the legacy NULL-email row surfaced as a null username. Populated only for the shared full-page-editor kinds (script/flow/app/raw_app); omitted for drawer kinds, which keep their drafts private. Feeds the Draft badge's owner-avatar circles. type: array items: type: object properties: username: type: string nullable: true required: - kind - path - draft_only - legacy_draft - created_at - can_write - mine /w/{workspace}/drafts/get/{kind}/{path}: get: summary: >- fetch a single draft's content by workspace username (or the legacy workspace-level row) operationId: getDraftForUser tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: path required: true schema: type: string description: > Closed set of item kinds a user can autosave as a draft. Mirrors the Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`. enum: *ref_100 - name: path in: path required: true schema: *ref_97 - name: username in: query required: false description: >- Workspace username of the draft owner. Omit to fetch the legacy workspace-level (NULL email) row. schema: type: string responses: '200': description: draft content content: application/json: schema: type: object properties: value: {} created_at: type: string format: date-time required: - value - created_at '404': description: no draft for that owner at that path /w/{workspace}/drafts/get_own/{kind}/{path}: get: summary: fetch the current user's own draft content at a path (any kind) operationId: getOwnDraft tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: path required: true schema: type: string description: > Closed set of item kinds a user can autosave as a draft. Mirrors the Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`. enum: *ref_100 - name: path in: path required: true schema: *ref_97 responses: '200': description: the user's draft content, or null when none exists content: application/json: schema: nullable: true type: object properties: value: {} created_at: type: string format: date-time required: - value - created_at /w/{workspace}/drafts/update/{kind}/{path}: post: summary: upsert (or clear) the current user's draft at a path operationId: updateDraft tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: path required: true schema: type: string description: > Closed set of item kinds a user can autosave as a draft. Mirrors the Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`. enum: *ref_100 - name: path in: path required: true schema: *ref_97 requestBody: required: true content: application/json: schema: type: object properties: value: nullable: true description: >- Draft content to save. `null` (or omitted) signals a delete — the row is removed under the same conflict rules. last_sync: type: string format: date-time description: >- Server timestamp of the client's last known sync for this draft. Omit on first save. force: type: boolean description: Skip the conflict check and overwrite the server copy. legacy: type: boolean description: >- Delete-only. Target the legacy workspace-level row (email NULL) instead of the current user's row. Used to discard a legacy draft from the review page. created_at: type: string format: date-time description: >- Upsert-only override for the stored creation timestamp. Normal saves omit it (stamped server-side); the localStorage→DB migration passes the draft's original write time so migrated drafts keep their age. responses: '200': description: save result content: application/json: schema: type: object properties: status: type: string enum: - saved - conflict current_timestamp: type: string format: date-time required: - status - current_timestamp /w/{workspace}/drafts/migrate_legacy/{kind}/{path}: post: summary: resolve a legacy (workspace-level) draft (admin only) description: >- Delete a legacy draft (email NULL) or assign it to the authed admin as a per-user draft. Workspace admins / superadmins only. operationId: migrateLegacyDraft tags: - draft parameters: - name: workspace in: path required: true schema: *ref_4 - name: kind in: path required: true schema: type: string description: > Closed set of item kinds a user can autosave as a draft. Mirrors the Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`. enum: *ref_100 - name: path in: path required: true schema: *ref_97 requestBody: required: true content: application/json: schema: type: object properties: action: type: string enum: - delete - assign_to_self description: delete the legacy draft, or take ownership of it. required: - action responses: '200': description: migration result 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 NEW script, specify the path (e.g., 'f/my_folder/my_script'), the content (source code), and the language, and leave parent_hash unset. For TypeScript, use 'bun' unless deno-specific APIs are needed. To UPDATE an existing script, do NOT delete and recreate it: call this tool with the same path and set parent_hash to the script's current hash, which you can read from the `hash` field returned by getScriptByPath. This creates a new version while preserving the script's history. x-mcp-tool-include-fields: - path - parent_hash - 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_392 path: type: string parent_hash: type: string auto_parent: type: boolean description: >- When true, the backend resolves the parent to the current deployed head for this path within the transaction (ignoring parent_hash), instead of failing with a "lineage must be linear" error when the supplied parent_hash is stale. summary: type: string description: type: string content: type: string schema: type: object is_template: type: boolean lock: type: string language: type: string enum: *ref_99 kind: type: string enum: - script - failure - trigger - command - approval - preprocessor tag: type: string 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_306 - 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_101 required: *ref_102 labels: type: array items: type: string skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this script does not delete an existing user draft at the same path. required: &ref_393 - 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_97 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_390 workspace_id: type: string language: type: string enum: *ref_99 name: type: string description: type: string content: type: string required: &ref_391 - 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_99 - 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_99 - 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_103 id: type: integer archived: type: boolean name: type: string description: type: string content: type: string language: type: string enum: *ref_99 workspace_id: type: string created_at: type: string format: date-time required: &ref_104 - 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_99 - name: name in: query required: false schema: type: string responses: '200': description: Latest workspace dependencies content: application/json: schema: type: object properties: *ref_103 required: *ref_104 /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_97 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_107 type: string responses: '200': description: script details content: application/json: schema: type: object properties: *ref_105 required: *ref_106 /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_107 responses: '200': description: script details content: application/json: schema: type: object properties: *ref_105 required: *ref_106 /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_97 - 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_97 - name: with_starred_info in: query schema: type: boolean - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: script details content: application/json: schema: allOf: - type: object properties: *ref_105 required: *ref_106 - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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_97 responses: '200': description: triggers count content: application/json: schema: type: object properties: &ref_129 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_97 responses: '200': description: tokens list content: application/json: schema: type: array items: type: object properties: *ref_108 required: *ref_109 /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_97 responses: '200': description: script history content: application/json: schema: type: array items: type: object properties: &ref_110 script_hash: type: string deployment_msg: type: string required: &ref_111 - 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_97 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_97 tags: - script responses: '200': description: Script version/hash content: application/json: schema: type: object properties: *ref_110 required: *ref_111 /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_107 - name: path in: path required: true schema: *ref_97 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_97 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_310 type: string - name: path in: path required: true schema: *ref_97 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_97 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_107 - 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_105 required: *ref_106 /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_97 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_107 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_112 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_113 - 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_112 required: *ref_113 /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_99 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_97 - 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_114 type: string format: uuid - name: tag description: Override the tag to use in: query schema: &ref_115 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_116 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_117 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_97 - name: parent_job description: >- The parent job that is at the origin and responsible for the execution of this script if any in: query schema: *ref_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 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_119 type: string - name: skip_preprocessor description: skip the preprocessor in: query schema: &ref_120 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_97 - name: parent_job description: >- The parent job that is at the origin and responsible for the execution of this script if any in: query schema: *ref_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 - 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_119 - 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_121 type: string - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 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_97 - 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_118 - 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_119 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_118 - 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_119 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_118 - 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_119 - 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_121 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_97 - 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_118 - 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_119 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_97 - 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_118 - 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_119 - 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_121 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_118 - 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_119 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_118 - 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_119 - 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_121 - 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_117 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_97 - name: parent_job description: >- The parent job that is at the origin and responsible for the execution of this script if any in: query schema: *ref_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 - 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_119 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_97 - name: parent_job description: >- The parent job that is at the origin and responsible for the execution of this script if any in: query schema: *ref_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 - 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_119 - 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_121 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 - 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_119 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 - 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_119 - 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_121 - name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 - 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}/jobs/job_view_token/{id}: get: summary: mint a read-only share token for a job description: > Returns a stateless `{job_id}.{hmac}` token that grants an authenticated workspace member read access to this job (and its flow subtree) via a `view_token` query param or `X-View-Token` header. Only callable by a user who can already read the job. operationId: getJobViewToken tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: type: string format: uuid responses: '200': description: the share read token content: text/plain: schema: type: string /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_122 - 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_123 - 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_128 - type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: *ref_124 required: *ref_125 - type: object properties: &ref_514 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_513 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: [] inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. required: &ref_515 - path - edited_by - edited_at - archived - extra_perms - type: object properties: lock_error_logs: type: string version_id: type: number - type: object properties: draft_only: type: boolean is_draft: type: boolean description: | True when the authed user has a draft for this flow — either no deployed row exists at this path (draft-only) or the user saved a per-user draft on top of the deployed row. draft_path: type: string description: | User-typed path the editor has staged but not yet deployed. Sourced from the draft JSON's `draft_path` field (the editor only writes it when the typed path differs from the deployed one). Lets the home list render the meaningful name instead of the autogenerated `u/{user}/draft_{uuid}` URL path. Omitted when unchanged. draft_users: description: | Workspace users (including the authed user, and the legacy NULL-email row if any) who have a per-user draft at this path. Drives the home page's user-avatar circles inside the Draft badge. Omitted when no drafts exist. type: array items: type: object properties: username: type: string nullable: true /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_97 tags: - flow responses: '200': description: Flow history content: application/json: schema: type: array items: type: object properties: &ref_126 id: type: integer created_at: type: string format: date-time deployment_msg: type: string required: &ref_127 - 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_97 tags: - flow responses: '200': description: Flow version content: application/json: schema: type: object properties: *ref_126 required: *ref_127 /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_136 type: string enum: - script - flow - name: path in: path required: true schema: *ref_97 - 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_128 /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_97 - name: with_starred_info in: query schema: type: boolean - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: flow details content: application/json: schema: allOf: - allOf: *ref_128 - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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_97 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_97 responses: '200': description: triggers count content: application/json: schema: type: object properties: *ref_129 /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_97 responses: '200': description: tokens list content: application/json: schema: type: array items: type: object properties: *ref_108 required: *ref_109 /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_97 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/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_97 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_130 - type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: *ref_124 required: *ref_125 - 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: deployment_message: type: string skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this flow does not delete an existing user draft at the same path. 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_97 requestBody: description: Partially filled flow required: true content: application/json: schema: allOf: - allOf: *ref_130 - type: object properties: deployment_message: type: string skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this flow does not delete an existing user draft at the same path. 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_97 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_97 - 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_377 - id - workspace_id - flow_path - created_at - updated_at - created_by properties: &ref_378 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_379 - id - conversation_id - message_type - content - created_at - created_seq properties: &ref_380 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_122 - 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_123 - 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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: &ref_212 type: boolean responses: '200': description: All raw apps content: application/json: schema: type: array items: type: object properties: &ref_522 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: [] inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. required: &ref_523 - 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}/ai_skills/list: get: summary: list the workspace AI chat skills (name + description only) operationId: listAiSkills tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: skill listing content: application/json: schema: type: array items: type: object required: - name - description properties: name: type: string description: type: string /w/{workspace}/ai_skills/get/{name}: get: summary: get a workspace AI chat skill including its instructions operationId: getAiSkill tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: type: string responses: '200': description: skill content: application/json: schema: type: object required: - name - description - instructions properties: name: type: string description: type: string instructions: type: string /w/{workspace}/ai_skills/upload: post: summary: upsert workspace AI chat skills (admin only) operationId: uploadAiSkills tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 requestBody: required: true content: application/json: schema: type: object required: - skills properties: skills: type: array maxItems: 50 items: type: object required: - name - description - instructions properties: name: type: string minLength: 1 maxLength: 64 pattern: ^[a-z0-9-]+$ description: type: string minLength: 1 maxLength: 1024 instructions: type: string minLength: 1 maxLength: 65536 responses: '200': description: uploaded content: text/plain: schema: type: string /w/{workspace}/ai_skills/delete/{name}: delete: summary: delete a workspace AI chat skill (admin only) operationId: deleteAiSkill tags: - workspace parameters: - name: workspace in: path required: true schema: *ref_4 - name: name in: path required: true schema: type: string responses: '200': description: deleted 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_122 - 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_123 - 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_516 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: [] is_draft: type: boolean description: > True when the authed user has a draft for this app — either no deployed row exists at this path (draft-only) or the user has saved a per-user draft on top of the deployed row. draft_path: type: string description: > User-typed path the editor has staged but not yet deployed. Sourced from the draft JSON's `draft_path` field (the editor only writes it when the typed path differs from the deployed one). Lets the home list render the meaningful name instead of the autogenerated `u/{user}/draft_{uuid}` URL path. Omitted when unchanged. draft_users: description: > Workspace users (including the authed user, and the legacy NULL-email row if any) who have a per-user draft at this path. Drives the home page's user-avatar circles inside the Draft badge. Omitted when no drafts exist. type: array items: type: object properties: username: type: string nullable: true inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. required: &ref_517 - 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_131 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 skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this app does not delete an existing user draft at the same path. 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_131 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 skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this app does not delete an existing user draft at the same path. 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_97 - name: with_starred_info in: query schema: type: boolean - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 - name: raw_app in: query description: | When no deployed app exists at this path and `get_draft` is set, disambiguates which draft kind (`raw_app` or `app`) to look up. Ignored when a deployed row exists. schema: type: boolean responses: '200': description: app details content: application/json: schema: allOf: - type: object properties: *ref_132 required: *ref_133 - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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_97 responses: '200': description: app lite details content: application/json: schema: type: object properties: *ref_132 required: *ref_133 /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_97 responses: '200': description: app history content: application/json: schema: type: array items: type: object properties: &ref_134 version: type: integer deployment_msg: type: string required: &ref_135 - 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_97 tags: - app responses: '200': description: App version content: application/json: schema: type: object properties: *ref_134 required: *ref_135 /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_136 - name: path in: path required: true schema: *ref_97 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_84 - name: version in: path required: true schema: &ref_311 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_132 required: *ref_133 /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_84 responses: '200': description: app details content: application/json: schema: type: object properties: *ref_132 required: *ref_133 /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_97 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_131 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 skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this app does not delete an existing user draft at the same path. 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_97 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_131 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 skip_draft_deletion: type: boolean description: >- When true (set by the CLI / git sync), deploying this app does not delete an existing user draft at the same path. 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_137 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_138 s3: type: string filename: type: string storage: type: string presigned: type: string required: &ref_139 - s3 required: - s3_objects responses: '200': description: signed s3 objects content: application/json: schema: type: array items: type: object properties: *ref_138 required: *ref_139 /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_97 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_97 - 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_120 - 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_114 - name: tag description: Override the tag to use 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_117 - 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_118 - 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_120 - 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_114 - name: tag description: Override the tag to use 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_117 - 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_118 - 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_142 - type: object description: >- Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource' properties: *ref_140 required: *ref_141 - 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_89 required: *ref_90 - type: object description: >- Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter. properties: *ref_91 required: *ref_92 discriminator: &ref_143 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_142 discriminator: *ref_143 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_176 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_114 - name: tag description: Override the tag to use 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_117 - 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_118 - 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_107 - 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_120 - 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_114 - name: tag description: Override the tag to use in: query schema: *ref_115 - 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_116 - 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_117 - 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_118 - 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_118 - 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_117 requestBody: description: preview required: true content: application/json: schema: type: object properties: &ref_145 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_99 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_101 required: *ref_102 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_146 - 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_429 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_99 required: &ref_430 - 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_97 requestBody: description: script args required: true content: application/json: schema: type: object properties: &ref_144 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_107 requestBody: description: script args required: true content: application/json: schema: type: object properties: *ref_144 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_145 required: *ref_146 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_431 args: type: object description: The arguments to pass to the script or flow additionalProperties: true required: &ref_432 - 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_147 raw_code: type: string path: type: string language: type: string enum: *ref_99 required: &ref_148 - 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_147 required: *ref_148 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_153 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_87 required: *ref_88 failure_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_87 required: *ref_88 preprocessor_module: description: >- A single step in a flow. Can be a script, subflow, loop, or branch type: object properties: *ref_87 required: *ref_88 same_worker: type: boolean description: >- If true, all steps run on the same worker for better performance preserve_step_tags: type: boolean description: >- If true and the flow runs on a custom worker tag, steps that declare their own non-empty tag run on it instead of inheriting the flow tag. Steps without their own tag still inherit the flow tag. 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_149 required: *ref_150 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_151 required: *ref_152 required: &ref_154 - 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_118 - 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_117 - 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_156 value: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_153 required: *ref_154 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_155 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_155 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_157 - 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_156 required: *ref_157 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_530 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_204 - 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_99 required: - source - code required: &ref_531 - 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_122 - 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_123 - 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_114 - 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_160 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_161 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_162 type: string - name: schedule_path description: mask to filter by schedule path in: query schema: &ref_163 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_312 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_192 type: string - name: script_hash description: mask to filter exact matching path in: query schema: &ref_164 type: string - name: started_before description: filter on started before (inclusive) timestamp in: query schema: &ref_165 type: string format: date-time - name: started_after description: filter on started after (exclusive) timestamp in: query schema: &ref_166 type: string format: date-time - name: success description: filter on successful jobs in: query schema: &ref_174 type: boolean - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: &ref_168 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_169 type: string - name: suspended description: filter on suspended jobs in: query schema: &ref_170 type: boolean - name: running description: filter on running jobs in: query schema: &ref_167 type: boolean - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: &ref_171 type: string - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: &ref_173 type: string - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: &ref_175 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_172 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_195 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_179 step: type: integer modules: type: array items: type: object properties: &ref_158 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_159 - type user_states: additionalProperties: true preprocessor_module: allOf: - type: object properties: *ref_158 required: *ref_159 failure_module: allOf: - type: object properties: *ref_158 required: *ref_159 - 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_180 - step - modules - failure_module workflow_as_code_status: type: object properties: &ref_181 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_153 required: *ref_154 is_flow_step: type: boolean language: type: string enum: *ref_99 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_196 - 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_123 - 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_178 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_160 - 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_114 - 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_161 - 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_162 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_163 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_164 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_165 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_166 - name: created_before description: filter on created before (inclusive) timestamp in: query schema: &ref_186 type: string format: date-time - name: created_after description: filter on created after (exclusive) timestamp in: query schema: &ref_187 type: string format: date-time - name: completed_before description: filter on started before (inclusive) timestamp in: query schema: &ref_188 type: string format: date-time - name: completed_after description: filter on started after (exclusive) timestamp in: query schema: &ref_189 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_190 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_191 type: string format: date-time - name: running description: filter on running jobs in: query schema: *ref_167 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_168 - 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_169 - name: suspended description: filter on suspended jobs in: query schema: *ref_170 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) 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_172 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_173 - 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: status description: >- filter on the exact completed job status. Unlike `success=true` (which also matches `skipped`), `status=success` matches only `success`. in: query schema: type: string enum: - success - failure - canceled - skipped - 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_122 - 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_123 - 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_114 - 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_161 - 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_162 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_163 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_164 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_165 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_166 - name: success description: filter on successful jobs in: query schema: *ref_174 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_168 - 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_169 - name: suspended description: filter on suspended jobs in: query schema: *ref_170 - name: running description: filter on running jobs in: query schema: *ref_167 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_171 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_173 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_175 - 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_172 - 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_176 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_177 - webhook - default_email - email - schedule - http - websocket - postgres - kafka - nats - mqtt - sqs - gcp - azure - google - github - asset - 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_177 - 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_122 - 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_123 - 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_178 - 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_160 - 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_114 - 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_161 - 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_162 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_163 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_164 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_165 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_166 - name: success description: filter on successful jobs in: query schema: *ref_174 - name: status description: >- filter on the exact completed job status. Unlike `success=true` (which also matches `skipped`), `status=success` matches only `success`. in: query schema: type: string enum: - success - failure - canceled - skipped - 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_169 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_171 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_173 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_175 - 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_172 - 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_193 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_179 required: *ref_180 workflow_as_code_status: type: object properties: *ref_181 raw_flow: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_153 required: *ref_154 is_flow_step: type: boolean language: type: string enum: *ref_99 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_194 - 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_182 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_99 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_183 - 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_182 required: *ref_183 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_184 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_99 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_185 - 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_184 required: *ref_185 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_123 - 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_178 - 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_160 - 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_114 - 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_161 - 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_162 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_163 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_164 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_165 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_166 - name: created_before description: filter on created before (inclusive) timestamp in: query schema: *ref_186 - name: created_after description: filter on created after (exclusive) timestamp in: query schema: *ref_187 - name: completed_before description: filter on started before (inclusive) timestamp in: query schema: *ref_188 - name: completed_after description: filter on started after (exclusive) timestamp in: query schema: *ref_189 - name: created_before_queue description: filter on jobs created before X for jobs in the queue only in: query schema: *ref_190 - name: created_after_queue description: filter on jobs created after X for jobs in the queue only in: query schema: *ref_191 - name: running description: filter on running jobs in: query schema: *ref_167 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_168 - 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_169 - name: suspended description: filter on suspended jobs in: query schema: *ref_170 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) 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_172 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_173 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_175 - 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_192 - 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: status description: >- filter on the exact completed job status. Unlike `success=true` (which also matches `skipped`), `status=success` matches only `success`. in: query schema: type: string enum: - success - failure - canceled - skipped - 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_197 - allOf: - type: object properties: *ref_193 required: *ref_194 - type: object properties: type: type: string enum: - CompletedJob - allOf: - type: object properties: *ref_195 required: *ref_196 - type: object properties: type: type: string enum: - QueuedJob discriminator: &ref_198 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_176 - 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_197 discriminator: *ref_198 /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_176 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_176 - 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_176 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_176 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_176 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_176 - 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_179 required: *ref_180 workflow_as_code_status: type: object properties: *ref_181 /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_176 - 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_176 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_176 responses: '200': description: job details content: application/json: schema: type: object properties: *ref_193 required: *ref_194 /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_176 - 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_176 - name: get_started in: query schema: &ref_318 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_176 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_u/dispatch_events/{id}: get: summary: list asset-trigger dispatch events for a producer job description: > Returns the chronological log of decisions the asset-trigger dispatcher made after this producer job completed. Each row is one (subscriber, asset write) decision: `dispatched` (with `child_job_id`), `join_pending` (with `received_inputs` / `required_inputs` / `partition`), or `skipped` (with `reason`). Rows are reaped automatically when the producer's `v2_job` row is deleted by the retention sweep. operationId: listDispatchEvents tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: id in: path required: true schema: *ref_176 responses: '200': description: dispatch events for this producer job content: application/json: schema: type: array items: type: object properties: subscriber_path: type: string asset_kind: type: string enum: - s3object - resource - variable - ducklake - datatable - volume asset_path: type: string outcome: type: string enum: - dispatched - join_pending - skipped child_job_id: type: string format: uuid partition: type: string received_inputs: type: integer required_inputs: type: integer debounce_s: type: integer reason: type: string created_at: type: string format: date-time required: - subscriber_path - asset_kind - asset_path - outcome - created_at /w/{workspace}/jobs/asset_dispatch_edges: get: summary: list asset-cascade producer→child job edges for a folder description: > Returns the `dispatched` asset-trigger edges (producer job → child job) whose subscriber lives under `path_start`. Lets a pipeline view reconstruct the cascade tree of a folder by job id and group connected runs. Visibility follows the producer job's RLS. operationId: listAssetDispatchEdges tags: - job parameters: - name: workspace in: path required: true schema: *ref_4 - name: path_start in: query required: true description: Folder path prefix the children live under, e.g. `f/orders/`. schema: type: string - name: created_after in: query required: false description: Only edges dispatched at/after this instant. schema: type: string format: date-time responses: '200': description: asset-cascade edges for the folder content: application/json: schema: type: array items: type: object properties: producer_job_id: type: string format: uuid child_job_id: type: string format: uuid description: Set for `dispatched`; absent for `join_pending` inputs. subscriber_path: type: string outcome: type: string enum: - dispatched - join_pending asset_kind: type: string enum: - s3object - resource - variable - ducklake - datatable - volume asset_path: type: string created_at: type: string format: date-time required: - producer_job_id - subscriber_path - outcome - asset_kind - asset_path - 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_176 responses: '200': description: job details content: application/json: schema: type: object properties: *ref_193 required: *ref_194 /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_176 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_176 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_176 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_176 - 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_176 - 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_176 - 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_176 - 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 view_token: type: string description: >- Share-read-link token for the flow. An authenticated workspace member can append it as a `view_token` query param on the run page to read a flow they don't otherwise have access to. /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_176 - 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_121 - 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_176 - 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_176 - 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_176 - 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_176 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_176 - 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_176 - 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_176 - 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_197 discriminator: *ref_198 approvers: type: array items: type: object properties: resume_id: type: integer approver: type: string required: - resume_id - approver view_token: type: string description: >- Share-read-link token for the parent flow. An authenticated workspace member can append it as a `view_token` query param on the run page to read a flow they don't otherwise have access to. 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_438 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_201 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_199 required: *ref_200 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_439 - 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_440 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_201 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_441 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: schedule deleted content: application/json: schema: allOf: - type: object properties: &ref_202 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_201 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: [] draft_only: description: > True when this row is a per-user draft with no deployed schedule at the same path. Frontend renders a "Draft" badge. type: boolean is_draft: description: > True when the authed user has a per-user draft at this path (over a deployed row or a synthesized draft-only row). Frontend appends a `*` to the displayed name. type: boolean inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. required: &ref_203 - path - edited_by - edited_at - schedule - script_path - timezone - extra_perms - is_flow - enabled - email - permissioned_as - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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_171 - 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 - name: include_draft_only description: | When true, append per-user draft schedules whose path has no deployed schedule. Synthesized rows carry `draft_only: true`. in: query required: false schema: type: boolean responses: '200': description: schedule list content: application/json: schema: type: array items: type: object properties: *ref_202 required: *ref_203 /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_437 - type: object properties: *ref_202 required: *ref_203 - 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_205 info: type: object properties: &ref_447 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_448 - title - version url: type: string openapi_spec_format: type: string enum: &ref_442 - yaml - json http_route_filters: type: array items: type: object properties: &ref_443 folder_regex: type: string path_regex: type: string route_path_regex: type: string required: &ref_444 - folder_regex - path_regex - route_path_regex webhook_filters: type: array items: type: object properties: &ref_445 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_204 required: &ref_446 - 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_205 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_206 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_208 - 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_209 - 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_210 - 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_211 - 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_201 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_207 - 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_206 required: *ref_207 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_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 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_208 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_209 authentication_method: description: >- How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature' type: string enum: *ref_210 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_201 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 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: http trigger deleted content: application/json: schema: allOf: - allOf: &ref_213 - type: object properties: &ref_219 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_211 labels: type: array items: type: string default: [] draft_only: description: > True when this row is a per-user draft with no deployed trigger at the same path. Set by list endpoints when `include_draft_only=true` synthesizes the row from the draft. Frontend renders a "Draft" badge. type: boolean is_draft: description: > True when the authed user has a per-user draft at this path (over a deployed row or a synthesized draft-only row). Frontend appends a `*` to the displayed name. type: boolean required: &ref_220 - path - script_path - permissioned_as - extra_perms - workspace_id - edited_by - edited_at - is_flow - mode type: object properties: &ref_214 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_208 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_209 authentication_method: description: >- How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature' type: string enum: *ref_210 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_201 required: &ref_215 - route_path - request_type - authentication_method - http_method - is_static_website - workspaced_route - wrap_body - raw_string - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: http trigger list content: application/json: schema: type: array items: allOf: *ref_213 type: object properties: *ref_214 required: *ref_215 /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_208 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_211 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_451 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_211 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_216 - 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_217 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_218 - 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_201 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: '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_453 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_216 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_217 required: *ref_218 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_201 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_454 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: websocket trigger deleted content: application/json: schema: allOf: - allOf: &ref_221 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_222 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_216 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_217 required: *ref_218 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_201 required: &ref_223 - url - filters - can_return_message - can_return_error_result - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: websocket trigger list content: application/json: schema: type: array items: allOf: *ref_221 type: object properties: *ref_222 required: *ref_223 /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_211 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_486 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_211 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_201 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 - 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_488 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_201 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 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: kafka trigger deleted content: application/json: schema: allOf: - allOf: &ref_224 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_225 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_201 required: &ref_226 - kafka_resource_path - group_id - topics - filters - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: kafka trigger list content: application/json: schema: type: array items: allOf: *ref_224 type: object properties: *ref_225 required: *ref_226 /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_211 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_490 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_211 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_201 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 - 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_492 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_201 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 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: nats trigger deleted content: application/json: schema: allOf: - allOf: &ref_227 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_228 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_201 required: &ref_229 - nats_resource_path - use_jetstream - subjects - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: nats trigger list content: application/json: schema: type: array items: allOf: *ref_227 type: object properties: *ref_228 required: *ref_229 /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_211 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_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_230 - 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_211 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_201 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 - 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_475 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_230 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_211 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_201 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_476 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: sqs trigger deleted content: application/json: schema: allOf: - allOf: &ref_231 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_232 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_230 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_201 required: &ref_233 - queue_url - aws_resource_path - aws_auth_resource_type - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: sqs trigger list content: application/json: schema: type: array items: allOf: *ref_231 type: object properties: *ref_232 required: *ref_233 /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_211 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_577 service_name: type: string enum: &ref_234 - nextcloud - google - github oauth_data: nullable: true type: object properties: &ref_235 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_236 - 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_578 - 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_234 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_234 requestBody: description: new native trigger service required: true content: application/json: schema: type: object properties: *ref_235 required: *ref_236 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_234 requestBody: description: redirect_uri required: true content: application/json: schema: type: object properties: &ref_237 redirect_uri: type: string required: &ref_238 - 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_234 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_234 requestBody: description: redirect_uri required: true content: application/json: schema: type: object properties: *ref_237 required: *ref_238 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_234 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_234 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_234 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_239 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_240 - 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_580 external_id: type: string description: >- The external ID of the created trigger from the external service required: &ref_581 - 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_234 - 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_239 required: *ref_240 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_234 - 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_575 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_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: >- 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_576 - 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_234 - 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_234 - 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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: native triggers list content: application/json: schema: type: array items: type: object description: A native trigger stored in Windmill properties: &ref_573 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_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: >- 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_574 - 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_234 - 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_234 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_582 id: type: string name: type: string description: type: string category: type: string path: type: string required: &ref_583 - 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_584 id: type: string summary: type: string primary: type: boolean default: false required: &ref_585 - 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_588 files: type: array items: type: object properties: &ref_586 id: type: string name: type: string mime_type: type: string is_folder: type: boolean default: false required: &ref_587 - id - name - mime_type next_page_token: type: string required: &ref_589 - 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_590 id: type: string name: type: string required: &ref_591 - 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_592 full_name: type: string name: type: string owner: type: string private: type: boolean required: &ref_593 - 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_234 - 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_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_241 qos: type: string enum: &ref_455 - qos0 - qos1 - qos2 topic: type: string required: &ref_242 - 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_243 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_244 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_245 - 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_211 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_201 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 - 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_458 mqtt_resource_path: type: string description: >- Path to the MQTT resource containing broker connection configuration subscribe_topics: type: array items: type: object properties: *ref_241 required: *ref_242 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_243 v5_config: nullable: true description: >- MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval) type: object properties: *ref_244 client_version: nullable: true description: MQTT protocol version ('v3' or 'v5') type: string enum: *ref_245 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_211 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_201 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_459 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: mqtt trigger deleted content: application/json: schema: allOf: - allOf: &ref_246 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_247 mqtt_resource_path: type: string description: >- Path to the MQTT resource containing broker connection configuration subscribe_topics: type: array items: type: object properties: *ref_241 required: *ref_242 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_243 v5_config: nullable: true description: >- MQTT v5 specific configuration (clean_start, topic_alias_maximum, session_expiry_interval) type: object properties: *ref_244 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_245 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_201 required: &ref_248 - subscribe_topics - mqtt_resource_path - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: mqtt trigger list content: application/json: schema: type: array items: allOf: *ref_246 type: object properties: *ref_247 required: *ref_248 /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_211 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_249 gcp_resource_path: type: string description: >- Path to the GCP resource containing service account credentials for authentication. subscription_mode: type: string enum: &ref_254 - 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_251 - 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_252 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_253 - 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_211 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_201 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_250 - 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_249 required: *ref_250 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: gcp trigger deleted content: application/json: schema: allOf: - allOf: &ref_255 - type: object properties: *ref_219 required: *ref_220 type: object description: >- A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received. properties: &ref_256 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_251 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_252 required: *ref_253 subscription_mode: type: string enum: *ref_254 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_201 required: &ref_257 - gcp_resource_path - topic_id - subscription_id - delivery_type - subscription_mode - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: gcp trigger list content: application/json: schema: type: array items: allOf: *ref_255 type: object description: >- A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received. properties: *ref_256 required: *ref_257 /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_211 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_462 subscription_id: type: string required: &ref_463 - 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_460 topic_id: type: string required: &ref_461 - 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_258 azure_resource_path: type: string azure_mode: type: string enum: &ref_260 - 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_211 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_201 permissioned_as: type: string preserve_permissioned_as: type: boolean labels: type: array items: type: string required: &ref_259 - 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_258 required: *ref_259 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: azure trigger content: application/json: schema: allOf: - allOf: &ref_261 - type: object properties: *ref_219 required: *ref_220 type: object description: >- An Azure Event Grid trigger that executes a script or flow when events arrive. properties: &ref_262 azure_resource_path: type: string azure_mode: type: string enum: *ref_260 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_201 required: &ref_263 - azure_resource_path - azure_mode - scope_resource_id - subscription_name - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: azure trigger list content: application/json: schema: type: array items: allOf: *ref_261 type: object description: >- An Azure Event Grid trigger that executes a script or flow when events arrive. properties: *ref_262 required: *ref_263 /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_211 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_466 azure_resource_path: type: string required: &ref_467 - 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_468 scope_resource_id: type: string required: &ref_469 - 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_470 scope_resource_id: type: string topic_name: type: string required: &ref_471 - 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_464 azure_mode: type: string enum: *ref_260 description: Azure Event Grid trigger mode. scope_resource_id: type: string topic_name: type: string nullable: true subscription_name: type: string required: &ref_465 - 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_264 id: type: string name: type: string location: type: string type: type: string required: &ref_265 - 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_264 required: *ref_265 /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_480 postgres_resource_path: type: string relations: type: array items: type: object properties: &ref_267 schema_name: type: string table_to_track: type: array items: &ref_478 type: object properties: table_name: type: string columns_name: type: array items: type: string where_clause: type: string required: - table_name required: &ref_268 - schema_name - table_to_track language: type: string enum: &ref_479 - Typescript required: &ref_481 - 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_309 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_477 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_266 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_266 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_269 type: string responses: '200': description: postgres publication get content: application/json: schema: type: object properties: &ref_270 table_to_track: type: array items: type: object properties: *ref_267 required: *ref_268 transaction_to_track: type: array items: type: string required: &ref_271 - 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_269 requestBody: description: new publication for postgres required: true content: application/json: schema: type: object properties: *ref_270 required: *ref_271 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_269 requestBody: description: update publication for postgres required: true content: application/json: schema: type: object properties: *ref_270 required: *ref_271 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_269 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_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_211 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_270 required: *ref_271 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_201 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 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_484 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_211 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_270 required: *ref_271 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_201 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 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: get postgres trigger content: application/json: schema: allOf: - allOf: &ref_272 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_273 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_201 required: &ref_274 - postgres_resource_path - replication_slot_name - publication_name - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: postgres trigger list content: application/json: schema: type: array items: allOf: *ref_272 type: object properties: *ref_273 required: *ref_274 /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_211 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_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_201 mode: description: job trigger mode type: string enum: *ref_211 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 - 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_496 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_201 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_497 - 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 - name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 responses: '200': description: email trigger retrieved content: application/json: schema: allOf: - allOf: &ref_275 - type: object properties: *ref_219 required: *ref_220 type: object properties: &ref_276 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_201 required: &ref_277 - local_part - type: object description: > Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 /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 - name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 responses: '200': description: email trigger list content: application/json: schema: type: array items: allOf: *ref_275 type: object properties: *ref_276 required: *ref_277 /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_211 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_498 - name properties: &ref_499 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_279 - name properties: &ref_280 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_500 workspace_id: type: string workspace_name: type: string role: type: string required: &ref_501 - name /groups/get/{name}: get: summary: get instance group operationId: getInstanceGroup tags: - group parameters: - name: name in: path required: true schema: *ref_278 responses: '200': description: instance group content: application/json: schema: type: object required: *ref_279 properties: *ref_280 /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_278 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_278 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_278 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_278 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_281 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_282 - 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_281 required: *ref_282 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_283 name: type: string summary: type: string members: type: array items: type: string extra_perms: type: object additionalProperties: type: boolean required: &ref_284 - 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_278 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_278 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_278 responses: '200': description: group content: application/json: schema: type: object properties: *ref_283 required: *ref_284 /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_278 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_278 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_278 - 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_286 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_285 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. labels: type: array items: type: string description: > Labels set on the folder. Items inside the folder inherit them, exposed as `inherited_labels` on scripts and flows and stamped into job labels at run time. required: &ref_287 - 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_285 labels: type: array items: type: string 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_278 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_285 labels: type: array items: type: string 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_278 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_278 responses: '200': description: folder content: application/json: schema: type: object properties: *ref_286 required: *ref_287 /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_278 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_278 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_278 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_278 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_278 - 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_502 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_503 - 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 /workers/workspace_fairness_events: get: summary: list last 100 workspace-fairness cap/uncap events (cloud-only) operationId: getWorkspaceFairnessEvents tags: - worker responses: '200': description: workspace fairness events (empty on non-cloud) content: application/json: schema: type: array items: type: object properties: timestamp: type: string format: date-time operation: type: string workspace_id: type: string nullable: true parameters: type: object nullable: true additionalProperties: true required: - timestamp - operation /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_278 responses: '200': description: a config content: application/json: schema: type: object nullable: true properties: &ref_389 alerts: type: array items: type: object properties: &ref_387 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_388 - 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_278 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_278 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_548 name: type: string config: type: object required: &ref_549 - 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_552 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_99 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_99 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_288 - 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_288 - name: runnable_kind in: path required: true schema: *ref_136 - 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_136 - 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_553 trigger_config: {} trigger_kind: type: string enum: *ref_288 error: type: string last_server_ping: type: string format: date-time required: &ref_554 - 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_136 - name: path in: path required: true schema: *ref_60 - name: trigger_kind in: query schema: type: string enum: *ref_288 - 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_289 trigger_kind: type: string enum: *ref_288 main_args: {} preprocessor_args: {} id: type: integer created_at: type: string format: date-time required: &ref_290 - 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_136 - 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_289 required: *ref_290 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_291 type: string - name: runnable_type in: query schema: &ref_292 type: string enum: &ref_398 - 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_171 - 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_293 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_294 - 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_291 - name: runnable_type in: query schema: *ref_292 - 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_293 required: *ref_294 /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_291 - name: runnable_type in: query schema: *ref_292 requestBody: description: Input required: true content: application/json: schema: type: object properties: &ref_394 name: type: string args: type: object required: &ref_395 - 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_396 id: type: string name: type: string is_public: type: boolean required: &ref_397 - 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_317 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_295 bucket: type: string region: type: string endPoint: type: string useSSL: type: boolean accessKey: type: string secretKey: type: string pathStyle: type: boolean required: &ref_296 - 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_295 required: *ref_296 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_297 region_name: type: string required: &ref_298 - 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_297 required: *ref_298 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_295 required: *ref_296 /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_299 s3: type: string required: &ref_300 - 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_303 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_301 msg: type: string content: type: string content_type: type: string enum: - RawText - Csv - Parquet - Unknown required: &ref_302 - 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_299 required: *ref_300 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_301 required: *ref_302 /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_303 /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_176 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_534 id: type: string name: type: string required: &ref_535 - id scalar_metrics: type: array items: type: object properties: &ref_536 metric_id: type: string value: type: number required: &ref_537 - id - value timeseries_metrics: type: array items: type: object properties: &ref_538 metric_id: type: string values: type: array items: type: object properties: &ref_540 timestamp: type: string format: date-time value: type: number required: &ref_541 - timestamp - value required: &ref_539 - 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_176 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_176 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_304 - name: after description: filter on created after (exclusive) timestamp in: query schema: *ref_305 - 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_542 concurrency_key: type: string total_running: type: number required: &ref_543 - 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_319 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_176 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_123 - 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_178 - 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_114 - 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_161 - 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_162 - name: schedule_path description: mask to filter by schedule path in: query schema: *ref_163 - name: script_hash description: mask to filter exact matching path in: query schema: *ref_164 - name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_165 - name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_166 - name: running description: filter on running jobs in: query schema: *ref_167 - name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_168 - name: completed_before description: filter on started before (inclusive) timestamp in: query schema: *ref_188 - name: completed_after description: filter on started after (exclusive) timestamp in: query schema: *ref_189 - name: created_before_queue description: filter on jobs created before X for jobs in the queue only in: query schema: *ref_190 - name: created_after_queue description: filter on jobs created after X for jobs in the queue only in: query schema: *ref_191 - 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_169 - name: args description: >- filter on jobs containing those args as a json subset (@> in postgres) 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_172 - name: result description: >- filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_173 - name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_175 - 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_192 - 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: status description: >- filter on the exact completed job status. Unlike `success=true` (which also matches `skipped`), `status=success` matches only `success`. in: query schema: type: string enum: - success - failure - canceled - skipped - 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_544 jobs: type: array items: oneOf: *ref_197 discriminator: *ref_198 obscured_jobs: type: array items: type: object properties: &ref_399 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_545 - 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_550 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_551 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_306 usages: type: array items: type: object required: - path - kind properties: path: type: string kind: type: string enum: &ref_308 - script - flow - job access_type: type: string enum: &ref_307 - r - w - rw nullable: true columns: type: object description: The columns used (for tables) additionalProperties: type: string enum: *ref_307 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_308 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_306 access_type: type: string enum: *ref_307 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}/assets/graph: get: summary: Get the workspace-wide asset <-> runnable graph operationId: getAssetsGraph tags: - asset parameters: - name: workspace in: path required: true schema: *ref_4 - name: asset_kinds in: query description: Filter by asset kinds (comma-separated list) schema: type: string - name: folder in: query description: Scope the graph to runnables in a single folder schema: type: string responses: '200': description: asset graph nodes, lineage edges and trigger edges content: application/json: schema: type: object required: - assets - runnables - edges - triggers properties: assets: type: array items: type: object required: - kind - path properties: kind: type: string enum: *ref_306 path: type: string runnables: type: array items: type: object required: - path - usage_kind properties: path: type: string usage_kind: type: string enum: *ref_308 in_pipeline: type: boolean description: >- True iff the script is a pipeline member (deployed with `// pipeline`). Omitted when false. edges: type: array items: type: object required: - runnable_path - runnable_kind - asset_kind - asset_path properties: runnable_path: type: string runnable_kind: type: string enum: *ref_308 asset_kind: type: string enum: *ref_306 asset_path: type: string access_type: type: string enum: *ref_307 nullable: true triggers: type: array items: oneOf: - type: object description: Asset trigger edge (`// on `) required: - trigger_kind - asset_kind - asset_path - runnable_kind - runnable_path properties: trigger_kind: type: string enum: - asset asset_kind: type: string enum: *ref_306 asset_path: type: string runnable_kind: type: string enum: *ref_308 runnable_path: type: string - type: object description: >- Native trigger edge (schedule, email, kafka, ...). `path` is the trigger row's path. required: - trigger_kind - path - runnable_kind - runnable_path properties: trigger_kind: type: string enum: - schedule - email - kafka - mqtt - nats - postgres - sqs - gcp path: type: string runnable_kind: type: string enum: *ref_308 runnable_path: type: string /w/{workspace}/assets/pipelines: get: summary: List folders that contain at least one pipeline-member script operationId: listPipelineFolders tags: - asset parameters: - name: workspace in: path required: true schema: *ref_4 responses: '200': description: folders containing pipeline scripts, with their script counts content: application/json: schema: type: array items: type: object required: - folder - script_count properties: folder: type: string description: The folder name (without the `f/` prefix) script_count: type: integer format: int64 description: Number of pipeline-member scripts in the folder /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_564 - name - size_bytes - file_count - created_at - created_by properties: &ref_565 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_381 - name - description - instructions - path - method properties: &ref_382 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: GetDraft: name: get_draft in: query required: false description: >- When true, overlay the authed user's draft (if any) onto the deployed payload. schema: *ref_77 IncludeDraftOnly: name: include_draft_only in: query required: false description: | When true, append per-user draft rows whose path has no deployed counterpart. Synthesized rows carry `draft_only: true` so the home page can render a "Draft" badge. Gated to non-operators + page 0 + no narrowing filters on the backend so picker callers stay deployed-only and pagination stays clean. schema: *ref_212 Id: name: id in: path required: true schema: *ref_309 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_269 VersionId: name: version in: path required: true schema: type: number Token: name: token in: path required: true schema: *ref_310 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_97 ScriptHash: name: hash in: path required: true schema: *ref_107 JobId: name: id in: path required: true schema: *ref_176 Path: name: path in: path required: true schema: *ref_60 CustomPath: name: custom_path in: path required: true schema: *ref_137 PathId: name: id in: path required: true schema: *ref_84 PathVersion: name: version in: path required: true schema: *ref_311 Name: name: name in: path required: true schema: *ref_278 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_192 OrderDesc: name: order_desc description: order by desc order (default true) in: query schema: *ref_122 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_123 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_178 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_160 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_114 WorkerTag: name: tag description: Override the tag to use in: query schema: *ref_115 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_116 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_117 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_118 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_119 SkipPreprocessor: name: skip_preprocessor description: skip the preprocessor in: query schema: *ref_120 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_121 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_162 SchedulePath: name: schedule_path description: mask to filter by schedule path in: query schema: *ref_163 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_312 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_161 ScriptExactHash: name: script_hash description: mask to filter exact matching path in: query schema: *ref_164 CreatedBefore: name: created_before description: filter on created before (inclusive) timestamp in: query schema: *ref_186 CreatedAfter: name: created_after description: filter on created after (exclusive) timestamp in: query schema: *ref_187 StartedBefore: name: started_before description: filter on started before (inclusive) timestamp in: query schema: *ref_165 StartedAfter: name: started_after description: filter on started after (exclusive) timestamp in: query schema: *ref_166 Before: name: before description: filter on started before (inclusive) timestamp in: query schema: *ref_304 CompletedBefore: name: completed_before description: filter on started before (inclusive) timestamp in: query schema: *ref_188 CompletedAfter: name: completed_after description: filter on started after (exclusive) timestamp in: query schema: *ref_189 CreatedAfterQueue: name: created_after_queue description: filter on jobs created after X for jobs in the queue only in: query schema: *ref_191 CreatedBeforeQueue: name: created_before_queue description: filter on jobs created before X for jobs in the queue only in: query schema: *ref_190 Success: name: success description: filter on successful jobs in: query schema: *ref_174 ScheduledForBeforeNow: name: scheduled_for_before_now description: filter on jobs scheduled_for before now (hence waitinf for a worker) in: query schema: *ref_168 Suspended: name: suspended description: filter on suspended jobs in: query schema: *ref_170 Running: name: running description: filter on running jobs in: query schema: *ref_167 AllowWildcards: name: allow_wildcards description: allow wildcards (*) in the filter of label, tag, worker in: query schema: *ref_175 ArgsFilter: name: args description: filter on jobs containing those args as a json subset (@> in postgres) in: query schema: *ref_171 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_172 ResultFilter: name: result description: filter on jobs containing those result as a json subset (@> in postgres) in: query schema: *ref_173 After: name: after description: filter on created after (exclusive) timestamp in: query schema: *ref_305 Username: name: username description: filter on exact username of user in: query schema: *ref_313 Operation: name: operation description: filter on exact or prefix name of operation in: query schema: *ref_314 ResourceName: name: resource description: filter on exact or prefix name of resource in: query schema: *ref_315 ActionKind: name: action_kind description: filter on type of operation in: query schema: *ref_316 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_169 RunnableId: name: runnable_id in: query schema: *ref_291 RunnableTypeQuery: name: runnable_type in: query schema: *ref_292 InputId: name: input in: path required: true schema: *ref_317 GetStarted: name: get_started in: query schema: *ref_318 ConcurrencyId: name: concurrency_id in: path required: true schema: *ref_319 RunnableKind: name: runnable_kind in: path required: true schema: *ref_136 schemas: UserDraftOverlay: type: object description: | Overlay fields added to every "get by path" response that accepts the `get_draft` query parameter. The deployed payload is sent untouched in the response body; the authed user's saved draft for this path — whatever shape the editor wrote — is attached as the sibling `draft` field when `get_draft=true` and a draft exists. The frontend pairs the two to present diff / reset / discard UI; the server never merges them. When `no_deployed=true` there is no deployed row at this path — the response body is a best-effort stand-in synthesized from the draft, and only `draft` is canonical. Callers should disable "diff vs deployed" UI in that case. properties: *ref_78 required: *ref_79 UserDraftItemKind: type: string description: | Closed set of item kinds a user can autosave as a draft. Mirrors the Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`. enum: *ref_100 OpenFlow: type: object description: >- Top-level flow definition containing metadata, configuration, and the flow structure properties: *ref_124 required: *ref_125 FlowValue: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_153 required: *ref_154 Retry: type: object description: Retry configuration for failed module executions properties: *ref_201 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. error_include_result: type: boolean description: >- When stopping with an error (error_message set), embed the stopping step's own result inside the raised error object (as error.result) instead of discarding it. The top-level result stays { error }. Defaults to false. 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_93 discriminator: *ref_94 stop_after_if: description: Early termination condition for a module type: object properties: *ref_95 required: *ref_96 stop_after_all_iters_if: description: Early termination condition for a module type: object properties: *ref_95 required: *ref_96 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_320 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_142 discriminator: *ref_143 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_321 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_322 required: *ref_323 - type: object description: Automatic context management properties: *ref_324 required: *ref_325 - type: object description: Explicit message history properties: *ref_326 required: *ref_327 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_328 required: *ref_329 - 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_330 required: *ref_331 - type: object description: >- Reference to an existing flow by path. Use this to call another flow as a subflow properties: *ref_332 required: *ref_333 - 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_334 required: *ref_335 - 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_336 required: *ref_337 - 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_338 required: *ref_339 - 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_340 required: *ref_341 - type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: *ref_342 required: *ref_343 - 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_344 required: *ref_345 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_87 required: *ref_88 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_87 required: *ref_88 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_85 discriminator: *ref_86 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_87 required: *ref_88 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_87 required: *ref_88 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_87 required: *ref_88 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_346 discriminator: *ref_347 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_348 discriminator: *ref_349 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_85 discriminator: *ref_86 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_350 required: *ref_351 type: type: string enum: - aiagent tag: type: string description: >- Worker group tag for execution routing. If not set, the AI agent step runs on the flow's tag (default `flow`) 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_179 required: *ref_180 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_112 required: *ref_113 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_352 properties: *ref_353 DatabaseHealth: type: object description: Database health status required: *ref_354 properties: *ref_355 PoolStats: type: object description: Database connection pool statistics required: *ref_356 properties: *ref_357 WorkersHealth: type: object description: Workers health status required: *ref_358 properties: *ref_359 QueueHealth: type: object description: Job queue status required: *ref_360 properties: *ref_361 ReadinessHealth: type: object description: Server readiness status required: *ref_362 properties: *ref_363 AutoInviteConfig: type: object description: Configuration for auto-inviting users to the workspace properties: *ref_364 ErrorHandlerConfig: type: object description: Configuration for the workspace error handler properties: *ref_365 SuccessHandlerConfig: type: object description: Configuration for the workspace success handler properties: *ref_366 EditErrorHandler: description: >- Request body for editing the workspace error handler. Accepts both new grouped format and legacy flat format for backward compatibility. oneOf: *ref_367 EditErrorHandlerNew: type: object description: New grouped format for editing error handler properties: *ref_368 EditErrorHandlerLegacy: type: object description: >- Legacy flat format for editing error handler (deprecated, use new format) properties: *ref_369 EditSuccessHandler: description: >- Request body for editing the workspace success handler. Accepts both new grouped format and legacy flat format for backward compatibility. oneOf: *ref_370 EditSuccessHandlerNew: type: object description: New grouped format for editing success handler properties: *ref_371 EditSuccessHandlerLegacy: type: object description: >- Legacy flat format for editing success handler (deprecated, use new format) properties: *ref_372 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_373 properties: *ref_374 SecretMigrationReport: type: object required: *ref_29 properties: *ref_30 JwksResponse: type: object required: *ref_375 properties: *ref_376 FlowConversation: type: object required: *ref_377 properties: *ref_378 FlowConversationMessage: type: object required: *ref_379 properties: *ref_380 EndpointTool: type: object required: *ref_381 properties: *ref_382 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_383 required: *ref_384 AIConfig: type: object properties: *ref_50 InstanceAIProviderSummary: type: object properties: *ref_385 required: *ref_386 InstanceAISummary: type: object properties: *ref_52 required: *ref_53 Alert: type: object properties: *ref_387 required: *ref_388 Configs: type: object nullable: true properties: *ref_389 WorkspaceDependencies: type: object properties: *ref_103 required: *ref_104 NewWorkspaceDependencies: type: object properties: *ref_390 required: *ref_391 Script: type: object properties: *ref_105 required: *ref_106 NewScript: type: object properties: *ref_392 required: *ref_393 ScriptHistory: type: object properties: *ref_110 required: *ref_111 ScriptArgs: type: object description: The arguments to pass to the script or flow additionalProperties: true Input: type: object properties: *ref_293 required: *ref_294 CreateInput: type: object properties: *ref_394 required: *ref_395 UpdateInput: type: object properties: *ref_396 required: *ref_397 RunnableType: type: string enum: *ref_398 QueuedJob: type: object properties: *ref_195 required: *ref_196 CompletedJob: type: object properties: *ref_193 required: *ref_194 ExportableCompletedJob: type: object description: Completed job with full data for export/import operations properties: *ref_182 required: *ref_183 ExportableQueuedJob: type: object description: Queued job with full data for export/import operations properties: *ref_184 required: *ref_185 ObscuredJob: type: object properties: *ref_399 Job: oneOf: *ref_197 discriminator: *ref_198 User: type: object properties: *ref_35 required: *ref_36 UserSource: type: object properties: *ref_400 required: *ref_401 UserUsage: type: object properties: *ref_402 Login: type: object properties: *ref_403 required: *ref_404 PasswordResetResponse: type: object properties: *ref_7 required: *ref_8 EditWorkspaceUser: type: object properties: *ref_405 OffboardAffectedPaths: type: object properties: *ref_11 OffboardPreview: type: object properties: *ref_12 required: *ref_13 OffboardTokenInfo: type: object properties: *ref_406 required: *ref_407 OffboardRequest: type: object properties: *ref_408 required: *ref_409 OffboardResponse: type: object properties: *ref_14 OffboardSummary: type: object properties: *ref_410 required: *ref_411 GlobalOffboardPreview: type: object properties: *ref_412 required: *ref_413 WorkspaceOffboardPreview: type: object properties: *ref_414 required: *ref_415 GlobalOffboardRequest: type: object properties: *ref_416 WorkspaceReassignment: type: object properties: *ref_417 required: *ref_418 TruncatedToken: type: object properties: *ref_108 required: *ref_109 ExternalJwtToken: type: object properties: *ref_419 required: *ref_420 NewToken: type: object properties: *ref_421 NewTokenImpersonate: type: object properties: *ref_422 required: *ref_423 ListableVariable: type: object properties: *ref_61 required: *ref_62 ContextualVariable: type: object properties: *ref_424 required: *ref_425 CreateVariable: type: object properties: *ref_426 required: *ref_427 EditVariable: type: object properties: *ref_428 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_99 ScriptModule: type: object description: An additional module file associated with a script properties: *ref_101 required: *ref_102 Preview: type: object properties: *ref_145 required: *ref_146 PreviewInline: type: object properties: *ref_429 required: *ref_430 InlineScriptArgs: type: object properties: *ref_144 WorkflowTask: type: object properties: *ref_431 required: *ref_432 WorkflowStatusRecord: type: object additionalProperties: type: object properties: *ref_181 WorkflowStatus: type: object properties: *ref_181 CreateResource: type: object properties: *ref_433 required: *ref_434 EditResource: type: object properties: *ref_435 Resource: type: object properties: workspace_id: type: string path: type: string description: type: string resource_type: type: string value: {} is_oauth: type: boolean extra_perms: type: object additionalProperties: type: boolean created_by: type: string edited_at: type: string format: date-time labels: type: array items: type: string inherited_labels: type: array items: type: string description: > Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder. ws_specific: type: boolean required: - path - resource_type - is_oauth ListableResource: type: object properties: *ref_80 required: *ref_81 ResourceType: type: object properties: *ref_82 required: *ref_83 EditResourceType: type: object properties: *ref_436 Schedule: type: object properties: *ref_202 required: *ref_203 ScheduleWJobs: allOf: *ref_437 ErrorHandler: type: string enum: - custom - slack - teams - email NewSchedule: type: object properties: *ref_438 required: *ref_439 EditSchedule: type: object properties: *ref_440 required: *ref_441 JobTriggerKind: description: job trigger kind (schedule, http, websocket...) type: string enum: *ref_177 TriggerMode: description: job trigger mode type: string enum: *ref_211 TriggerExtraProperty: type: object properties: *ref_219 required: *ref_220 AuthenticationMethod: type: string enum: *ref_210 RunnableKind: type: string enum: *ref_204 OpenapiSpecFormat: type: string enum: *ref_442 OpenapiHttpRouteFilters: type: object properties: *ref_443 required: *ref_444 WebhookFilters: type: object properties: *ref_445 required: *ref_446 OpenapiV3Info: type: object properties: *ref_447 required: *ref_448 GenerateOpenapiSpec: type: object properties: *ref_205 HttpMethod: type: string enum: *ref_208 HttpRequestType: type: string enum: *ref_209 HttpTrigger: allOf: *ref_213 type: object properties: *ref_214 required: *ref_215 NewHttpTrigger: type: object properties: *ref_206 required: *ref_207 EditHttpTrigger: type: object properties: *ref_449 required: *ref_450 TriggersCount: type: object properties: *ref_129 WebsocketHeartbeat: type: object properties: *ref_217 required: *ref_218 WebsocketTrigger: allOf: *ref_221 type: object properties: *ref_222 required: *ref_223 NewWebsocketTrigger: type: object properties: *ref_451 required: *ref_452 EditWebsocketTrigger: type: object properties: *ref_453 required: *ref_454 WebsocketTriggerInitialMessage: anyOf: *ref_216 MqttQoS: type: string enum: *ref_455 MqttV3Config: type: object properties: *ref_243 MqttV5Config: type: object properties: *ref_244 MqttSubscribeTopic: type: object properties: *ref_241 required: *ref_242 MqttClientVersion: type: string enum: *ref_245 MqttTrigger: allOf: *ref_246 type: object properties: *ref_247 required: *ref_248 NewMqttTrigger: type: object properties: *ref_456 required: *ref_457 EditMqttTrigger: type: object properties: *ref_458 required: *ref_459 DeliveryType: type: string enum: *ref_251 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_252 required: *ref_253 GcpTrigger: allOf: *ref_255 type: object description: >- A Google Cloud Pub/Sub trigger that executes a script or flow when messages are received. properties: *ref_256 required: *ref_257 SubscriptionMode: type: string enum: *ref_254 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_249 required: *ref_250 GetAllTopicSubscription: type: object properties: *ref_460 required: *ref_461 DeleteGcpSubscription: type: object properties: *ref_462 required: *ref_463 AzureMode: type: string enum: *ref_260 description: Azure Event Grid trigger mode. AzureArmResource: type: object description: An ARM resource the service principal can see. properties: *ref_264 required: *ref_265 AzureDeleteSubscription: type: object properties: *ref_464 required: *ref_465 AzureTrigger: allOf: *ref_261 type: object description: >- An Azure Event Grid trigger that executes a script or flow when events arrive. properties: *ref_262 required: *ref_263 AzureTriggerData: type: object description: Data for creating or updating an Azure Event Grid trigger. properties: *ref_258 required: *ref_259 TestAzureConnection: type: object properties: *ref_466 required: *ref_467 AzureListTopics: type: object properties: *ref_468 required: *ref_469 AzureListSubscriptions: type: object properties: *ref_470 required: *ref_471 AwsAuthResourceType: type: string enum: *ref_230 SqsTrigger: allOf: *ref_231 type: object properties: *ref_232 required: *ref_233 LoggedWizardStatus: type: string enum: *ref_21 CustomInstanceDbLogs: type: object properties: *ref_472 CustomInstanceDbTag: type: string enum: *ref_22 CustomInstanceDb: type: object required: *ref_23 properties: *ref_24 NewSqsTrigger: type: object properties: *ref_473 required: *ref_474 EditSqsTrigger: type: object properties: *ref_475 required: *ref_476 Slot: type: object properties: *ref_266 SlotList: type: object properties: *ref_477 PublicationData: type: object properties: *ref_270 required: *ref_271 TableToTrack: type: array items: *ref_478 Relations: type: object properties: *ref_267 required: *ref_268 Language: type: string enum: *ref_479 TemplateScript: type: object properties: *ref_480 required: *ref_481 PostgresTrigger: allOf: *ref_272 type: object properties: *ref_273 required: *ref_274 NewPostgresTrigger: type: object properties: *ref_482 required: *ref_483 EditPostgresTrigger: type: object properties: *ref_484 required: *ref_485 KafkaTrigger: allOf: *ref_224 type: object properties: *ref_225 required: *ref_226 NewKafkaTrigger: type: object properties: *ref_486 required: *ref_487 EditKafkaTrigger: type: object properties: *ref_488 required: *ref_489 NatsTrigger: allOf: *ref_227 type: object properties: *ref_228 required: *ref_229 NewNatsTrigger: type: object properties: *ref_490 required: *ref_491 EditNatsTrigger: type: object properties: *ref_492 required: *ref_493 EmailTrigger: allOf: *ref_275 type: object properties: *ref_276 required: *ref_277 NewEmailTrigger: type: object properties: *ref_494 required: *ref_495 EditEmailTrigger: type: object properties: *ref_496 required: *ref_497 Group: type: object properties: *ref_283 required: *ref_284 InstanceGroup: type: object required: *ref_498 properties: *ref_499 InstanceGroupWithWorkspaces: type: object required: *ref_279 properties: *ref_280 WorkspaceInfo: type: object properties: *ref_500 required: *ref_501 Folder: type: object properties: *ref_286 required: *ref_287 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_285 WorkerPing: type: object properties: *ref_502 required: *ref_503 UserWorkspaceList: type: object properties: *ref_504 required: *ref_505 CreateWorkspace: type: object properties: *ref_506 required: *ref_507 CreateWorkspaceFork: type: object properties: *ref_19 required: *ref_20 Workspace: type: object properties: *ref_15 required: *ref_16 DependencyMap: type: object properties: *ref_508 DependencyDependent: type: object properties: *ref_509 required: *ref_510 DependentsAmount: type: object properties: *ref_511 required: *ref_512 WorkspaceInvite: type: object properties: *ref_41 required: *ref_42 GlobalUserInfo: type: object properties: *ref_39 required: *ref_40 Flow: allOf: *ref_128 ExtraPerms: type: object additionalProperties: *ref_513 FlowMetadata: type: object properties: *ref_514 required: *ref_515 OpenFlowWPath: allOf: *ref_130 FlowPreview: type: object properties: *ref_156 required: *ref_157 RestartedFrom: type: object properties: *ref_155 Policy: type: object properties: *ref_131 ListableApp: type: object properties: *ref_516 required: *ref_517 ScopeDefinition: type: object properties: *ref_518 required: *ref_519 ScopeDomain: type: object properties: *ref_520 required: *ref_521 ListableRawApp: type: object properties: *ref_522 required: *ref_523 AppWithLastVersion: type: object properties: *ref_132 required: *ref_133 AppHistory: type: object properties: *ref_134 required: *ref_135 FlowVersion: type: object properties: *ref_126 required: *ref_127 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_98 PolarsClientKwargs: type: object properties: *ref_297 required: *ref_298 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_524 properties: *ref_525 DataTableTables: type: object required: *ref_526 properties: *ref_527 DataTableTableSchema: type: object required: *ref_528 properties: *ref_529 DynamicInputData: type: object properties: *ref_530 required: *ref_531 WindmillLargeFile: type: object properties: *ref_299 required: *ref_300 WindmillFileMetadata: type: object properties: *ref_303 WindmillFilePreview: type: object properties: *ref_301 required: *ref_302 S3Resource: type: object properties: *ref_295 required: *ref_296 WorkspaceGitSyncSettings: type: object properties: *ref_56 WorkspaceDeployUISettings: type: object properties: *ref_49 WorkspaceDefaultScripts: type: object properties: *ref_59 S3PermissionRule: type: object properties: *ref_532 required: *ref_533 GitRepositorySettings: type: object properties: *ref_57 required: *ref_58 MetricMetadata: type: object properties: *ref_534 required: *ref_535 ScalarMetric: type: object properties: *ref_536 required: *ref_537 TimeseriesMetric: type: object properties: *ref_538 required: *ref_539 MetricDataPoint: type: object properties: *ref_540 required: *ref_541 RawScriptForDependencies: type: object properties: *ref_147 required: *ref_148 ConcurrencyGroup: type: object properties: *ref_542 required: *ref_543 ExtendedJobs: type: object properties: *ref_544 required: *ref_545 ExportedUser: type: object properties: *ref_9 required: *ref_10 GlobalSetting: type: object properties: *ref_546 required: *ref_547 InstanceConfig: type: object description: >- Unified instance configuration combining global settings and worker group configs properties: *ref_26 Config: type: object properties: *ref_548 required: *ref_549 ExportedInstanceGroup: type: object properties: *ref_281 required: *ref_282 JobSearchHit: type: object properties: *ref_550 LogSearchHit: type: object properties: *ref_551 AutoscalingEvent: type: object properties: *ref_552 CriticalAlert: type: object properties: *ref_63 CaptureTriggerKind: type: string enum: *ref_288 Capture: type: object properties: *ref_289 required: *ref_290 CaptureConfig: type: object properties: *ref_553 required: *ref_554 OperatorSettings: nullable: true type: object required: *ref_37 properties: *ref_38 WorkspaceComparison: type: object required: *ref_555 properties: *ref_556 WorkspaceItemDiff: type: object required: *ref_557 properties: *ref_558 CompareSummary: type: object required: *ref_559 properties: *ref_560 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_561 - channel_id - channel_name - tenant_id - service_url properties: &ref_562 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_561 properties: *ref_562 GithubInstallations: type: array items: *ref_563 WorkspaceGithubInstallation: type: object properties: account_id: type: string installation_id: type: number required: - account_id - installation_id S3Object: type: object properties: *ref_138 required: *ref_139 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_308 AssetUsageAccessType: type: string enum: *ref_307 nullable: true AssetKind: type: string enum: *ref_306 Asset: type: object properties: path: type: string kind: type: string enum: *ref_306 required: - path - kind Volume: type: object required: *ref_564 properties: *ref_565 ProtectionRuleset: type: object description: A workspace protection rule defining restrictions and bypass permissions required: *ref_566 properties: *ref_567 ProtectionRules: type: array description: Configuration of protection restrictions items: *ref_64 ProtectionRuleKind: type: string enum: *ref_568 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_569 properties: *ref_570 DeploymentRequestAssignee: type: object required: *ref_571 properties: *ref_572 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_234 NativeTrigger: type: object description: A native trigger stored in Windmill properties: *ref_573 required: *ref_574 NativeTriggerWithExternal: type: object description: >- Full trigger response containing both Windmill data and external service data properties: *ref_575 required: *ref_576 WorkspaceIntegrations: type: object properties: *ref_577 required: *ref_578 WorkspaceOAuthConfig: type: object properties: *ref_235 required: *ref_236 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_579 - async - sync required: - type - request_type WebhookRequestType: type: string description: The type of webhook request (define possible values here) enum: *ref_579 RedirectUri: type: object properties: *ref_237 required: *ref_238 NativeTriggerData: type: object description: Data for creating or updating a native trigger properties: *ref_239 required: *ref_240 CreateTriggerResponse: type: object description: Response returned when a native trigger is created properties: *ref_580 required: *ref_581 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_582 required: *ref_583 GoogleCalendarEntry: type: object properties: *ref_584 required: *ref_585 GoogleDriveFile: type: object properties: *ref_586 required: *ref_587 GoogleDriveFilesResponse: type: object properties: *ref_588 required: *ref_589 SharedDriveEntry: type: object properties: *ref_590 required: *ref_591 GithubRepoEntry: type: object properties: *ref_592 required: *ref_593 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_140 required: *ref_141 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_89 required: *ref_90 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_91 required: *ref_92 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_85 discriminator: *ref_86 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_328 required: *ref_329 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_330 required: *ref_331 schemas-PathFlow: type: object description: >- Reference to an existing flow by path. Use this to call another flow as a subflow properties: *ref_332 required: *ref_333 schemas-FlowModule: type: object description: A single step in a flow. Can be a script, subflow, loop, or branch properties: *ref_87 required: *ref_88 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_334 required: *ref_335 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_336 required: *ref_337 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_338 required: *ref_339 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_340 required: *ref_341 schemas-Identity: type: object description: >- Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder properties: *ref_342 required: *ref_343 AIProviderKind: type: string description: Supported AI provider types enum: *ref_321 schemas-ProviderConfig: type: object description: >- Complete AI provider configuration with resource reference and model selection properties: *ref_594 required: *ref_595 StaticProviderTransform: type: object description: Static provider configuration passed directly to the AI agent properties: *ref_596 required: *ref_597 ProviderTransform: description: >- Provider configuration - can be static (ProviderConfig), JavaScript expression, or AI-determined oneOf: *ref_346 discriminator: *ref_347 MemoryOff: type: object description: No conversation memory/context properties: *ref_322 required: *ref_323 MemoryAuto: type: object description: Automatic context management properties: *ref_324 required: *ref_325 MemoryMessage: type: object description: A single message in conversation history properties: *ref_598 required: *ref_599 MemoryManual: type: object description: Explicit message history properties: *ref_326 required: *ref_327 schemas-MemoryConfig: description: Conversation memory configuration oneOf: *ref_600 discriminator: *ref_601 StaticMemoryTransform: type: object description: Static memory configuration passed directly to the AI agent properties: *ref_602 required: *ref_603 MemoryTransform: description: >- Memory configuration - can be static (MemoryConfig), JavaScript expression, or AI-determined oneOf: *ref_348 discriminator: *ref_349 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_93 discriminator: *ref_94 FlowModuleTool: description: >- A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module allOf: *ref_604 McpToolValue: type: object description: >- Reference to an external MCP (Model Context Protocol) tool. The AI can call tools from MCP servers properties: *ref_605 required: *ref_606 WebsearchToolValue: type: object description: >- A tool implemented as a websearch tool. The AI can call this like any other websearch tool properties: *ref_607 required: *ref_608 ToolValue: description: >- The implementation of a tool. Can be a flow module (script/flow) or an MCP tool reference oneOf: *ref_609 discriminator: *ref_610 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_350 required: *ref_351 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_344 required: *ref_345 schemas-StopAfterIf: type: object description: Early termination condition for a module properties: *ref_95 required: *ref_96 RetryIf: type: object description: Conditional retry based on error or result properties: *ref_199 required: *ref_200 schemas-Retry: type: object description: Retry configuration for failed module executions properties: *ref_320 schemas-FlowNote: type: object description: A sticky note attached to a flow for documentation and annotation properties: *ref_149 required: *ref_150 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_151 required: *ref_152 schemas-FlowValue: type: object description: >- The flow structure containing modules and optional preprocessor/failure handlers properties: *ref_611 required: *ref_612 schemas-FlowStatusModule: type: object properties: *ref_158 required: *ref_159