From 7d799a701ce573bf9de01ac76868f557a8f0e091 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 30 Sep 2026 00:51:43 +0000 Subject: [PATCH] Update API specifications with fern api update --- fern/openapi/skyvern_openapi.json | 4519 +++++++++++++++++++++++++++-- 1 file changed, 4294 insertions(+), 225 deletions(-) diff --git a/fern/openapi/skyvern_openapi.json b/fern/openapi/skyvern_openapi.json index 0fc752d12..3f48ab920 100644 --- a/fern/openapi/skyvern_openapi.json +++ b/fern/openapi/skyvern_openapi.json @@ -28,10 +28,8 @@ "type": "null" } ], - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", "title": "X-Api-Key" - }, - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } }, { "name": "x-user-agent", @@ -286,11 +284,11 @@ "mapping": { "task_v1": "#/components/schemas/TaskRunResponse", "task_v2": "#/components/schemas/TaskRunResponse", + "task_v3": "#/components/schemas/TaskRunResponse", "openai_cua": "#/components/schemas/TaskRunResponse", "anthropic_cua": "#/components/schemas/TaskRunResponse", "ui_tars": "#/components/schemas/TaskRunResponse", "yutori_navigator": "#/components/schemas/TaskRunResponse", - "task_v3": "#/components/schemas/TaskRunResponse", "workflow_run": "#/components/schemas/WorkflowRunResponse" } }, @@ -527,6 +525,24 @@ "title": "X-Api-Key" }, "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + }, + { + "name": "Idempotency-Key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Idempotency-Key must contain 1 to 255 visible ASCII bytes.", + "title": "Idempotency-Key" + }, + "description": "Idempotency-Key must contain 1 to 255 visible ASCII bytes." } ], "requestBody": { @@ -550,6 +566,9 @@ } } }, + "409": { + "description": "A create with this idempotency key is still in progress" + }, "422": { "description": "Invalid agent definition" } @@ -1371,6 +1390,63 @@ "x-fern-sdk-method-name": "delete_folder" } }, + "/v1/browser_types": { + "get": { + "tags": [ + "Server" + ], + "summary": "List selectable browser types", + "description": "List the selectable browser engines for the workflow/run browser_type setting. The list is runtime-capability aware: a runtime that can honor an explicit engine (the cloud dynamic-browser capability) returns all supported engines, while a runtime without it (OSS/self-host) returns an empty list rather than advertising selections the server would reject.", + "operationId": "get_browser_types_v1_browser_types_get", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "responses": { + "200": { + "description": "Successfully listed selectable browser types", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BrowserTypeOption" + }, + "title": "Response Get Browser Types V1 Browser Types Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-fern-sdk-method-name": "get_browser_types" + } + }, "/v1/runs/{workflow_run_id}/tags": { "post": { "tags": [ @@ -1441,6 +1517,7 @@ "description": "Invalid tag key or value" } }, + "x-hidden": true, "x-fern-sdk-method-name": "apply_run_tags" }, "get": { @@ -1509,6 +1586,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "get_run_tags" } }, @@ -1593,6 +1671,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "delete_run_tag" } }, @@ -1714,6 +1793,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "get_run_tag_history" } }, @@ -1771,6 +1851,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "list_tag_keys" } }, @@ -1841,6 +1922,7 @@ "description": "Description too long" } }, + "x-hidden": true, "x-fern-sdk-method-name": "update_tag_key" }, "delete": { @@ -1909,6 +1991,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "delete_tag_key" } }, @@ -1984,7 +2067,66 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "list_tag_values" + }, + "post": { + "tags": [ + "Tags" + ], + "summary": "Create tag value", + "description": "Register a grouped tag (key, value) with a palette color before any workflow uses it. The label shows a zero workflow count until applied to a workflow.", + "operationId": "create_tag_value_v1_tag_values_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagValueCreate" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully registered tag value", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagValue" + } + } + } + }, + "409": { + "description": "Tag value already exists" + }, + "422": { + "description": "Invalid key, value, or color" + } + }, + "x-hidden": true, + "x-fern-sdk-method-name": "create_tag_value" } }, "/v1/tag-values/{key}": { @@ -2057,6 +2199,7 @@ "description": "Invalid palette color" } }, + "x-hidden": true, "x-fern-sdk-method-name": "update_tag_value" }, "delete": { @@ -2135,6 +2278,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "delete_tag_value" } }, @@ -2211,6 +2355,7 @@ "description": "Invalid value" } }, + "x-hidden": true, "x-fern-sdk-method-name": "rename_tag_value" } }, @@ -2500,6 +2645,60 @@ "x-fern-sdk-method-name": "batch_get_run_tags_post" } }, + "/v1/run-tag-suggestions": { + "get": { + "tags": [ + "Tags" + ], + "summary": "List run tag suggestions", + "description": "List distinct (key, value) pairs ever set on a run for the organization, sourced from the run-tag event log rather than the tag-key/tag-value registry. Surfaces reserved 'skyvern.*' system keys (which are never registered) so pickers can offer them alongside user-defined tags.", + "operationId": "get_run_tag_suggestions_v1_run_tag_suggestions_get", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "responses": { + "200": { + "description": "Successfully retrieved run tag suggestions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RunTagSuggestionsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-hidden": true, + "x-fern-sdk-method-name": "get_run_tag_suggestions" + } + }, "/v1/artifacts/{artifact_id}/content": { "get": { "tags": [ @@ -2863,7 +3062,8 @@ "tags": [ "agent" ], - "summary": "Get Runs V2", + "summary": "List runs", + "description": "List the organization's task and agent runs, newest first, filterable by status, run type, agent, a free-text search term, and failure category. Returns a paginated array of run summaries.", "operationId": "get_runs_v2_v1_runs_get", "parameters": [ { @@ -2951,6 +3151,79 @@ "title": "Run Type" } }, + { + "name": "workflow_permanent_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50 + }, + { + "type": "null" + } + ], + "description": "Filter to runs of these workflows (agents). Repeat the param to include multiple.", + "title": "Workflow Permanent Id" + }, + "description": "Filter to runs of these workflows (agents). Repeat the param to include multiple." + }, + { + "name": "tags", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20 + }, + { + "type": "null" + } + ], + "description": "Filter by run tags. Each term is a label (`production`), a group (`env:*`), or a group:label (`env:prod`). Repeat the param or comma-separate (`?tags=env:prod,env:staging`). AND across distinct terms, OR within a group's labels (`?tags=customer:acme,env:prod,env:staging` -> customer=acme AND env in (prod, staging)). A label term matches the value across any/no group. Matches current tag values only.", + "examples": [ + "env:prod", + "production", + "env:*", + "customer:acme,env:prod" + ], + "title": "Tags" + }, + "description": "Filter by run tags. Each term is a label (`production`), a group (`env:*`), or a group:label (`env:prod`). Repeat the param or comma-separate (`?tags=env:prod,env:staging`). AND across distinct terms, OR within a group's labels (`?tags=customer:acme,env:prod,env:staging` -> customer=acme AND env in (prod, staging)). A label term matches the value across any/no group. Matches current tag values only." + }, + { + "name": "failure_category", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "maxLength": 100 + }, + { + "type": "null" + } + ], + "description": "Exact-match filter on a workflow run's top classifier failure category (`failure_category[0].category`). Only failed, terminated, and timed_out runs are eligible; canceled runs are never returned by this filter. Applies to `run_type=workflow_run` only — combined with a task run_type it matches nothing.", + "examples": [ + "ANTI_BOT_DETECTION", + "AUTH_FAILURE" + ], + "title": "Failure Category" + }, + "description": "Exact-match filter on a workflow run's top classifier failure category (`failure_category[0].category`). Only failed, terminated, and timed_out runs are eligible; canceled runs are never returned by this filter. Applies to `run_type=workflow_run` only — combined with a task run_type it matches nothing." + }, { "name": "x-api-key", "in": "header", @@ -3005,7 +3278,8 @@ "tags": [ "Files" ], - "summary": "Upload File", + "summary": "Upload a file", + "description": "Upload a file to Skyvern storage so runs can reference it as an input. Returns the file id, its storage URI, a presigned download URL, and the expiry implied by the requested retention period.", "operationId": "upload_file_v1_upload_file_post", "parameters": [ { @@ -3062,6 +3336,61 @@ "x-fern-sdk-method-name": "upload_file" } }, + "/v1/files/{file_id}": { + "delete": { + "tags": [ + "Files" + ], + "summary": "Delete File", + "description": "Delete a previously uploaded file.\n\nA file that does not exist, was already deleted, or belongs to another organization all\nanswer 404 alike — the endpoint must not tell a caller whether someone else's file id\nexists.", + "operationId": "delete_file_v1_files__file_id__delete", + "parameters": [ + { + "name": "file_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "File Id" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-fern-sdk-method-name": "delete_file" + } + }, "/v1/browser_profiles": { "post": { "tags": [ @@ -3134,11 +3463,11 @@ "code-samples": [ { "sdk": "python", - "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\n# Create a blank browser profile for future runs\nblank_profile = await skyvern.browser_profiles.create_browser_profile(\n name=\"Fresh Profile\",\n)\nprint(blank_profile)\n\n# Create a browser profile from a persistent browser session\nbrowser_profile = await skyvern.browser_profiles.create_browser_profile(\n name=\"My Profile\",\n browser_session_id=\"pbs_123\",\n)\nprint(browser_profile)\n\n# Or create from a workflow run with persist_browser_session=True\nbrowser_profile = await skyvern.browser_profiles.create_browser_profile(\n name=\"My Profile\",\n workflow_run_id=\"wr_123\",\n)\nprint(browser_profile)\n" + "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\n# Create a blank browser profile for future runs\nblank_profile = await skyvern.browser_profiles.create_browser_profile(\n name=\"Fresh Profile\",\n)\nprint(blank_profile)\n\n# Create a browser profile from a persistent browser session\nbrowser_profile = await skyvern.browser_profiles.create_browser_profile(\n name=\"My Profile\",\n browser_session_id=\"pbs_123\",\n)\nprint(browser_profile)\n\n# Or create from any workflow run that saved a browser (has a persisted archive)\nbrowser_profile = await skyvern.browser_profiles.create_browser_profile(\n name=\"My Profile\",\n workflow_run_id=\"wr_123\",\n)\nprint(browser_profile)\n" }, { "sdk": "typescript", - "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKey: \"YOUR_API_KEY\" });\n// Create a blank browser profile for future runs\nconst blankProfile = await skyvern.browserProfiles.createBrowserProfile({\n name: \"Fresh Profile\",\n});\nconsole.log(blankProfile);\n\n// Create a browser profile from a persistent browser session\nconst browserProfile = await skyvern.browserProfiles.createBrowserProfile({\n name: \"My Profile\",\n browser_session_id: \"pbs_123\",\n});\nconsole.log(browserProfile);\n\n// Or create from a workflow run with persist_browser_session=True\nconst browserProfile2 = await skyvern.browserProfiles.createBrowserProfile({\n name: \"My Profile\",\n workflow_run_id: \"wr_123\",\n});\nconsole.log(browserProfile2);\n" + "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKey: \"YOUR_API_KEY\" });\n// Create a blank browser profile for future runs\nconst blankProfile = await skyvern.browserProfiles.createBrowserProfile({\n name: \"Fresh Profile\",\n});\nconsole.log(blankProfile);\n\n// Create a browser profile from a persistent browser session\nconst browserProfile = await skyvern.browserProfiles.createBrowserProfile({\n name: \"My Profile\",\n browser_session_id: \"pbs_123\",\n});\nconsole.log(browserProfile);\n\n// Or create from any workflow run that saved a browser (has a persisted archive)\nconst browserProfile2 = await skyvern.browserProfiles.createBrowserProfile({\n name: \"My Profile\",\n workflow_run_id: \"wr_123\",\n});\nconsole.log(browserProfile2);\n" } ] } @@ -3542,6 +3871,76 @@ ] } }, + "/v1/browser_profiles/{profile_id}/usage": { + "get": { + "tags": [ + "Browser Profiles" + ], + "summary": "Get browser profile usage", + "description": "List the workflows, credentials, and recent runs that depend on a browser profile.", + "operationId": "get_browser_profile_usage_v1_browser_profiles__profile_id__usage_get", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the browser profile. browser_profile_id starts with `bp_`", + "examples": [ + "bp_123456" + ], + "title": "Profile Id" + }, + "description": "The ID of the browser profile. browser_profile_id starts with `bp_`" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "responses": { + "200": { + "description": "Successfully retrieved browser profile usage", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BrowserProfileUsage" + } + } + } + }, + "404": { + "description": "Browser profile not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-fern-sdk-method-name": "get_browser_profile_usage" + } + }, "/v1/browser_sessions": { "post": { "tags": [ @@ -3577,7 +3976,8 @@ "$ref": "#/components/schemas/CreateBrowserSessionRequest", "default": { "timeout": 60, - "generate_browser_profile": false + "generate_browser_profile": false, + "needs_live_view": false } } } @@ -3594,6 +3994,9 @@ } } }, + "400": { + "description": "Invalid request" + }, "403": { "description": "Unauthorized - Invalid or missing authentication" }, @@ -3848,18 +4251,18 @@ } } }, - "404": { - "description": "Browser session not found" + "202": { + "description": "Accepted - the extension was requested but its effect could not be confirmed yet. The body carries the session as last recorded and a `warning`; read `timeout` back with a GET rather than retrying, because each retry adds again." }, "403": { "description": "Unauthorized - Invalid or missing authentication" }, + "404": { + "description": "Browser session not found" + }, "409": { "description": "Conflict - the browser session has ended, is about to expire, is already at its maximum lifetime, or runs on infrastructure whose lifetime is fixed at creation" }, - "202": { - "description": "Accepted - the extension was requested but its effect could not be confirmed yet. The body carries the session as last recorded and a `warning`; read `timeout` back with a GET rather than retrying, because each retry adds again." - }, "422": { "description": "Validation Error", "content": { @@ -4040,6 +4443,39 @@ } } } + }, + "503": { + "description": "Downloaded files could not be returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "detail" + ], + "properties": { + "detail": { + "type": "object", + "required": [ + "code", + "retryable" + ], + "properties": { + "code": { + "type": "string", + "enum": [ + "downloaded_files_unavailable" + ] + }, + "retryable": { + "type": "boolean" + } + } + } + } + } + } + } } }, "x-fern-sdk-method-name": "get_browser_session", @@ -4108,6 +4544,9 @@ } } }, + "402": { + "description": "Insufficient credits to parse OTP content" + }, "422": { "description": "Validation Error", "content": { @@ -4717,6 +5156,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "list_custom_llms" }, "post": { @@ -4778,6 +5218,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "create_custom_llm" } }, @@ -4852,6 +5293,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "update_custom_llm" }, "delete": { @@ -4914,6 +5356,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "delete_custom_llm" } }, @@ -4939,10 +5382,8 @@ "type": "null" } ], - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", "title": "X-Api-Key" - }, - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } }, { "name": "x-user-agent", @@ -5050,10 +5491,8 @@ "type": "null" } ], - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", "title": "X-Api-Key" - }, - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } }, { "name": "x-user-agent", @@ -5183,6 +5622,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "create_script" }, "get": { @@ -5270,6 +5710,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "get_scripts" } }, @@ -5337,6 +5778,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "get_script" } }, @@ -5414,6 +5856,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "deploy_script" } }, @@ -5478,7 +5921,8 @@ } } } - } + }, + "x-hidden": true } }, "/v1/sdk/run_action": { @@ -5551,6 +5995,7 @@ "Schedules" ], "summary": "List all schedules for the organization", + "description": "List every schedule in the organization, across all agents, filterable by active/paused status and a search term matched against agent title or schedule name. Returns a paginated list plus the total count.", "operationId": "schedules_list_all", "parameters": [ { @@ -5812,6 +6257,7 @@ "description": "Invalid tag key or value" } }, + "x-hidden": true, "x-fern-sdk-method-name": "apply_workflow_tags" }, "get": { @@ -5880,6 +6326,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "get_workflow_tags" } }, @@ -5964,6 +6411,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "delete_workflow_tag" } }, @@ -6085,6 +6533,7 @@ } } }, + "x-hidden": true, "x-fern-sdk-method-name": "get_workflow_tag_history" } }, @@ -6349,7 +6798,7 @@ "Runs" ], "summary": "Get all runs by agent", - "description": "List runs for a specific workflow.\n\nSupports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic.\n\n### search_key\n\nCase-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded.\n\n### error_code\n\nExact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`.", + "description": "List runs for a specific workflow.\n\nSupports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic.\n\n### search_key\n\nCase-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded.\n\n### error_code\n\nExact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`.\n\n### include_child_runs\n\nChild runs — runs this workflow started from inside another workflow run — are **excluded by default**, so the history shows only top-level runs. Pass `include_child_runs=true` to list them as well; every run carries a `parent_workflow_run_id` that is `null` for top-level runs.", "operationId": "get_workflow_runs_by_id_v1_workflows__workflow_id__runs_get", "parameters": [ { @@ -6494,6 +6943,46 @@ }, "description": "Only include runs created strictly before this UTC timestamp (ISO 8601)." }, + { + "name": "tags", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20 + }, + { + "type": "null" + } + ], + "description": "Filter by run tags. Each term is a label (`production`), a group (`env:*`), or a group:label (`env:prod`). Repeat the param or comma-separate (`?tags=env:prod,env:staging`). AND across distinct terms, OR within a group's labels (`?tags=customer:acme,env:prod,env:staging` -> customer=acme AND env in (prod, staging)). A label term matches the value across any/no group. Matches current tag values only.", + "examples": [ + "env:prod", + "production", + "env:*", + "customer:acme,env:prod" + ], + "title": "Tags" + }, + "description": "Filter by run tags. Each term is a label (`production`), a group (`env:*`), or a group:label (`env:prod`). Repeat the param or comma-separate (`?tags=env:prod,env:staging`). AND across distinct terms, OR within a group's labels (`?tags=customer:acme,env:prod,env:staging` -> customer=acme AND env in (prod, staging)). A label term matches the value across any/no group. Matches current tag values only." + }, + { + "name": "include_child_runs", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Include child workflow runs — runs started from inside another workflow run. Excluded by default so the history shows only top-level runs.", + "default": false, + "title": "Include Child Runs" + }, + "description": "Include child workflow runs — runs started from inside another workflow run. Excluded by default so the history shows only top-level runs." + }, { "name": "x-api-key", "in": "header", @@ -6548,6 +7037,7 @@ "Agents" ], "summary": "Get an agent by id", + "description": "Fetch a single agent definition by its permanent id, optionally pinned to a specific version. Returns the agent's blocks, parameters, and metadata.", "operationId": "get_workflow_v1_workflows__workflow_permanent_id__get", "parameters": [ { @@ -6777,6 +7267,7 @@ "Schedules" ], "summary": "Create a schedule for an agent", + "description": "Create a cron, fixed-interval or one-time schedule that runs the given agent automatically with a fixed set of parameters. An interval schedule first runs at first_fire_at, or one interval after creation. A one-time schedule runs once at run_at. Returns the stored schedule and its next upcoming run times.", "operationId": "schedules_create", "parameters": [ { @@ -6838,14 +7329,14 @@ } } } - }, - "description": "Create a cron, fixed-interval or one-time schedule that runs the given agent automatically with a fixed set of parameters. An interval schedule first runs at first_fire_at, or one interval after creation. A one-time schedule runs once at run_at. Returns the stored schedule and its next upcoming run times." + } }, "get": { "tags": [ "Schedules" ], "summary": "List schedules for an agent", + "description": "List all schedules attached to a single agent. Returns the schedules in creation order.", "operationId": "schedules_list", "parameters": [ { @@ -6906,6 +7397,7 @@ "Schedules" ], "summary": "Get an agent schedule by id", + "description": "Fetch one schedule belonging to an agent. Returns the schedule's cron expression or interval, timezone, parameters, enabled state, and next upcoming run times.", "operationId": "schedules_get", "parameters": [ { @@ -6966,14 +7458,14 @@ } } } - }, - "description": "Fetch one schedule belonging to an agent. Returns the schedule's cron expression or interval, timezone, parameters, enabled state, and next upcoming run times." + } }, "put": { "tags": [ "Schedules" ], "summary": "Update an agent schedule", + "description": "Replace a schedule's cron expression, interval or one-time run_at, timezone, run parameters, and enabled state. A one-time schedule stays one-time and can change only until it fires; afterwards this returns 409. Returns the updated schedule and its next upcoming run times.", "operationId": "schedules_update", "parameters": [ { @@ -7044,14 +7536,14 @@ } } } - }, - "description": "Replace a schedule's cron expression, interval or one-time run_at, timezone, run parameters, and enabled state. A one-time schedule stays one-time and can change only until it fires; afterwards this returns 409. Returns the updated schedule and its next upcoming run times." + } }, "delete": { "tags": [ "Schedules" ], "summary": "Delete an agent schedule", + "description": "Permanently delete a schedule so it never triggers again. Returns an acknowledgement flag.", "operationId": "schedules_delete", "parameters": [ { @@ -7115,144 +7607,6 @@ } } }, - "/v1/agents/{workflow_permanent_id}/schedules/{workflow_schedule_id}/enable": { - "post": { - "tags": [ - "Schedules" - ], - "summary": "Enable an agent schedule", - "operationId": "schedules_enable", - "parameters": [ - { - "name": "workflow_permanent_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Workflow Permanent Id" - } - }, - { - "name": "workflow_schedule_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Workflow Schedule Id" - } - }, - { - "name": "x-api-key", - "in": "header", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", - "title": "X-Api-Key" - }, - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WorkflowScheduleResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/v1/agents/{workflow_permanent_id}/schedules/{workflow_schedule_id}/disable": { - "post": { - "tags": [ - "Schedules" - ], - "summary": "Disable an agent schedule", - "operationId": "schedules_disable", - "parameters": [ - { - "name": "workflow_permanent_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Workflow Permanent Id" - } - }, - { - "name": "workflow_schedule_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Workflow Schedule Id" - } - }, - { - "name": "x-api-key", - "in": "header", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", - "title": "X-Api-Key" - }, - "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WorkflowScheduleResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, "/v1/agents/{workflow_permanent_id}/schedules/{workflow_schedule_id}/cancel": { "post": { "tags": [ @@ -7322,6 +7676,550 @@ } } } + }, + "/v1/agents/{workflow_permanent_id}/schedules/{workflow_schedule_id}/enable": { + "post": { + "tags": [ + "Schedules" + ], + "summary": "Enable an agent schedule", + "description": "Resume a paused schedule so it starts triggering runs again. Returns the updated schedule.", + "operationId": "schedules_enable", + "parameters": [ + { + "name": "workflow_permanent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Workflow Permanent Id" + } + }, + { + "name": "workflow_schedule_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Workflow Schedule Id" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowScheduleResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/agents/{workflow_permanent_id}/schedules/{workflow_schedule_id}/disable": { + "post": { + "tags": [ + "Schedules" + ], + "summary": "Disable an agent schedule", + "description": "Pause a schedule so it stops triggering runs, without deleting it. Returns the updated schedule.", + "operationId": "schedules_disable", + "parameters": [ + { + "name": "workflow_permanent_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Workflow Permanent Id" + } + }, + { + "name": "workflow_schedule_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Workflow Schedule Id" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.", + "title": "X-Api-Key" + }, + "description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowScheduleResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/recipes/jobs/extract": { + "post": { + "tags": [ + "Recipes" + ], + "summary": "Extract a job application posting", + "description": "Start a workflow run that extracts structured details from a job posting.", + "operationId": "extract_job_application_v1_recipes_jobs_extract_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "job_url": { + "type": "string", + "format": "uri", + "title": "Job Url" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "job_url" + ], + "title": "JobRecipeExtractRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successfully started job application extraction", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobRecipeRunResponse" + } + } + } + }, + "402": { + "description": "Insufficient credits or required billing state" + }, + "403": { + "description": "Unauthorized or insufficient organization permission" + }, + "422": { + "description": "Invalid extract request" + }, + "429": { + "description": "Workflow submission rate limit exceeded" + }, + "500": { + "description": "Workflow launch failed" + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "x-fern-sdk-method-name": "extract_job_application" + } + }, + "/v1/recipes/jobs/apply": { + "post": { + "tags": [ + "Recipes" + ], + "summary": "Apply to a job", + "description": "Start a workflow run that applies to a job with a résumé and optional credentials.", + "operationId": "apply_to_job_v1_recipes_jobs_apply_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "job_url": { + "type": "string", + "format": "uri", + "title": "Job Url" + }, + "custom_prompt": { + "type": "string", + "title": "Custom Prompt" + }, + "resume_url": { + "type": "string", + "format": "uri", + "title": "Resume Url" + }, + "other_information": { + "title": "Other Information" + }, + "terminate_criterion": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Terminate Criterion", + "description": "Condition that stops Apply. Omit to use the recipe default; null or empty text disables it.", + "default": "Terminate when the requested job posting explicitly states that it is expired, closed, filled, or no longer accepting applications. A missing Apply button, redirect, or HTTP 404 alone is insufficient." + }, + "error_code_mapping": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error Code Mapping", + "description": "Error codes and descriptions. Omit for the recipe default; null or {} disables mapping. A supplied mapping replaces the default independently of terminate_criterion.", + "default": { + "job_expired": "The requested job posting explicitly states that it is expired, closed, filled, or no longer accepting applications." + } + }, + "username": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Username" + }, + "password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Password" + }, + "persist_credentials": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Persist Credentials" + }, + "2fa_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "2Fa Identifier" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "job_url", + "custom_prompt", + "resume_url" + ], + "title": "JobRecipeApplyJSONRequest" + } + }, + "multipart/form-data": { + "schema": { + "properties": { + "job_url": { + "type": "string", + "format": "uri", + "title": "Job Url" + }, + "custom_prompt": { + "type": "string", + "title": "Custom Prompt" + }, + "resume_file": { + "type": "string", + "format": "binary", + "title": "Resume File" + }, + "other_information": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Other Information" + }, + "terminate_criterion": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Terminate Criterion", + "description": "Condition that stops Apply. Omit for the recipe default; empty text disables it.", + "default": "Terminate when the requested job posting explicitly states that it is expired, closed, filled, or no longer accepting applications. A missing Apply button, redirect, or HTTP 404 alone is insufficient." + }, + "error_code_mapping": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Error Code Mapping", + "description": "JSON text containing an object of error codes and descriptions. Omit for the recipe default; JSON null or {} disables mapping. A supplied mapping replaces the default independently of terminate_criterion.", + "default": "{\"job_expired\": \"The requested job posting explicitly states that it is expired, closed, filled, or no longer accepting applications.\"}" + }, + "username": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Username" + }, + "password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Password" + }, + "persist_credentials": { + "anyOf": [ + { + "type": "string", + "pattern": "^true$" + }, + { + "type": "null" + } + ], + "title": "Persist Credentials" + }, + "2fa_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "2Fa Identifier" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "job_url", + "custom_prompt", + "resume_file" + ], + "title": "JobRecipeApplyMultipartRequest", + "description": "OpenAPI representation of the text and file parts accepted by Apply." + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successfully started job application", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobRecipeRunResponse" + } + } + } + }, + "400": { + "description": "Invalid multipart structure" + }, + "402": { + "description": "Insufficient credits or required billing state" + }, + "403": { + "description": "Unauthorized or insufficient organization permission" + }, + "413": { + "description": "Résumé file exceeds the upload limit" + }, + "422": { + "description": "Invalid apply request" + }, + "429": { + "description": "Workflow submission rate limit exceeded" + }, + "500": { + "description": "Upload or workflow launch failed" + }, + "502": { + "description": "Credential service failed" + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "x-fern-sdk-method-name": "apply_to_job" + } + }, + "/v1/recipes/jobs/runs": { + "get": { + "tags": [ + "Recipes" + ], + "summary": "List job recipe runs", + "description": "List workflow runs started by job recipe requests.", + "operationId": "list_job_recipe_runs_v1_recipes_jobs_runs_get", + "security": [ + { + "ApiKeyAuth": [] + } + ], + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Page number.", + "default": 1, + "title": "Page" + }, + "description": "Page number." + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "description": "Number of runs per page.", + "default": 25, + "title": "Page Size" + }, + "description": "Number of runs per page." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobRecipeRunListResponse" + } + } + } + }, + "403": { + "description": "Unauthorized or insufficient organization permission" + }, + "422": { + "description": "Invalid pagination parameters" + } + }, + "x-fern-sdk-method-name": "list_job_recipe_runs" + } } }, "components": { @@ -7896,6 +8794,30 @@ "title": "Skip Auto Complete Tab", "default": false }, + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At" + }, + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At" + }, "created_at": { "anyOf": [ { @@ -8034,6 +8956,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -8378,6 +9305,17 @@ "title": "Max Retries", "default": 0 }, + "max_steps_per_run": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Steps Per Run" + }, "parameter_keys": { "anyOf": [ { @@ -8457,6 +9395,7 @@ "enum": [ "click", "input_text", + "paste_text", "upload_file", "download_file", "select_option", @@ -9159,6 +10098,17 @@ ], "title": "Bitwarden Item Id" }, + "totp_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Totp Identifier" + }, "created_at": { "type": "string", "format": "date-time", @@ -9262,6 +10212,17 @@ } ], "title": "Bitwarden Item Id" + }, + "totp_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Totp Identifier" } }, "type": "object", @@ -9458,6 +10419,7 @@ "goto_url", "pdf_parser", "http_request", + "web_search", "human_interaction", "print_page", "workflow_trigger", @@ -9465,12 +10427,26 @@ "google_sheets_write", "pdf_fill", "split_pdf", - "email_inbox" + "email_inbox", + "data_export", + "terminate" ], "title": "BlockType" }, "Body_upload_file_v1_upload_file_post": { "properties": { + "retention_days": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Retention Days", + "description": "Number of days to keep the file before it is deleted automatically. Omit to keep the file until the organization's data retention policy removes it." + }, "file": { "type": "string", "contentMediaType": "application/octet-stream", @@ -9735,6 +10711,29 @@ } ], "title": "Deleted At" + }, + "last_verified_login_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Last Verified Login At" + }, + "linked_credential_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Linked Credential Name" } }, "type": "object", @@ -9747,6 +10746,87 @@ ], "title": "BrowserProfile" }, + "BrowserProfileUsage": { + "properties": { + "workflows": { + "items": { + "$ref": "#/components/schemas/BrowserProfileUsageWorkflow" + }, + "type": "array", + "title": "Workflows", + "default": [] + }, + "credentials": { + "items": { + "$ref": "#/components/schemas/BrowserProfileUsageCredential" + }, + "type": "array", + "title": "Credentials", + "default": [] + }, + "recent_seeded_run_count": { + "type": "integer", + "title": "Recent Seeded Run Count", + "default": 0 + } + }, + "type": "object", + "title": "BrowserProfileUsage" + }, + "BrowserProfileUsageCredential": { + "properties": { + "credential_id": { + "type": "string", + "title": "Credential Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "credential_id", + "name" + ], + "title": "BrowserProfileUsageCredential" + }, + "BrowserProfileUsageWorkflow": { + "properties": { + "workflow_permanent_id": { + "type": "string", + "title": "Workflow Permanent Id" + }, + "title": { + "type": "string", + "title": "Title" + }, + "via": { + "type": "string", + "title": "Via" + } + }, + "type": "object", + "required": [ + "workflow_permanent_id", + "title", + "via" + ], + "title": "BrowserProfileUsageWorkflow" + }, + "BrowserSeedSource": { + "type": "string", + "enum": [ + "override", + "picked", + "own_memory", + "credential", + "fresh", + "degraded_fresh" + ], + "title": "BrowserSeedSource", + "description": "Which layer of the seed-precedence chain seeded a run's browser (provenance).\n\nResolved once at run setup, before any browser creation, for all run types (C-semantics).\n- override: explicit request browser_profile_id (one-run-only pick via API)\n- picked: the workflow's explicit profile pick (workflows.browser_profile_id) — \"always start here\"\n- own_memory: the workflow's own auto-profile (no pick + persist_browser_session)\n- credential: the run's selected credential's profile (rotation-aware; also the empty-own boot)\n- fresh: no seed profile\n- degraded_fresh: a resolved profile failed to load; ran fresh" + }, "BrowserSessionResponse": { "properties": { "browser_session_id": { @@ -9910,6 +10990,22 @@ "description": "Whether the browser session supports VNC streaming", "default": false }, + "stream_transport": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Stream Transport", + "description": "Live-view transport for this session: \"vnc\" or \"cdp\". Resolved on the single-session fetch only; null elsewhere.", + "examples": [ + "vnc", + "cdp" + ] + }, "download_path": { "anyOf": [ { @@ -9978,6 +11074,18 @@ "title": "Completed At", "description": "Timestamp when the session was completed" }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By", + "description": "ID of the user who created the session" + }, "created_at": { "type": "string", "format": "date-time", @@ -10002,6 +11110,18 @@ ], "title": "Deleted At", "description": "Timestamp when the session was deleted, if applicable" + }, + "warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Warning", + "description": "Advisory message about how the request was adjusted, if it was. Set when a requested timeout above the maximum was capped at creation, when an extension was granted less than it asked for, or when an extension was accepted but not yet confirmed; null otherwise." } }, "type": "object", @@ -10014,6 +11134,24 @@ "title": "BrowserSessionResponse", "description": "Response model for browser session information." }, + "BrowserTypeOption": { + "properties": { + "value": { + "type": "string", + "title": "Value" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "type": "object", + "required": [ + "value", + "label" + ], + "title": "BrowserTypeOption" + }, "BulkCancelRunsRequest": { "properties": { "run_ids": { @@ -10150,6 +11288,17 @@ } ], "title": "Single Option Click" + }, + "desired_state": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Desired State" } }, "type": "object", @@ -10277,6 +11426,20 @@ "title": "Parameters", "default": [] }, + "error_code_mapping": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error Code Mapping" + }, "prompt": { "anyOf": [ { @@ -10319,8 +11482,29 @@ "type": "null" } ], - "title": "Data Schema", - "description": "JSON schema of the object this block's return produces; keys match the return keys; null when the block returns nothing" + "title": "Data Schema" + }, + "user_owned_goal": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "User Owned Goal" + }, + "goal_needs_regeneration": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Goal Needs Regeneration" } }, "type": "object", @@ -10333,17 +11517,6 @@ }, "CodeBlockStep": { "properties": { - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Title" - }, "description": { "anyOf": [ { @@ -10387,17 +11560,6 @@ }, "CodeBlockStepYAML": { "properties": { - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Title" - }, "description": { "anyOf": [ { @@ -10496,6 +11658,20 @@ "type": "string", "title": "Code" }, + "error_code_mapping": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error Code Mapping" + }, "parameter_keys": { "anyOf": [ { @@ -10519,7 +11695,8 @@ "type": "null" } ], - "title": "Prompt" + "title": "Prompt", + "description": "Plain-language goal of this code block, shown as the block's Goal in the editor" }, "steps": { "anyOf": [ @@ -10533,7 +11710,8 @@ "type": "null" } ], - "title": "Steps" + "title": "Steps", + "description": "Plain-language step outline mapped to code line ranges; always rebuilt from the code on save, so any value sent is ignored" }, "data_schema": { "anyOf": [ @@ -10554,6 +11732,30 @@ ], "title": "Data Schema", "description": "JSON schema of the object this block's return produces; keys match the return keys; null when the block returns nothing" + }, + "user_owned_goal": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "User Owned Goal", + "description": "True when a person wrote this block's Goal, so copilot regenerations keep their text. Set by the editor or the workflow API; a value the copilot submits is ignored in favour of the stored one" + }, + "goal_needs_regeneration": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Goal Needs Regeneration", + "description": "True when a person edited the Goal and the code has not been rebuilt from it yet. Set by the editor or the workflow API; a value the copilot submits is ignored in favour of the stored one" } }, "type": "object", @@ -11024,6 +12226,12 @@ "title": "Generate Browser Profile", "description": "When true, the session's browser profile (cookies, localStorage, etc.) is saved to storage when the session ends so it can be turned into a reusable browser profile. Defaults to false to avoid storing profiles for sessions that never need them. Sessions started with a browser_profile_id always persist their profile regardless of this flag.", "default": false + }, + "needs_live_view": { + "type": "boolean", + "title": "Needs Live View", + "description": "Whether a person will watch this session's browser live. Defaults to false, which suits unattended automation; the Skyvern app sets it because a session opened in the UI is watched. It requests a capability, not a particular browser, and cannot be used to select where the session runs.", + "default": false } }, "type": "object", @@ -11117,6 +12325,42 @@ "title": "Rotate Proxy Session Id", "description": "Rotate the Skyvern-managed proxy sticky-session id when updating this credential.", "default": false + }, + "browser_profile_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Profile Id", + "description": "Optional plain browser profile to link as this credential's saved profile. Must be an unmanaged profile in your organization that no other credential already owns." + }, + "auto_profile_disabled": { + "type": "boolean", + "title": "Auto Profile Disabled", + "description": "Disable automatic saving and reuse of this credential's browser profile.", + "default": false + }, + "pin_saved_session_ip": { + "type": "boolean", + "title": "Pin Saved Session Ip", + "description": "Keep the same IP across sign-ins that reuse this credential's saved profile.", + "default": false + }, + "tested_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tested Url", + "description": "Login page URL used during the credential test" } }, "type": "object", @@ -11307,6 +12551,31 @@ ], "title": "Selection Strategy" }, + "fallback_credential_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Fallback Credential Ids" + }, + "fallback_trigger": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Fallback Trigger" + }, "created_at": { "type": "string", "format": "date-time", @@ -11392,6 +12661,31 @@ } ], "title": "Selection Strategy" + }, + "fallback_credential_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Fallback Credential Ids" + }, + "fallback_trigger": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Fallback Trigger" } }, "type": "object", @@ -11461,6 +12755,24 @@ "title": "Browser Profile Id", "description": "Browser profile ID linked to this credential" }, + "auto_profile_disabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Auto Profile Disabled", + "description": "Whether automatic saving and reuse of this credential's browser profile is disabled." + }, + "pin_saved_session_ip": { + "type": "boolean", + "title": "Pin Saved Session Ip", + "description": "Whether sign-ins reusing this credential's saved profile keep the same IP", + "default": false + }, "tested_url": { "anyOf": [ { @@ -11497,6 +12809,11 @@ "title": "Save Browser Session Intent", "description": "Whether the user intends to save a browser session, regardless of test outcome" }, + "run_sequentially": { + "type": "boolean", + "title": "Run Sequentially", + "default": false + }, "folder_id": { "anyOf": [ { @@ -11542,6 +12859,18 @@ ], "title": "Proxy Session Id", "description": "Opaque Skyvern-managed proxy sticky-session id." + }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By", + "description": "ID of the user who created the credential" } }, "type": "object", @@ -11866,6 +13195,11 @@ } ], "title": "Reasoning Effort" + }, + "extra_parameters": { + "additionalProperties": true, + "type": "object", + "title": "Extra Parameters" } }, "type": "object", @@ -11909,7 +13243,8 @@ "enum": [ "openai_compatible", "ollama", - "openrouter" + "openrouter", + "gemini" ], "title": "CustomLLMProvider" }, @@ -11937,6 +13272,249 @@ ], "title": "CustomLLMUpdateRequest" }, + "DataExportBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Block Label", + "description": "Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted." + }, + "block_type": { + "type": "string", + "const": "data_export", + "title": "Block Type", + "default": "data_export" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "ignore_workflow_system_prompt": { + "type": "boolean", + "title": "Ignore Workflow System Prompt", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "data": { + "type": "string", + "title": "Data" + }, + "data_schema": { + "additionalProperties": true, + "type": "object", + "title": "Data Schema" + }, + "file_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "File Name" + }, + "parameters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/WorkflowParameter" + }, + { + "$ref": "#/components/schemas/ContextParameter" + }, + { + "$ref": "#/components/schemas/AWSSecretParameter" + }, + { + "$ref": "#/components/schemas/AzureSecretParameter" + }, + { + "$ref": "#/components/schemas/BitwardenLoginCredentialParameter" + }, + { + "$ref": "#/components/schemas/BitwardenSensitiveInformationParameter" + }, + { + "$ref": "#/components/schemas/BitwardenCreditCardDataParameter" + }, + { + "$ref": "#/components/schemas/OnePasswordCredentialParameter" + }, + { + "$ref": "#/components/schemas/AzureVaultCredentialParameter" + }, + { + "$ref": "#/components/schemas/OutputParameter" + }, + { + "$ref": "#/components/schemas/CredentialParameter" + } + ], + "discriminator": { + "propertyName": "parameter_type", + "mapping": { + "aws_secret": "#/components/schemas/AWSSecretParameter", + "azure_secret": "#/components/schemas/AzureSecretParameter", + "azure_vault_credential": "#/components/schemas/AzureVaultCredentialParameter", + "bitwarden_credit_card_data": "#/components/schemas/BitwardenCreditCardDataParameter", + "bitwarden_login_credential": "#/components/schemas/BitwardenLoginCredentialParameter", + "bitwarden_sensitive_information": "#/components/schemas/BitwardenSensitiveInformationParameter", + "context": "#/components/schemas/ContextParameter", + "credential": "#/components/schemas/CredentialParameter", + "onepassword": "#/components/schemas/OnePasswordCredentialParameter", + "output": "#/components/schemas/OutputParameter", + "workflow": "#/components/schemas/WorkflowParameter" + } + } + }, + "type": "array", + "title": "Parameters", + "default": [] + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "data", + "data_schema" + ], + "title": "DataExportBlock" + }, + "DataExportBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "const": "data_export", + "title": "Block Type", + "default": "data_export" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Block Label", + "description": "Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]." + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "ignore_workflow_system_prompt": { + "type": "boolean", + "title": "Ignore Workflow System Prompt", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "data": { + "type": "string", + "title": "Data" + }, + "data_schema": { + "additionalProperties": true, + "type": "object", + "title": "Data Schema" + }, + "file_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "File Name" + }, + "parameter_keys": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Parameter Keys" + } + }, + "type": "object", + "required": [ + "label", + "data", + "data_schema" + ], + "title": "DataExportBlockYAML" + }, "DeleteScheduleResponse": { "properties": { "ok": { @@ -12064,6 +13642,12 @@ "title": "Browser Profile Id", "description": "ID of a browser profile to reuse for this run" }, + "start_fresh_browser": { + "type": "boolean", + "title": "Start Fresh Browser", + "description": "When true, start this run from a fresh, empty browser and ignore any saved browser memory — no memory is read or written. A verified sign-in during the run still updates the credential's saved login.", + "default": false + }, "browser_address": { "anyOf": [ { @@ -12307,6 +13891,14 @@ ], "title": "DownloadToS3BlockYAML" }, + "EmailBodyFormat": { + "type": "string", + "enum": [ + "text", + "html" + ], + "title": "EmailBodyFormat" + }, "EmailInboxBlock": { "properties": { "label": { @@ -12680,7 +14272,7 @@ "properties": { "additional_minutes": { "type": "integer", - "minimum": 1.0, + "minimum": 1, "title": "Additional Minutes", "description": "Minutes to add to the session's current deadline. A session can be extended, one or more times, up to a total lifetime of 360 minutes (6 hours) counted from when it started; a request for more than the remaining headroom is granted the remainder and the response carries a warning." } @@ -12877,6 +14469,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -13073,6 +14670,45 @@ "type": "boolean", "title": "Include Extracted Text", "default": false + }, + "export_enabled": { + "type": "boolean", + "title": "Export Enabled", + "default": false + }, + "export_data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Export Data Schema" + }, + "export_file_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Export File Name" + }, + "export_records": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Export Records" } }, "type": "object", @@ -13212,6 +14848,45 @@ "type": "boolean", "title": "Disable Cache", "default": false + }, + "export_enabled": { + "type": "boolean", + "title": "Export Enabled", + "default": false + }, + "export_data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Export Data Schema" + }, + "export_file_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Export File Name" + }, + "export_records": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Export Records" } }, "type": "object", @@ -13281,6 +14956,233 @@ "title": "Next Loop On Failure", "default": false }, + "s3_bucket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "S3 Bucket" + }, + "aws_access_key_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aws Access Key Id" + }, + "aws_secret_access_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aws Secret Access Key" + }, + "region_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Region Name" + }, + "endpoint_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Endpoint Url" + }, + "azure_storage_account_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Azure Storage Account Name" + }, + "azure_storage_account_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Azure Storage Account Key" + }, + "azure_blob_container_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Azure Blob Container Name" + }, + "google_credential_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Google Credential Id" + }, + "google_drive_folder_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Google Drive Folder Id" + }, + "sftp_host": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Host" + }, + "sftp_port": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Sftp Port" + }, + "sftp_username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Username" + }, + "sftp_password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Password" + }, + "sftp_private_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Private Key" + }, + "sftp_private_key_passphrase": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Private Key Passphrase" + }, + "sftp_remote_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Remote Path" + }, + "sftp_host_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Host Key" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt", + "description": "Optional natural-language control over which downloaded files are uploaded; empty means upload all." + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Path" + }, + "continue_on_empty": { + "type": "boolean", + "title": "Continue On Empty", + "description": "When the run download directory has no files, allow the empty upload only after confirming no registered, browser-session, or alternate candidate downloads exist (False, default). Set True to always allow an empty upload.", + "default": false + }, "task_type": { "type": "string", "title": "Task Type", @@ -13317,6 +15219,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -13520,6 +15427,10 @@ "type": "boolean", "title": "Include Extracted Text", "default": true + }, + "download_target": { + "$ref": "#/components/schemas/FileDownloadTarget", + "default": "website" } }, "type": "object", @@ -13581,6 +15492,235 @@ "title": "Next Loop On Failure", "default": false }, + "download_target": { + "$ref": "#/components/schemas/FileDownloadTarget", + "default": "website" + }, + "s3_bucket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "S3 Bucket" + }, + "aws_access_key_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aws Access Key Id" + }, + "aws_secret_access_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aws Secret Access Key" + }, + "region_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Region Name" + }, + "endpoint_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Endpoint Url" + }, + "azure_storage_account_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Azure Storage Account Name" + }, + "azure_storage_account_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Azure Storage Account Key" + }, + "azure_blob_container_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Azure Blob Container Name" + }, + "google_credential_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Google Credential Id" + }, + "google_drive_folder_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Google Drive Folder Id" + }, + "sftp_host": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Host" + }, + "sftp_port": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Sftp Port" + }, + "sftp_username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Username" + }, + "sftp_password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Password" + }, + "sftp_private_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Private Key" + }, + "sftp_private_key_passphrase": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Private Key Passphrase" + }, + "sftp_remote_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Remote Path" + }, + "sftp_host_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sftp Host Key" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Path" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt" + }, + "continue_on_empty": { + "type": "boolean", + "title": "Continue On Empty", + "default": false + }, "navigation_goal": { "type": "string", "title": "Navigation Goal" @@ -13706,6 +15846,17 @@ ], "title": "FileDownloadBlockYAML" }, + "FileDownloadTarget": { + "type": "string", + "enum": [ + "website", + "s3", + "azure", + "google_drive", + "sftp" + ], + "title": "FileDownloadTarget" + }, "FileEncoding": { "type": "string", "enum": [ @@ -13943,6 +16094,17 @@ } ], "title": "Json Schema" + }, + "worksheet": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Worksheet" } }, "type": "object", @@ -14024,6 +16186,17 @@ } ], "title": "Json Schema" + }, + "worksheet": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Worksheet" } }, "type": "object", @@ -14116,10 +16289,6 @@ "title": "Next Loop On Failure", "default": false }, - "storage_type": { - "$ref": "#/components/schemas/FileStorageType", - "default": "s3" - }, "s3_bucket": { "anyOf": [ { @@ -14164,6 +16333,17 @@ ], "title": "Region Name" }, + "endpoint_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Endpoint Url" + }, "azure_storage_account_name": { "anyOf": [ { @@ -14335,6 +16515,10 @@ "title": "Continue On Empty", "description": "When the run download directory has no files, allow the empty upload only after confirming no registered, browser-session, or alternate candidate downloads exist (False, default). Set True to always allow an empty upload.", "default": false + }, + "storage_type": { + "$ref": "#/components/schemas/FileStorageType", + "default": "s3" } }, "type": "object", @@ -14444,6 +16628,17 @@ ], "title": "Region Name" }, + "endpoint_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Endpoint Url" + }, "azure_storage_account_name": { "anyOf": [ { @@ -14879,6 +17074,9 @@ { "$ref": "#/components/schemas/HttpRequestBlock" }, + { + "$ref": "#/components/schemas/WebSearchBlock" + }, { "$ref": "#/components/schemas/PrintPageBlock" }, @@ -14899,6 +17097,12 @@ }, { "$ref": "#/components/schemas/SplitPdfBlock" + }, + { + "$ref": "#/components/schemas/DataExportBlock" + }, + { + "$ref": "#/components/schemas/TerminateBlock" } ], "discriminator": { @@ -14907,6 +17111,7 @@ "action": "#/components/schemas/ActionBlock", "code": "#/components/schemas/CodeBlock", "conditional": "#/components/schemas/ConditionalBlock", + "data_export": "#/components/schemas/DataExportBlock", "download_to_s3": "#/components/schemas/DownloadToS3Block", "email_inbox": "#/components/schemas/EmailInboxBlock", "extraction": "#/components/schemas/ExtractionBlock", @@ -14928,10 +17133,12 @@ "split_pdf": "#/components/schemas/SplitPdfBlock", "task": "#/components/schemas/TaskBlock", "task_v2": "#/components/schemas/TaskV2Block", + "terminate": "#/components/schemas/TerminateBlock", "text_prompt": "#/components/schemas/TextPromptBlock", "upload_to_s3": "#/components/schemas/UploadToS3Block", "validation": "#/components/schemas/ValidationBlock", "wait": "#/components/schemas/WaitBlock", + "web_search": "#/components/schemas/WebSearchBlock", "while_loop": "#/components/schemas/WhileLoopBlock", "workflow_trigger": "#/components/schemas/WorkflowTriggerBlock" } @@ -15150,6 +17357,12 @@ { "$ref": "#/components/schemas/FileDownloadBlockYAML" }, + { + "$ref": "#/components/schemas/DataExportBlockYAML" + }, + { + "$ref": "#/components/schemas/TerminateBlockYAML" + }, { "$ref": "#/components/schemas/UrlBlockYAML" }, @@ -15162,6 +17375,9 @@ { "$ref": "#/components/schemas/HttpRequestBlockYAML" }, + { + "$ref": "#/components/schemas/WebSearchBlockYAML" + }, { "$ref": "#/components/schemas/ConditionalBlockYAML" }, @@ -15287,6 +17503,12 @@ "London", "Berlin" ] + }, + "isISP": { + "type": "boolean", + "title": "Isisp", + "description": "Whether this geo target is marked as an ISP proxy location.", + "default": false } }, "type": "object", @@ -16422,6 +18644,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -16668,6 +18895,10 @@ "type": "string", "title": "Body", "default": "Your interaction is required for a workflow run!" + }, + "body_format": { + "$ref": "#/components/schemas/EmailBodyFormat", + "default": "text" } }, "type": "object", @@ -16771,6 +19002,10 @@ "type": "string", "title": "Body", "default": "Your interaction is required for a workflow run!" + }, + "body_format": { + "$ref": "#/components/schemas/EmailBodyFormat", + "default": "text" } }, "type": "object", @@ -16996,6 +19231,117 @@ "title": "JinjaBranchCriteria", "description": "Jinja2-templated branch criteria (only supported criteria type for now)." }, + "JobRecipeRunListResponse": { + "properties": { + "runs": { + "items": { + "$ref": "#/components/schemas/JobRecipeRunSummary" + }, + "type": "array", + "title": "Runs" + }, + "page": { + "type": "integer", + "title": "Page" + }, + "page_size": { + "type": "integer", + "title": "Page Size" + }, + "has_next": { + "type": "boolean", + "title": "Has Next" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "runs", + "page", + "page_size", + "has_next" + ], + "title": "JobRecipeRunListResponse" + }, + "JobRecipeRunResponse": { + "properties": { + "workflow_run_id": { + "type": "string", + "pattern": "^wr_", + "title": "Workflow Run Id" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "workflow_run_id" + ], + "title": "JobRecipeRunResponse" + }, + "JobRecipeRunSummary": { + "properties": { + "workflow_run_id": { + "type": "string", + "pattern": "^wr_", + "title": "Workflow Run Id" + }, + "workflow_permanent_id": { + "type": "string", + "title": "Workflow Permanent Id" + }, + "recipe": { + "type": "string", + "enum": [ + "apply", + "extract" + ], + "title": "Recipe" + }, + "status": { + "type": "string", + "title": "Status" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "job_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Job Url" + }, + "failure_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Failure Reason" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "workflow_run_id", + "workflow_permanent_id", + "recipe", + "status", + "created_at", + "job_url", + "failure_reason" + ], + "title": "JobRecipeRunSummary" + }, "LocateElementAction": { "properties": { "type": { @@ -17111,6 +19457,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -17509,6 +19860,11 @@ "title": "Complete Verification", "default": true }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, "skip_saved_profile": { "type": "boolean", "title": "Skip Saved Profile", @@ -17609,6 +19965,12 @@ "title": "Browser Profile Id", "description": "ID of a browser profile to reuse for this run" }, + "start_fresh_browser": { + "type": "boolean", + "title": "Start Fresh Browser", + "description": "When true, start this run from a fresh, empty browser and ignore any saved browser memory — no memory is read or written. A verified sign-in during the run still updates the credential's saved login.", + "default": false + }, "browser_address": { "anyOf": [ { @@ -17746,6 +20108,18 @@ "title": "Onepassword Item Id", "description": "1Password item ID" }, + "onepassword_totp_field_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Onepassword Totp Field Name", + "description": "1Password item field id or label to treat as the TOTP secret, overriding 1Password's own field-type detection" + }, "azure_vault_name": { "anyOf": [ { @@ -17897,6 +20271,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -18277,6 +20656,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -18429,9 +20813,9 @@ "properties": { "password": { "type": "string", - "minLength": 1, "title": "Password", - "description": "The password value (must not be empty)", + "description": "The password value; may be empty or omitted for logins that have no password", + "default": "", "examples": [ "securepassword123" ] @@ -18483,15 +20867,29 @@ "user@example.com", "+14155550123" ] + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata", + "description": "Optional additional password credential metadata fields" } }, "type": "object", "required": [ - "password", "username" ], "title": "NonEmptyPasswordCredential", - "description": "Password credential model that requires non-empty values." + "description": "Password credential model for API writes: non-empty username, optionally empty password." }, "OTPType": { "type": "string", @@ -18540,6 +20938,28 @@ "type": "string", "title": "Item Id" }, + "totp_field_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Totp Field Name" + }, + "totp_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Totp Identifier" + }, "created_at": { "type": "string", "format": "date-time", @@ -18605,6 +21025,28 @@ "item_id": { "type": "string", "title": "Item Id" + }, + "totp_field_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Totp Field Name" + }, + "totp_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Totp Identifier" } }, "type": "object", @@ -18615,6 +21057,16 @@ ], "title": "OnePasswordCredentialParameterYAML" }, + "OneTimeDispatchStatus": { + "type": "string", + "enum": [ + "pending", + "fired", + "canceled", + "failed" + ], + "title": "OneTimeDispatchStatus" + }, "OrganizationScheduleItem": { "properties": { "workflow_schedule_id": { @@ -19109,6 +21561,12 @@ "user@example.com", "+14155550123" ] + }, + "has_totp": { + "type": "boolean", + "title": "Has Totp", + "description": "Whether the stored password credential includes a non-empty TOTP seed. Legacy rows with an unknown value report false until the credential is updated.", + "default": false } }, "type": "object", @@ -19969,6 +22427,40 @@ ], "title": "RunTagHistoryResponse" }, + "RunTagSuggestionsResponse": { + "properties": { + "keys": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Keys", + "description": "Distinct grouped tag keys seen on runs." + }, + "values_by_key": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object", + "title": "Values By Key", + "description": "Values seen for each grouped key." + }, + "labels": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Labels", + "description": "Distinct standalone (keyless) labels seen on runs." + } + }, + "type": "object", + "title": "RunTagSuggestionsResponse", + "description": "Response for ``GET /v1/run-tag-suggestions``: distinct (key, value) pairs\never set on a run for the org, sourced from the event log rather than the\ntag-key/tag-value registry so reserved ``skyvern.*`` system keys (never\nregistered) reach the pickers too." + }, "RunTagsBatchRequest": { "properties": { "workflow_run_ids": { @@ -20539,6 +23031,10 @@ "type": "string", "title": "Body" }, + "body_format": { + "$ref": "#/components/schemas/EmailBodyFormat", + "default": "text" + }, "file_attachments": { "items": { "type": "string" @@ -20546,6 +23042,52 @@ "type": "array", "title": "File Attachments", "default": [] + }, + "custom_smtp_host": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Host" + }, + "custom_smtp_port": { + "anyOf": [ + { + "type": "integer", + "maximum": 65535, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Port" + }, + "custom_smtp_username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Username" + }, + "custom_smtp_password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Password" } }, "type": "object", @@ -20659,6 +23201,52 @@ ], "title": "Smtp Password Secret Parameter Key" }, + "custom_smtp_host": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Host" + }, + "custom_smtp_port": { + "anyOf": [ + { + "type": "integer", + "maximum": 65535, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Port" + }, + "custom_smtp_username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Username" + }, + "custom_smtp_password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Smtp Password" + }, "sender": { "type": "string", "title": "Sender" @@ -20678,6 +23266,10 @@ "type": "string", "title": "Body" }, + "body_format": { + "$ref": "#/components/schemas/EmailBodyFormat", + "default": "text" + }, "file_attachments": { "anyOf": [ { @@ -21593,6 +24185,39 @@ "title": "TagValue", "description": "Tag-value color registry entry: the palette color assigned to a grouped\n(key, value) pair." }, + "TagValueCreate": { + "properties": { + "key": { + "type": "string", + "title": "Key", + "description": "Tag key (group) for the new label." + }, + "value": { + "type": "string", + "title": "Value", + "description": "Tag value (label) to register under the key." + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Color", + "description": "Palette color name for the label; a random palette color when omitted." + } + }, + "type": "object", + "required": [ + "key", + "value" + ], + "title": "TagValueCreate", + "description": "Body for ``POST /v1/tag-values``: register a grouped label before any\nworkflow uses it. The label shows a zero workflow count until applied." + }, "TagValueDelete": { "properties": { "value": { @@ -21831,6 +24456,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -22370,6 +25000,18 @@ "type": "null" } ] + }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By", + "description": "ID of the user who started the run" } }, "type": "object", @@ -22571,6 +25213,24 @@ "pbs_123" ] }, + "browser_profile_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Profile Id", + "description": "ID of a browser profile to reuse for this task" + }, + "start_fresh_browser": { + "type": "boolean", + "title": "Start Fresh Browser", + "description": "When true, start this run from a fresh, empty browser and ignore any saved browser memory — no memory is read or written. A verified sign-in during the run still updates the credential's saved login.", + "default": false + }, "model": { "anyOf": [ { @@ -22677,6 +25337,27 @@ "agent", "code" ] + }, + "file_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array", + "maxItems": 50 + }, + { + "type": "null" + } + ], + "title": "File Ids", + "description": "\nIds of files uploaded through `POST /v1/upload_file` to attach to this run. Skyvern deletes an attached file as soon as the run finishes, so there is nothing to clean up afterwards. Reference an attached file by its id anywhere a file URL is accepted (for example in `parameters` or in the prompt) and no presigned URL is ever created for it. A file can be attached to one run at a time, and must not already be deleted.\n", + "examples": [ + [ + "file_123456789" + ] + ] } }, "type": "object", @@ -22873,6 +25554,24 @@ "pbs_123" ] }, + "browser_profile_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Profile Id", + "description": "ID of a browser profile to reuse for this task" + }, + "start_fresh_browser": { + "type": "boolean", + "title": "Start Fresh Browser", + "description": "When true, start this run from a fresh, empty browser and ignore any saved browser memory — no memory is read or written. A verified sign-in during the run still updates the credential's saved login.", + "default": false + }, "model": { "anyOf": [ { @@ -22979,6 +25678,27 @@ "agent", "code" ] + }, + "file_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array", + "maxItems": 50 + }, + { + "type": "null" + } + ], + "title": "File Ids", + "description": "\nIds of files uploaded through `POST /v1/upload_file` to attach to this run. Skyvern deletes an attached file as soon as the run finishes, so there is nothing to clean up afterwards. Reference an attached file by its id anywhere a file URL is accepted (for example in `parameters` or in the prompt) and no presigned URL is ever created for it. A file can be attached to one run at a time, and must not already be deleted.\n", + "examples": [ + [ + "file_123456789" + ] + ] } }, "type": "object", @@ -23006,6 +25726,7 @@ "created", "queued", "running", + "paused", "timed_out", "failed", "terminated", @@ -23511,6 +26232,215 @@ ], "title": "TaskV2BlockYAML" }, + "TelInputOutcome": { + "properties": { + "flag_enabled": { + "type": "boolean", + "title": "Flag Enabled" + }, + "final_element_id": { + "type": "string", + "title": "Final Element Id" + }, + "strategy": { + "$ref": "#/components/schemas/TelInputStrategy" + }, + "expected_digit_count": { + "type": "integer", + "title": "Expected Digit Count" + }, + "actual_digit_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Actual Digit Count" + }, + "browser_valid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Browser Valid" + }, + "attempt_count": { + "type": "integer", + "title": "Attempt Count" + }, + "retargeted": { + "type": "boolean", + "title": "Retargeted" + } + }, + "type": "object", + "required": [ + "flag_enabled", + "final_element_id", + "strategy", + "expected_digit_count", + "attempt_count", + "retargeted" + ], + "title": "TelInputOutcome" + }, + "TelInputStrategy": { + "type": "string", + "enum": [ + "legacy_sequential", + "formatted_sequential", + "sequential_national", + "atomic_national", + "atomic_e164" + ], + "title": "TelInputStrategy" + }, + "TerminateBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Block Label", + "description": "Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted." + }, + "block_type": { + "type": "string", + "const": "terminate", + "title": "Block Type", + "default": "terminate" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "ignore_workflow_system_prompt": { + "type": "boolean", + "title": "Ignore Workflow System Prompt", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "reason": { + "type": "string", + "title": "Reason" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "reason" + ], + "title": "TerminateBlock" + }, + "TerminateBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "const": "terminate", + "title": "Block Type", + "default": "terminate" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Block Label", + "description": "Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]." + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "ignore_workflow_system_prompt": { + "type": "boolean", + "title": "Ignore Workflow System Prompt", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "reason": { + "type": "string", + "minLength": 1, + "title": "Reason", + "description": "Why the run ends here; supports Jinja templating." + } + }, + "type": "object", + "required": [ + "label", + "reason" + ], + "title": "TerminateBlockYAML" + }, "TextPromptBlock": { "properties": { "label": { @@ -24208,6 +27138,31 @@ "type": "string", "title": "Presigned Url", "description": "Presigned URL to access the uploaded file" + }, + "file_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "File Id", + "description": "Identifier for this upload. Pass it to DELETE /v1/files/{file_id} to delete the file." + }, + "expires_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Expires At", + "description": "When the file will be deleted, if a retention_days was supplied. Null means the file has no expiry of its own and follows the organization's data retention policy." } }, "type": "object", @@ -24455,6 +27410,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -24893,6 +27853,11 @@ ], "title": "Complete Criterion" }, + "complete_criterion_is_untrusted": { + "type": "boolean", + "title": "Complete Criterion Is Untrusted", + "default": false + }, "terminate_criterion": { "anyOf": [ { @@ -25162,6 +28127,10 @@ "title": "Next Loop On Failure", "default": false }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, "complete_criterion": { "anyOf": [ { @@ -25198,6 +28167,17 @@ ], "title": "Error Code Mapping" }, + "max_steps_per_run": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Steps Per Run" + }, "parameter_keys": { "anyOf": [ { @@ -25464,6 +28444,385 @@ ], "title": "WaitBlockYAML" }, + "WebSearchBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Block Label", + "description": "Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted." + }, + "block_type": { + "type": "string", + "const": "web_search", + "title": "Block Type", + "default": "web_search" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "ignore_workflow_system_prompt": { + "type": "boolean", + "title": "Ignore Workflow System Prompt", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "query": { + "type": "string", + "minLength": 1, + "title": "Query" + }, + "provider": { + "type": "string", + "enum": [ + "auto", + "google", + "exa" + ], + "title": "Provider", + "default": "auto" + }, + "num_results": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "title": "Num Results", + "default": 10 + }, + "no_results_error_code": { + "anyOf": [ + { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "No Results Error Code", + "description": "Deprecated. Use error_code_mapping.", + "deprecated": true + }, + "no_match_error_code": { + "anyOf": [ + { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "No Match Error Code", + "description": "Deprecated. Use error_code_mapping.", + "deprecated": true + }, + "error_code_mapping": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error Code Mapping" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt" + }, + "json_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Json Schema" + }, + "parameters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/WorkflowParameter" + }, + { + "$ref": "#/components/schemas/ContextParameter" + }, + { + "$ref": "#/components/schemas/AWSSecretParameter" + }, + { + "$ref": "#/components/schemas/AzureSecretParameter" + }, + { + "$ref": "#/components/schemas/BitwardenLoginCredentialParameter" + }, + { + "$ref": "#/components/schemas/BitwardenSensitiveInformationParameter" + }, + { + "$ref": "#/components/schemas/BitwardenCreditCardDataParameter" + }, + { + "$ref": "#/components/schemas/OnePasswordCredentialParameter" + }, + { + "$ref": "#/components/schemas/AzureVaultCredentialParameter" + }, + { + "$ref": "#/components/schemas/OutputParameter" + }, + { + "$ref": "#/components/schemas/CredentialParameter" + } + ], + "discriminator": { + "propertyName": "parameter_type", + "mapping": { + "aws_secret": "#/components/schemas/AWSSecretParameter", + "azure_secret": "#/components/schemas/AzureSecretParameter", + "azure_vault_credential": "#/components/schemas/AzureVaultCredentialParameter", + "bitwarden_credit_card_data": "#/components/schemas/BitwardenCreditCardDataParameter", + "bitwarden_login_credential": "#/components/schemas/BitwardenLoginCredentialParameter", + "bitwarden_sensitive_information": "#/components/schemas/BitwardenSensitiveInformationParameter", + "context": "#/components/schemas/ContextParameter", + "credential": "#/components/schemas/CredentialParameter", + "onepassword": "#/components/schemas/OnePasswordCredentialParameter", + "output": "#/components/schemas/OutputParameter", + "workflow": "#/components/schemas/WorkflowParameter" + } + } + }, + "type": "array", + "title": "Parameters", + "default": [] + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "query" + ], + "title": "WebSearchBlock" + }, + "WebSearchBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "const": "web_search", + "title": "Block Type", + "default": "web_search" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Block Label", + "description": "Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]." + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "ignore_workflow_system_prompt": { + "type": "boolean", + "title": "Ignore Workflow System Prompt", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "query": { + "type": "string", + "minLength": 1, + "title": "Query" + }, + "provider": { + "type": "string", + "enum": [ + "auto", + "google", + "exa" + ], + "title": "Provider", + "default": "auto" + }, + "num_results": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "title": "Num Results", + "default": 10 + }, + "no_results_error_code": { + "anyOf": [ + { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "No Results Error Code", + "description": "Deprecated. Use error_code_mapping.", + "deprecated": true + }, + "no_match_error_code": { + "anyOf": [ + { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "No Match Error Code", + "description": "Deprecated. Use error_code_mapping.", + "deprecated": true + }, + "error_code_mapping": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error Code Mapping" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prompt" + }, + "json_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Json Schema" + }, + "parameter_keys": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Parameter Keys" + } + }, + "type": "object", + "required": [ + "label", + "query" + ], + "title": "WebSearchBlockYAML" + }, "WhileLoopBlock": { "properties": { "label": { @@ -25596,6 +28955,9 @@ { "$ref": "#/components/schemas/HttpRequestBlock" }, + { + "$ref": "#/components/schemas/WebSearchBlock" + }, { "$ref": "#/components/schemas/PrintPageBlock" }, @@ -25616,6 +28978,12 @@ }, { "$ref": "#/components/schemas/SplitPdfBlock" + }, + { + "$ref": "#/components/schemas/DataExportBlock" + }, + { + "$ref": "#/components/schemas/TerminateBlock" } ], "discriminator": { @@ -25624,6 +28992,7 @@ "action": "#/components/schemas/ActionBlock", "code": "#/components/schemas/CodeBlock", "conditional": "#/components/schemas/ConditionalBlock", + "data_export": "#/components/schemas/DataExportBlock", "download_to_s3": "#/components/schemas/DownloadToS3Block", "email_inbox": "#/components/schemas/EmailInboxBlock", "extraction": "#/components/schemas/ExtractionBlock", @@ -25645,10 +29014,12 @@ "split_pdf": "#/components/schemas/SplitPdfBlock", "task": "#/components/schemas/TaskBlock", "task_v2": "#/components/schemas/TaskV2Block", + "terminate": "#/components/schemas/TerminateBlock", "text_prompt": "#/components/schemas/TextPromptBlock", "upload_to_s3": "#/components/schemas/UploadToS3Block", "validation": "#/components/schemas/ValidationBlock", "wait": "#/components/schemas/WaitBlock", + "web_search": "#/components/schemas/WebSearchBlock", "while_loop": "#/components/schemas/WhileLoopBlock", "workflow_trigger": "#/components/schemas/WorkflowTriggerBlock" } @@ -25684,7 +29055,7 @@ "condition" ], "title": "WhileLoopBlock", - "description": "Loop block driven by a runtime condition. Iterates while ``condition`` evaluates truthy.\n\nTop-of-loop semantics: the condition is evaluated *before* each iteration (including the\nfirst). If the condition is false on the first check, the body never runs and the block\nreturns success with an empty output list.\n\nSafety: the loop is capped at ``DEFAULT_MAX_LOOP_ITERATIONS`` (500). Reaching the cap is\ntreated as a failure so that a misbehaving condition can never spin forever." + "description": "Loop block driven by a runtime condition. Iterates while ``condition`` evaluates truthy.\n\nTop-of-loop semantics: the condition is evaluated *before* each iteration (including the\nfirst). If the condition is false on the first check, the body never runs and the block\nreturns success with an empty output list.\n\nSafety: the loop is capped at ``DEFAULT_MAX_LOOP_ITERATIONS`` (1000). Reaching the cap is\ntreated as a failure so that a misbehaving condition can never spin forever." }, "WhileLoopBlockYAML": { "properties": { @@ -25795,6 +29166,12 @@ { "$ref": "#/components/schemas/FileDownloadBlockYAML" }, + { + "$ref": "#/components/schemas/DataExportBlockYAML" + }, + { + "$ref": "#/components/schemas/TerminateBlockYAML" + }, { "$ref": "#/components/schemas/UrlBlockYAML" }, @@ -25807,6 +29184,9 @@ { "$ref": "#/components/schemas/HttpRequestBlockYAML" }, + { + "$ref": "#/components/schemas/WebSearchBlockYAML" + }, { "$ref": "#/components/schemas/ConditionalBlockYAML" }, @@ -25949,6 +29329,16 @@ "title": "Persist Browser Session", "default": false }, + "reuse_browser_session": { + "type": "boolean", + "title": "Reuse Browser Session", + "default": false + }, + "mask_secrets": { + "type": "boolean", + "title": "Mask Secrets", + "default": false + }, "pin_saved_session_ip": { "type": "boolean", "title": "Pin Saved Session Ip", @@ -26047,6 +29437,17 @@ "title": "Run With", "default": "agent" }, + "browser_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Type" + }, "ai_fallback": { "type": "boolean", "title": "Ai Fallback", @@ -26160,6 +29561,31 @@ "title": "Copilot Authored", "default": false }, + "original_created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Original Created By", + "description": "Who created the agent's first version. Populated by the list endpoint only." + }, + "original_created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Original Created At", + "description": "When the agent's first version was created. Populated by the list endpoint only." + }, "created_at": { "type": "string", "format": "date-time", @@ -26210,6 +29636,18 @@ "type": "string", "title": "Title" }, + "recording_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Recording Id", + "description": "Durable browser recording to attach to the workflow version created by this save." + }, "description": { "anyOf": [ { @@ -26237,7 +29675,8 @@ "type": "null" } ], - "title": "Proxy Location" + "title": "Proxy Location", + "description": "On PUT updates, omission keeps the stored value, null clears it, and a supplied value replaces it." }, "webhook_callback_url": { "anyOf": [ @@ -26248,7 +29687,8 @@ "type": "null" } ], - "title": "Webhook Callback Url" + "title": "Webhook Callback Url", + "description": "On PUT updates, omission keeps the stored value, null clears it, and a supplied value replaces it. URL validation errors identify the field and failure class without returning the URL or host." }, "totp_verification_url": { "anyOf": [ @@ -26259,7 +29699,8 @@ "type": "null" } ], - "title": "Totp Verification Url" + "title": "Totp Verification Url", + "description": "On PUT updates, omission keeps the stored value, null clears it, and a supplied value replaces it. URL validation errors identify the field and failure class without returning the URL or host." }, "totp_identifier": { "anyOf": [ @@ -26270,13 +29711,31 @@ "type": "null" } ], - "title": "Totp Identifier" + "title": "Totp Identifier", + "description": "On PUT updates, omission keeps the stored value, null clears it, and a supplied value replaces it." }, "persist_browser_session": { "type": "boolean", "title": "Persist Browser Session", "default": false }, + "reuse_browser_session": { + "type": "boolean", + "title": "Reuse Browser Session", + "default": false + }, + "mask_secrets": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Mask Secrets", + "description": "Mask secret values across this workflow's runs: hide them while they are typed (screenshots, recordings, live view) and redact them from stored artifacts, network logs, and LLM-bound text." + }, "pin_saved_session_ip": { "type": "boolean", "title": "Pin Saved Session Ip", @@ -26360,7 +29819,8 @@ "type": "null" } ], - "title": "Extra Http Headers" + "title": "Extra Http Headers", + "description": "On PUT updates, omission keeps the stored value, null clears it, and a supplied value replaces it. An empty object ({}) clears the header map. Values, including ***, are literal." }, "cdp_connect_headers": { "anyOf": [ @@ -26374,7 +29834,8 @@ "type": "null" } ], - "title": "Cdp Connect Headers" + "title": "Cdp Connect Headers", + "description": "On PUT updates, omission keeps the stored value, null clears it, and a supplied value replaces it. An empty object ({}) clears the header map; each masked *** entry keeps the stored value for that key." }, "status": { "$ref": "#/components/schemas/WorkflowStatus", @@ -26385,6 +29846,18 @@ "title": "Run With", "default": "agent" }, + "browser_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Type", + "description": "Browser engine for runs of this workflow, one of the supported browser types (e.g. msedge, chrome, stealth-chromium). A workflow-run setting overrides this. Null means the system default." + }, "ai_fallback": { "type": "boolean", "title": "Ai Fallback", @@ -26607,6 +30080,9 @@ { "$ref": "#/components/schemas/HttpRequestBlock" }, + { + "$ref": "#/components/schemas/WebSearchBlock" + }, { "$ref": "#/components/schemas/PrintPageBlock" }, @@ -26627,6 +30103,12 @@ }, { "$ref": "#/components/schemas/SplitPdfBlock" + }, + { + "$ref": "#/components/schemas/DataExportBlock" + }, + { + "$ref": "#/components/schemas/TerminateBlock" } ], "discriminator": { @@ -26635,6 +30117,7 @@ "action": "#/components/schemas/ActionBlock", "code": "#/components/schemas/CodeBlock", "conditional": "#/components/schemas/ConditionalBlock", + "data_export": "#/components/schemas/DataExportBlock", "download_to_s3": "#/components/schemas/DownloadToS3Block", "email_inbox": "#/components/schemas/EmailInboxBlock", "extraction": "#/components/schemas/ExtractionBlock", @@ -26656,10 +30139,12 @@ "split_pdf": "#/components/schemas/SplitPdfBlock", "task": "#/components/schemas/TaskBlock", "task_v2": "#/components/schemas/TaskV2Block", + "terminate": "#/components/schemas/TerminateBlock", "text_prompt": "#/components/schemas/TextPromptBlock", "upload_to_s3": "#/components/schemas/UploadToS3Block", "validation": "#/components/schemas/ValidationBlock", "wait": "#/components/schemas/WaitBlock", + "web_search": "#/components/schemas/WebSearchBlock", "while_loop": "#/components/schemas/WhileLoopBlock", "workflow_trigger": "#/components/schemas/WorkflowTriggerBlock" } @@ -26693,6 +30178,17 @@ ], "title": "Error Code Mapping" }, + "retry_policy": { + "anyOf": [ + { + "$ref": "#/components/schemas/WorkflowRetryPolicy" + }, + { + "type": "null" + } + ], + "description": "Optional policy for retrying eligible terminal workflow runs" + }, "workflow_system_prompt": { "anyOf": [ { @@ -26703,6 +30199,19 @@ } ], "title": "Workflow System Prompt" + }, + "completion_contract": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Completion Contract", + "description": "Copilot-managed: what a run of this workflow must produce, graded at run finalization. Derived from the request when a workflow is accepted; not intended to be authored by hand." } }, "type": "object", @@ -26835,6 +30344,12 @@ { "$ref": "#/components/schemas/FileDownloadBlockYAML" }, + { + "$ref": "#/components/schemas/DataExportBlockYAML" + }, + { + "$ref": "#/components/schemas/TerminateBlockYAML" + }, { "$ref": "#/components/schemas/UrlBlockYAML" }, @@ -26847,6 +30362,9 @@ { "$ref": "#/components/schemas/HttpRequestBlockYAML" }, + { + "$ref": "#/components/schemas/WebSearchBlockYAML" + }, { "$ref": "#/components/schemas/ConditionalBlockYAML" }, @@ -26878,6 +30396,7 @@ "action": "#/components/schemas/ActionBlockYAML", "code": "#/components/schemas/CodeBlockYAML", "conditional": "#/components/schemas/ConditionalBlockYAML", + "data_export": "#/components/schemas/DataExportBlockYAML", "download_to_s3": "#/components/schemas/DownloadToS3BlockYAML", "email_inbox": "#/components/schemas/EmailInboxBlockYAML", "extraction": "#/components/schemas/ExtractionBlockYAML", @@ -26899,10 +30418,12 @@ "split_pdf": "#/components/schemas/SplitPdfBlockYAML", "task": "#/components/schemas/TaskBlockYAML", "task_v2": "#/components/schemas/TaskV2BlockYAML", + "terminate": "#/components/schemas/TerminateBlockYAML", "text_prompt": "#/components/schemas/TextPromptBlockYAML", "upload_to_s3": "#/components/schemas/UploadToS3BlockYAML", "validation": "#/components/schemas/ValidationBlockYAML", "wait": "#/components/schemas/WaitBlockYAML", + "web_search": "#/components/schemas/WebSearchBlockYAML", "while_loop": "#/components/schemas/WhileLoopBlockYAML", "workflow_trigger": "#/components/schemas/WorkflowTriggerBlockYAML" } @@ -26936,6 +30457,17 @@ ], "title": "Error Code Mapping" }, + "retry_policy": { + "anyOf": [ + { + "$ref": "#/components/schemas/WorkflowRetryPolicy" + }, + { + "type": "null" + } + ], + "description": "Optional policy for retrying eligible terminal workflow runs" + }, "workflow_system_prompt": { "anyOf": [ { @@ -26946,6 +30478,19 @@ } ], "title": "Workflow System Prompt" + }, + "completion_contract": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Completion Contract", + "description": "Copilot-managed: what a run of this workflow must produce, graded at run finalization. Derived from the request when a workflow is accepted; not intended to be authored by hand." } }, "type": "object", @@ -27155,6 +30700,87 @@ "type": "object", "title": "WorkflowRequest" }, + "WorkflowRetryPolicy": { + "properties": { + "max_retries": { + "type": "integer", + "maximum": 5, + "minimum": 1, + "title": "Max Retries", + "description": "Maximum number of retries after the initial attempt", + "default": 1 + }, + "delay_seconds": { + "type": "integer", + "maximum": 3600, + "minimum": 0, + "title": "Delay Seconds", + "description": "Fixed delay before the next attempt, in seconds", + "default": 0 + }, + "webhook_on_retry": { + "type": "string", + "enum": [ + "final_only", + "every_attempt" + ], + "title": "Webhook On Retry", + "description": "Whether to send a webhook for every attempt or only the final attempt", + "default": "final_only" + }, + "retry_on": { + "items": { + "$ref": "#/components/schemas/WorkflowRetryRule" + }, + "type": "array", + "minItems": 1, + "title": "Retry On", + "description": "Terminal status rules that enable retries" + } + }, + "type": "object", + "required": [ + "retry_on" + ], + "title": "WorkflowRetryPolicy" + }, + "WorkflowRetryRule": { + "properties": { + "status": { + "type": "string", + "enum": [ + "completed", + "failed", + "terminated", + "canceled", + "timed_out" + ], + "title": "Status", + "description": "Terminal status that triggers a retry rule; canceled is accepted for forward compatibility, but a canceled run never retries in the current runtime, including explicit API/UI cancels." + }, + "error_codes": { + "anyOf": [ + { + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Error Codes", + "description": "Optional error codes. The rule matches when any listed code is present." + } + }, + "type": "object", + "required": [ + "status" + ], + "title": "WorkflowRetryRule" + }, "WorkflowRun": { "properties": { "workflow_run_id": { @@ -27195,6 +30821,49 @@ ], "title": "Browser Profile Id" }, + "browser_seed_source": { + "anyOf": [ + { + "$ref": "#/components/schemas/BrowserSeedSource" + }, + { + "type": "null" + } + ] + }, + "browser_sink_profile_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Sink Profile Id" + }, + "start_fresh_browser": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Start Fresh Browser" + }, + "reuse_browser_session": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Reuse Browser Session" + }, "debug_session_id": { "anyOf": [ { @@ -27209,6 +30878,39 @@ "status": { "$ref": "#/components/schemas/WorkflowRunStatus" }, + "attempt": { + "type": "integer", + "title": "Attempt", + "description": "One-based number of the current workflow run attempt", + "default": 1 + }, + "retry_pending": { + "type": "boolean", + "title": "Retry Pending", + "description": "Whether another attempt is scheduled for this workflow run", + "default": false + }, + "next_attempt_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Next Attempt At", + "description": "Timestamp when the next workflow run attempt is scheduled" + }, + "attempts": { + "items": { + "$ref": "#/components/schemas/WorkflowRunAttempt" + }, + "type": "array", + "title": "Attempts", + "description": "Attempts recorded for this workflow run" + }, "extra_http_headers": { "anyOf": [ { @@ -27325,6 +31027,28 @@ ], "title": "Failure Category" }, + "retried_from_workflow_run_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Retried From Workflow Run Id" + }, + "fallback_attempt": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Fallback Attempt" + }, "parent_workflow_run_id": { "anyOf": [ { @@ -27391,6 +31115,17 @@ ], "title": "Run With" }, + "browser_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Type" + }, "script_run": { "anyOf": [ { @@ -27434,6 +31169,17 @@ ], "title": "Sequential Key" }, + "sequential_credential_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sequential Credential Id" + }, "ai_fallback": { "anyOf": [ { @@ -27493,6 +31239,18 @@ ], "title": "Copilot Session Id" }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By", + "description": "ID of the user who started the run" + }, "credits_used": { "type": "integer", "title": "Credits Used", @@ -27562,6 +31320,121 @@ ], "title": "WorkflowRun" }, + "WorkflowRunAttempt": { + "properties": { + "attempt_number": { + "type": "integer", + "title": "Attempt Number", + "description": "One-based number of this workflow run attempt" + }, + "status": { + "$ref": "#/components/schemas/RunStatus", + "description": "Status of this workflow run attempt" + }, + "failure_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Failure Reason", + "description": "Reason for failure, if the attempt failed" + }, + "error_codes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Error Codes", + "description": "Error codes reported by this attempt" + }, + "started_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started At", + "description": "Timestamp when this attempt started" + }, + "finished_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished At", + "description": "Timestamp when this attempt finished" + }, + "retry_decision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Retry Decision", + "description": "Retry decision recorded for this attempt" + }, + "decision_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Decision Reason", + "description": "Reason recorded for the retry decision" + }, + "next_attempt_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Next Attempt At", + "description": "Timestamp when the next attempt is scheduled" + }, + "webhook_sent_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Webhook Sent At", + "description": "Timestamp when the webhook for this attempt was sent" + } + }, + "type": "object", + "required": [ + "attempt_number", + "status" + ], + "title": "WorkflowRunAttempt" + }, "WorkflowRunBlock": { "properties": { "workflow_run_block_id": { @@ -27583,6 +31456,17 @@ "type": "string", "title": "Workflow Run Id" }, + "attempt_number": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Attempt Number" + }, "organization_id": { "type": "string", "title": "Organization Id" @@ -27709,6 +31593,28 @@ ], "title": "Url" }, + "final_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Final Url" + }, + "finish_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Finish Reason" + }, "navigation_goal": { "anyOf": [ { @@ -28153,6 +32059,18 @@ "title": "Browser Session Id", "description": "ID of a Skyvern browser session to reuse, having it continue from the current screen state" }, + "reuse_browser_session": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Reuse Browser Session", + "description": "Override whether this run reuses the workflow's managed browser session. Null inherits the workflow setting. Without login credentials, a browser profile key, or a sequential key, reuse is workflow-scoped: every run shares one browser and its signed-in state, so treat the workflow as single-account." + }, "browser_profile_id": { "anyOf": [ { @@ -28165,6 +32083,12 @@ "title": "Browser Profile Id", "description": "ID of a browser profile to reuse for this workflow run" }, + "start_fresh_browser": { + "type": "boolean", + "title": "Start Fresh Browser", + "description": "When true, start this run from a fresh, empty browser and ignore any saved browser memory — no memory is read or written. A verified sign-in during the run still updates the credential's saved login.", + "default": false + }, "max_screenshot_scrolls": { "anyOf": [ { @@ -28265,6 +32189,21 @@ "code" ] }, + "browser_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Type", + "description": "Browser engine for this run, one of the supported browser types (e.g. msedge, chrome, stealth-chromium). Overrides the workflow-level setting. Null inherits from the workflow.", + "examples": [ + "chrome" + ] + }, "run_metadata": { "anyOf": [ { @@ -28279,6 +32218,27 @@ ], "title": "Run Metadata", "description": "String key/value metadata to attach to this workflow run for analytics tag filtering." + }, + "file_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array", + "maxItems": 50 + }, + { + "type": "null" + } + ], + "title": "File Ids", + "description": "\nIds of files uploaded through `POST /v1/upload_file` to attach to this run. Skyvern deletes an attached file as soon as the run finishes, so there is nothing to clean up afterwards. Reference an attached file by its id anywhere a file URL is accepted (for example in `parameters` or in the prompt) and no presigned URL is ever created for it. A file can be attached to one run at a time, and must not already be deleted.\n", + "examples": [ + [ + "file_123456789" + ] + ] } }, "type": "object", @@ -28398,6 +32358,18 @@ "title": "Browser Session Id", "description": "ID of a Skyvern browser session to reuse, having it continue from the current screen state" }, + "reuse_browser_session": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Reuse Browser Session", + "description": "Override whether this run reuses the workflow's managed browser session. Null inherits the workflow setting. Without login credentials, a browser profile key, or a sequential key, reuse is workflow-scoped: every run shares one browser and its signed-in state, so treat the workflow as single-account." + }, "browser_profile_id": { "anyOf": [ { @@ -28410,6 +32382,12 @@ "title": "Browser Profile Id", "description": "ID of a browser profile to reuse for this workflow run" }, + "start_fresh_browser": { + "type": "boolean", + "title": "Start Fresh Browser", + "description": "When true, start this run from a fresh, empty browser and ignore any saved browser memory — no memory is read or written. A verified sign-in during the run still updates the credential's saved login.", + "default": false + }, "max_screenshot_scrolls": { "anyOf": [ { @@ -28510,6 +32488,21 @@ "code" ] }, + "browser_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Browser Type", + "description": "Browser engine for this run, one of the supported browser types (e.g. msedge, chrome, stealth-chromium). Overrides the workflow-level setting. Null inherits from the workflow.", + "examples": [ + "chrome" + ] + }, "run_metadata": { "anyOf": [ { @@ -28524,6 +32517,27 @@ ], "title": "Run Metadata", "description": "String key/value metadata to attach to this workflow run for analytics tag filtering." + }, + "file_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array", + "maxItems": 50 + }, + { + "type": "null" + } + ], + "title": "File Ids", + "description": "\nIds of files uploaded through `POST /v1/upload_file` to attach to this run. Skyvern deletes an attached file as soon as the run finishes, so there is nothing to clean up afterwards. Reference an attached file by its id anywhere a file URL is accepted (for example in `parameters` or in the prompt) and no presigned URL is ever created for it. A file can be attached to one run at a time, and must not already be deleted.\n", + "examples": [ + [ + "file_123456789" + ] + ] } }, "type": "object", @@ -28551,6 +32565,7 @@ "created", "queued", "running", + "paused", "timed_out", "failed", "terminated", @@ -28798,6 +32813,39 @@ "title": "Run Type", "description": "Type of run - always workflow_run for workflow runs" }, + "attempt": { + "type": "integer", + "title": "Attempt", + "description": "One-based number of the current workflow run attempt", + "default": 1 + }, + "retry_pending": { + "type": "boolean", + "title": "Retry Pending", + "description": "Whether another attempt is scheduled for this workflow run", + "default": false + }, + "next_attempt_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Next Attempt At", + "description": "Timestamp when the next workflow run attempt is scheduled" + }, + "attempts": { + "items": { + "$ref": "#/components/schemas/WorkflowRunAttempt" + }, + "type": "array", + "title": "Attempts", + "description": "Attempts recorded for this workflow run" + }, "run_with": { "type": "string", "title": "Run With", @@ -28832,6 +32880,22 @@ "title": "Script Id", "description": "ID of the cached script used for this workflow run, if any." }, + "browser_seed_source": { + "anyOf": [ + { + "$ref": "#/components/schemas/BrowserSeedSource" + }, + { + "type": "null" + } + ], + "description": "Which layer of the seed-precedence chain seeded this run's browser (provenance).", + "examples": [ + "credential", + "own_memory", + "fresh" + ] + }, "run_request": { "anyOf": [ { @@ -28874,6 +32938,11 @@ "type": { "$ref": "#/components/schemas/WorkflowRunTimelineType" }, + "attempt": { + "type": "integer", + "title": "Attempt", + "default": 1 + }, "block": { "anyOf": [ { @@ -28936,10 +33005,12 @@ "mcp", "api", "scheduled", - "webhook" + "webhook", + "job_recipe_extract", + "job_recipe_apply" ], "title": "WorkflowRunTriggerType", - "description": "How a workflow run was initiated.\n\n- manual: User clicked \"Run\" in the UI\n- mcp: First-party MCP client request\n- api: Direct API call to the run endpoint\n- scheduled: Triggered by a cron schedule\n- webhook: Triggered by an external system via the webhook endpoint" + "description": "How a workflow run was initiated.\n\n- manual: User clicked \"Run\" in the UI\n- mcp: First-party MCP client request\n- api: Direct API call to the run endpoint\n- scheduled: Triggered by a cron schedule\n- webhook: Triggered by an external system via the webhook endpoint\n- job_recipe_extract: Launched by a job recipe extract request\n- job_recipe_apply: Launched by a job recipe apply request" }, "WorkflowSchedule": { "properties": { @@ -29163,8 +33234,8 @@ "anyOf": [ { "type": "integer", - "maximum": 2147483647.0, - "minimum": 300.0 + "maximum": 2147483647, + "minimum": 300 }, { "type": "null" @@ -29596,16 +33667,14 @@ "azure_vault" ], "title": "CredentialType" - }, - "OneTimeDispatchStatus": { - "type": "string", - "enum": [ - "pending", - "fired", - "canceled", - "failed" - ], - "title": "OneTimeDispatchStatus" + } + }, + "securitySchemes": { + "ApiKeyAuth": { + "type": "apiKey", + "description": "Your Skyvern API key from https://app.skyvern.com/settings.", + "in": "header", + "name": "x-api-key" } } }, @@ -29623,4 +33692,4 @@ "x-fern-server-name": "Local" } ] -} +} \ No newline at end of file