diff --git a/docs/api-reference/openapi.json b/docs/api-reference/openapi.json new file mode 100644 index 00000000..36255184 --- /dev/null +++ b/docs/api-reference/openapi.json @@ -0,0 +1,13732 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Skyvern API", + "description": "API for Skyvern", + "version": "1.0.0" + }, + "paths": { + "/v1/run/tasks": { + "post": { + "tags": [ + "Agent" + ], + "summary": "Run a task", + "description": "Run a task", + "operationId": "run_task_v1_run_tasks_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "title": "X-User-Agent" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskRunRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully run task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskRunResponse" + } + } + } + }, + "400": { + "description": "Invalid agent engine" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/run/workflows": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Run a workflow", + "description": "Run a workflow", + "operationId": "run_workflow_v1_run_workflows_post", + "parameters": [ + { + "name": "template", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Template" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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-max-steps-override", + "in": "header", + "required": false, + "schema": { + "type": "integer", + "nullable": true, + "title": "X-Max-Steps-Override" + } + }, + { + "name": "x-user-agent", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "title": "X-User-Agent" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowRunRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully run workflow", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowRunResponse" + } + } + } + }, + "400": { + "description": "Invalid workflow run request" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/runs/{run_id}": { + "get": { + "tags": [ + "Agent", + "Workflows" + ], + "summary": "Get a run by id", + "description": "Get run information (task run, workflow run)", + "operationId": "get_run_v1_runs__run_id__get", + "parameters": [ + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The id of the task run or the workflow run.", + "example": "tsk_123", + "title": "Run Id" + }, + "description": "The id of the task run or the workflow run." + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 got run", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/TaskRunResponse" + }, + { + "$ref": "#/components/schemas/WorkflowRunResponse" + } + ], + "discriminator": { + "propertyName": "run_type", + "mapping": { + "task_v1": "#/components/schemas/TaskRunResponse", + "task_v2": "#/components/schemas/TaskRunResponse", + "openai_cua": "#/components/schemas/TaskRunResponse", + "anthropic_cua": "#/components/schemas/TaskRunResponse", + "ui_tars": "#/components/schemas/TaskRunResponse", + "workflow_run": "#/components/schemas/WorkflowRunResponse" + } + }, + "title": "Response Get Run V1 Runs Run Id Get" + } + } + } + }, + "404": { + "description": "Run not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/runs/{run_id}/cancel": { + "post": { + "tags": [ + "Agent", + "Workflows" + ], + "summary": "Cancel a run by id", + "description": "Cancel a run (task or workflow)", + "operationId": "cancel_run_v1_runs__run_id__cancel_post", + "parameters": [ + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The id of the task run or the workflow run to cancel.", + "title": "Run Id" + }, + "description": "The id of the task run or the workflow run to cancel." + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/workflows": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Create a new workflow", + "description": "Create a new workflow", + "operationId": "create_workflow_v1_workflows_post", + "parameters": [ + { + "name": "folder_id", + "in": "query", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "description": "Optional folder ID to assign the workflow to", + "title": "Folder Id" + }, + "description": "Optional folder ID to assign the workflow to" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/WorkflowRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created workflow", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + }, + "422": { + "description": "Invalid workflow definition" + } + } + }, + "get": { + "tags": [ + "Workflows" + ], + "summary": "Get Workflows", + "description": "Get all workflows with the latest version for the organization.\n\nSearch semantics:\n- If `search_key` is provided, its value is used as a unified search term for\n `workflows.title`, `folders.title`, and workflow parameter metadata (key, description, and default_value for\n `WorkflowParameterModel`).\n- Falls back to deprecated `title` (title-only search) if `search_key` is not provided.\n- Parameter metadata search excludes soft-deleted parameter rows across all parameter tables.", + "operationId": "get_workflows_v1_workflows_get", + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "default": 1, + "title": "Page" + } + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "default": 10, + "title": "Page Size" + } + }, + { + "name": "only_saved_tasks", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Only Saved Tasks" + } + }, + { + "name": "only_workflows", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Only Workflows" + } + }, + { + "name": "only_templates", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Only Templates" + } + }, + { + "name": "search_key", + "in": "query", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "description": "Unified search across workflow title, folder name, and parameter metadata (key, description, default_value).", + "title": "Search Key" + }, + "description": "Unified search across workflow title, folder name, and parameter metadata (key, description, default_value)." + }, + { + "name": "title", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Deprecated: use search_key instead.", + "deprecated": true, + "default": "", + "title": "Title" + }, + "description": "Deprecated: use search_key instead.", + "deprecated": true + }, + { + "name": "folder_id", + "in": "query", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "description": "Filter workflows by folder ID", + "title": "Folder Id" + }, + "description": "Filter workflows by folder ID" + }, + { + "name": "status", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkflowStatus" + }, + "nullable": true, + "title": "Status" + } + }, + { + "name": "template", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Template" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Workflow" + }, + "title": "Response Get Workflows V1 Workflows Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/workflows/{workflow_id}": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Update a workflow", + "description": "Update a workflow", + "operationId": "update_workflow_v1_workflows__workflow_id__post", + "parameters": [ + { + "name": "workflow_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the workflow to update. Workflow ID starts with `wpid_`.", + "example": "wpid_123", + "title": "Workflow Id" + }, + "description": "The ID of the workflow to update. Workflow ID starts with `wpid_`." + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/WorkflowRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated workflow", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + }, + "422": { + "description": "Invalid workflow definition" + } + } + } + }, + "/v1/workflows/{workflow_id}/delete": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Delete a workflow", + "description": "Delete a workflow", + "operationId": "delete_workflow_v1_workflows__workflow_id__delete_post", + "parameters": [ + { + "name": "workflow_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the workflow to delete. Workflow ID starts with `wpid_`.", + "example": "wpid_123", + "title": "Workflow Id" + }, + "description": "The ID of the workflow to delete. Workflow ID starts with `wpid_`." + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 deleted workflow", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/artifacts/{artifact_id}": { + "get": { + "tags": [ + "Artifacts" + ], + "summary": "Get an artifact", + "description": "Get an artifact", + "operationId": "get_artifact_v1_artifacts__artifact_id__get", + "parameters": [ + { + "name": "artifact_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Artifact Id" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 artifact", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Artifact" + } + } + } + }, + "404": { + "description": "Artifact not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/runs/{run_id}/artifacts": { + "get": { + "tags": [ + "Artifacts" + ], + "summary": "Get artifacts for a run", + "description": "Get artifacts for a run", + "operationId": "get_run_artifacts_v1_runs__run_id__artifacts_get", + "parameters": [ + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The id of the task run or the workflow run.", + "title": "Run Id" + }, + "description": "The id of the task run or the workflow run." + }, + { + "name": "artifact_type", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ArtifactType" + }, + "nullable": true, + "title": "Artifact Type" + } + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Artifact" + }, + "title": "Response Get Run Artifacts V1 Runs Run Id Artifacts Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/runs/{run_id}/retry_webhook": { + "post": { + "tags": [ + "Agent" + ], + "summary": "Retry run webhook", + "description": "Retry sending the webhook for a run", + "operationId": "retry_run_webhook_v1_runs__run_id__retry_webhook_post", + "parameters": [ + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The id of the task run or the workflow run.", + "example": "tsk_123", + "title": "Run Id" + }, + "description": "The id of the task run or the workflow run." + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetryRunWebhookRequest", + "nullable": true, + "title": "Request" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/runs/{run_id}/timeline": { + "get": { + "tags": [ + "Agent", + "Workflows" + ], + "summary": "Get run timeline", + "description": "Get timeline for a run (workflow run or task_v2 run)", + "operationId": "get_run_timeline_v1_runs__run_id__timeline_get", + "parameters": [ + { + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The id of the workflow run or task_v2 run.", + "example": "wr_123", + "title": "Run Id" + }, + "description": "The id of the workflow run or task_v2 run." + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 timeline", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkflowRunTimeline" + }, + "title": "Response Get Run Timeline V1 Runs Run Id Timeline Get" + } + } + } + }, + "400": { + "description": "Timeline not available for this run type" + }, + "404": { + "description": "Run not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/upload_file": { + "post": { + "tags": [ + "Files" + ], + "summary": "Upload File", + "operationId": "upload_file_v1_upload_file_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/Body_upload_file_v1_upload_file_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadFileResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/browser_profiles": { + "post": { + "tags": [ + "Browser Profiles" + ], + "summary": "Create a browser profile", + "description": "Create a browser profile from a persistent browser session or workflow run.", + "operationId": "create_browser_profile_v1_browser_profiles_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/CreateBrowserProfileRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created browser profile", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BrowserProfile" + } + } + } + }, + "400": { + "description": "Invalid request - missing source or source not found" + }, + "409": { + "description": "Browser profile name already exists" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "Browser Profiles" + ], + "summary": "List browser profiles", + "description": "Get all browser profiles for the organization", + "operationId": "list_browser_profiles_v1_browser_profiles_get", + "parameters": [ + { + "name": "include_deleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Include deleted browser profiles", + "default": false, + "title": "Include Deleted" + }, + "description": "Include deleted browser profiles" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 profiles", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BrowserProfile" + }, + "title": "Response List Browser Profiles V1 Browser Profiles Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/browser_profiles/{profile_id}": { + "get": { + "tags": [ + "Browser Profiles" + ], + "summary": "Get browser profile", + "description": "Get a specific browser profile by ID", + "operationId": "get_browser_profile_v1_browser_profiles__profile_id__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_`", + "example": "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": { + "type": "string", + "nullable": true, + "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", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BrowserProfile" + } + } + } + }, + "404": { + "description": "Browser profile not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Browser Profiles" + ], + "summary": "Delete browser profile", + "description": "Delete a browser profile (soft delete)", + "operationId": "delete_browser_profile_v1_browser_profiles__profile_id__delete", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the browser profile to delete. browser_profile_id starts with `bp_`", + "example": "bp_123456", + "title": "Profile Id" + }, + "description": "The ID of the browser profile to delete. browser_profile_id starts with `bp_`" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": "Successfully deleted browser profile" + }, + "404": { + "description": "Browser profile not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/browser_sessions": { + "post": { + "tags": [ + "Browser Sessions" + ], + "summary": "Create a session", + "description": "Create a browser session that persists across multiple runs", + "operationId": "create_browser_session_v1_browser_sessions_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBrowserSessionRequest", + "default": { + "timeout": 60 + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created browser session", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BrowserSessionResponse" + } + } + } + }, + "403": { + "description": "Unauthorized - Invalid or missing authentication" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "Browser Sessions" + ], + "summary": "Get active browser sessions", + "description": "Get all active browser sessions for the organization", + "operationId": "get_browser_sessions_v1_browser_sessions_get", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 all active browser sessions", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BrowserSessionResponse" + }, + "title": "Response Get Browser Sessions V1 Browser Sessions Get" + } + } + } + }, + "403": { + "description": "Unauthorized - Invalid or missing authentication" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/browser_sessions/{browser_session_id}/close": { + "post": { + "tags": [ + "Browser Sessions" + ], + "summary": "Close a session", + "description": "Close a session. Once closed, the session cannot be used again.", + "operationId": "close_browser_session_v1_browser_sessions__browser_session_id__close_post", + "parameters": [ + { + "name": "browser_session_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the browser session to close. completed_at will be set when the browser session is closed. browser_session_id starts with `pbs_`", + "example": "pbs_123456", + "title": "Browser Session Id" + }, + "description": "The ID of the browser session to close. completed_at will be set when the browser session is closed. browser_session_id starts with `pbs_`" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 closed browser session", + "content": { + "application/json": { + "schema": {} + } + } + }, + "403": { + "description": "Unauthorized - Invalid or missing authentication" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/browser_sessions/{browser_session_id}": { + "get": { + "tags": [ + "Browser Sessions" + ], + "summary": "Get a session", + "description": "Get details about a specific browser session, including the browser address for cdp connection.", + "operationId": "get_browser_session_v1_browser_sessions__browser_session_id__get", + "parameters": [ + { + "name": "browser_session_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the browser session. browser_session_id starts with `pbs_`", + "example": "pbs_123456", + "title": "Browser Session Id" + }, + "description": "The ID of the browser session. browser_session_id starts with `pbs_`" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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 session details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BrowserSessionResponse" + } + } + } + }, + "403": { + "description": "Unauthorized - Invalid or missing authentication" + }, + "404": { + "description": "Browser session not found" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/credentials/totp": { + "post": { + "tags": [ + "Credentials" + ], + "summary": "Send TOTP code", + "description": "Forward a TOTP (2FA, MFA) email or sms message containing the code to Skyvern. This endpoint stores the code in database so that Skyvern can use it while running tasks/workflows.", + "operationId": "send_totp_code_v1_credentials_totp_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/TOTPCodeCreate" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TOTPCode" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/credentials": { + "post": { + "tags": [ + "Credentials" + ], + "summary": "Create credential", + "description": "Creates a new credential for the current organization", + "operationId": "create_credential_v1_credentials_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/CreateCredentialRequest", + "description": "The credential data to create" + }, + "example": { + "name": "My Credential", + "credential_type": "PASSWORD", + "credential": { + "username": "user@example.com", + "password": "securepassword123", + "totp": "JBSWY3DPEHPK3PXP" + } + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "Credentials" + ], + "summary": "Get all credentials", + "description": "Retrieves a paginated list of credentials for the current organization", + "operationId": "get_credentials_v1_credentials_get", + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Page number for pagination", + "example": 1, + "default": 1, + "title": "Page" + }, + "description": "Page number for pagination" + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Number of items per page", + "example": 10, + "default": 10, + "title": "Page Size" + }, + "description": "Number of items per page" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialResponse" + }, + "title": "Response Get Credentials V1 Credentials Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/credentials/{credential_id}/delete": { + "post": { + "tags": [ + "Credentials" + ], + "summary": "Delete credential", + "description": "Deletes a specific credential by its ID", + "operationId": "delete_credential_v1_credentials__credential_id__delete_post", + "parameters": [ + { + "name": "credential_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The unique identifier of the credential to delete", + "example": "cred_1234567890", + "title": "Credential Id" + }, + "description": "The unique identifier of the credential to delete" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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" + } + } + } + } + } + } + }, + "/v1/credentials/{credential_id}": { + "get": { + "tags": [ + "Credentials" + ], + "summary": "Get credential by ID", + "description": "Retrieves a specific credential by its ID", + "operationId": "get_credential_v1_credentials__credential_id__get", + "parameters": [ + { + "name": "credential_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The unique identifier of the credential", + "example": "cred_1234567890", + "title": "Credential Id" + }, + "description": "The unique identifier of the credential" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/CredentialResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/run/tasks/login": { + "post": { + "tags": [ + "Agent" + ], + "summary": "Login Task", + "description": "Log in to a website using either credential stored in Skyvern, Bitwarden, 1Password, or Azure Vault", + "operationId": "login_v1_run_tasks_login_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/LoginRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowRunResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/run/tasks/download_files": { + "post": { + "tags": [ + "Agent" + ], + "summary": "File Download Task", + "description": "Download a file from a website by navigating and clicking download buttons", + "operationId": "download_files_v1_run_tasks_download_files_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/DownloadFilesRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowRunResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/scripts": { + "post": { + "tags": [ + "Scripts" + ], + "summary": "Create script", + "description": "Create a new script with optional files and metadata", + "operationId": "create_script_v1_scripts_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/CreateScriptRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateScriptResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "Scripts" + ], + "summary": "Get all scripts", + "description": "Retrieves a paginated list of scripts for the current organization", + "operationId": "get_scripts_v1_scripts_get", + "parameters": [ + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Page number for pagination", + "example": 1, + "default": 1, + "title": "Page" + }, + "description": "Page number for pagination" + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Number of items per page", + "example": 10, + "default": 10, + "title": "Page Size" + }, + "description": "Number of items per page" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Script" + }, + "title": "Response Get Scripts V1 Scripts Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/scripts/{script_id}": { + "get": { + "tags": [ + "Scripts" + ], + "summary": "Get script by ID", + "description": "Retrieves a specific script by its ID", + "operationId": "get_script_v1_scripts__script_id__get", + "parameters": [ + { + "name": "script_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The unique identifier of the script", + "example": "s_abc123", + "title": "Script Id" + }, + "description": "The unique identifier of the script" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/Script" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/scripts/{script_id}/deploy": { + "post": { + "tags": [ + "Scripts" + ], + "summary": "Deploy script", + "description": "Deploy a script with updated files, creating a new version", + "operationId": "deploy_script_v1_scripts__script_id__deploy_post", + "parameters": [ + { + "name": "script_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The unique identifier of the script", + "example": "s_abc123", + "title": "Script Id" + }, + "description": "The unique identifier of the script" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/DeployScriptRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateScriptResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/scripts/{script_id}/run": { + "post": { + "tags": [ + "Scripts" + ], + "summary": "Run script", + "description": "Run a script", + "operationId": "run_script_v1_scripts__script_id__run_post", + "parameters": [ + { + "name": "script_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The unique identifier of the script", + "example": "s_abc123", + "title": "Script Id" + }, + "description": "The unique identifier of the script" + }, + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/sdk/run_action": { + "post": { + "tags": [ + "SDK" + ], + "summary": "Run an SDK action", + "description": "Execute a single SDK action with the specified parameters", + "operationId": "run_sdk_action_v1_sdk_run_action_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/RunSdkActionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RunSdkActionResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/v1/billing/checkout": { + "post": { + "summary": "Create Checkout Session", + "description": "Create a Stripe Checkout Session for subscribing to a tier.\n\nFrontend should redirect the user to the returned URL.\nAfter successful checkout, Stripe will send a webhook that we handle\nto store the subscription and initialize billing state.\n\nReturns 400 if org already has an active subscription (use portal instead).", + "operationId": "create_checkout_session_api_v1_billing_checkout_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/CheckoutSubscriptionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CheckoutSessionResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/v1/billing/portal": { + "post": { + "summary": "Create Portal Session", + "description": "Create a Stripe Customer Portal session for managing subscription.\n\nFrontend should redirect the user to the returned URL.\nThe portal allows users to:\n- Update payment methods\n- Upgrade/downgrade plans\n- Cancel subscription\n- View invoices", + "operationId": "create_portal_session_api_v1_billing_portal_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/PortalSessionResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/v1/billing/state": { + "get": { + "summary": "Get Organization Billing", + "operationId": "get_organization_billing_api_v1_billing_state_get", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/BillingStateResponse", + "nullable": true, + "title": "Response Get Organization Billing Api V1 Billing State Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/v1/billing/change-tier": { + "post": { + "summary": "Change Tier", + "description": "Redirect to Stripe Portal for tier changes.\nPortal handles proration based on configured settings:\n- Upgrades: Immediate proration charge\n- Downgrades: Apply at end of billing period", + "operationId": "change_tier_api_v1_billing_change_tier_post", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "required": false, + "schema": { + "type": "string", + "nullable": true, + "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/ChangeTierRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeTierResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AWSSecretParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "aws_secret" + ], + "title": "Parameter Type", + "default": "aws_secret" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "aws_secret_parameter_id": { + "type": "string", + "title": "Aws Secret Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "aws_key": { + "type": "string", + "title": "Aws Key" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "aws_secret_parameter_id", + "workflow_id", + "aws_key", + "created_at", + "modified_at" + ], + "title": "AWSSecretParameter" + }, + "AWSSecretParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "aws_secret" + ], + "title": "Parameter Type", + "default": "aws_secret" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "aws_key": { + "type": "string", + "title": "Aws Key" + } + }, + "type": "object", + "required": [ + "key", + "aws_key" + ], + "title": "AWSSecretParameterYAML" + }, + "ActAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "ai_act" + ], + "title": "Type", + "default": "ai_act" + }, + "intention": { + "type": "string", + "title": "Intention", + "description": "Natural language prompt for the action", + "default": "" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Data", + "description": "Additional context data", + "nullable": true + } + }, + "type": "object", + "title": "ActAction", + "description": "AI act action parameters." + }, + "Action": { + "properties": { + "action_type": { + "$ref": "#/components/schemas/ActionType" + }, + "status": { + "$ref": "#/components/schemas/ActionStatus", + "default": "pending" + }, + "action_id": { + "type": "string", + "nullable": true, + "title": "Action Id" + }, + "source_action_id": { + "type": "string", + "nullable": true, + "title": "Source Action Id" + }, + "organization_id": { + "type": "string", + "nullable": true, + "title": "Organization Id" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id" + }, + "task_id": { + "type": "string", + "nullable": true, + "title": "Task Id" + }, + "step_id": { + "type": "string", + "nullable": true, + "title": "Step Id" + }, + "step_order": { + "type": "integer", + "nullable": true, + "title": "Step Order" + }, + "action_order": { + "type": "integer", + "nullable": true, + "title": "Action Order" + }, + "confidence_float": { + "type": "number", + "nullable": true, + "title": "Confidence Float" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "reasoning": { + "type": "string", + "nullable": true, + "title": "Reasoning" + }, + "intention": { + "type": "string", + "nullable": true, + "title": "Intention" + }, + "response": { + "type": "string", + "nullable": true, + "title": "Response" + }, + "element_id": { + "type": "string", + "nullable": true, + "title": "Element Id" + }, + "skyvern_element_hash": { + "type": "string", + "nullable": true, + "title": "Skyvern Element Hash" + }, + "skyvern_element_data": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Skyvern Element Data" + }, + "screenshot_artifact_id": { + "type": "string", + "nullable": true, + "title": "Screenshot Artifact Id" + }, + "tool_call_id": { + "type": "string", + "nullable": true, + "title": "Tool Call Id" + }, + "xpath": { + "type": "string", + "nullable": true, + "title": "Xpath" + }, + "errors": { + "items": { + "$ref": "#/components/schemas/UserDefinedError" + }, + "type": "array", + "nullable": true, + "title": "Errors" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "file_name": { + "type": "string", + "nullable": true, + "title": "File Name" + }, + "file_url": { + "type": "string", + "nullable": true, + "title": "File Url" + }, + "download": { + "type": "boolean", + "nullable": true, + "title": "Download" + }, + "download_triggered": { + "type": "boolean", + "nullable": true, + "title": "Download Triggered" + }, + "downloaded_files": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Downloaded Files" + }, + "is_upload_file_tag": { + "type": "boolean", + "nullable": true, + "title": "Is Upload File Tag" + }, + "text": { + "type": "string", + "nullable": true, + "title": "Text" + }, + "input_or_select_context": { + "$ref": "#/components/schemas/InputOrSelectContext", + "nullable": true + }, + "option": { + "$ref": "#/components/schemas/SelectOption", + "nullable": true + }, + "is_checked": { + "type": "boolean", + "nullable": true, + "title": "Is Checked" + }, + "verified": { + "type": "boolean", + "title": "Verified", + "default": false + }, + "click_context": { + "$ref": "#/components/schemas/ClickContext", + "nullable": true + }, + "totp_timing_info": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Totp Timing Info" + }, + "has_mini_agent": { + "type": "boolean", + "nullable": true, + "title": "Has Mini Agent" + }, + "created_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Modified At" + }, + "created_by": { + "type": "string", + "nullable": true, + "title": "Created By" + } + }, + "type": "object", + "required": [ + "action_type" + ], + "title": "Action" + }, + "ActionBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "action" + ], + "title": "Block Type", + "default": "action" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "ActionBlock" + }, + "ActionBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "action" + ], + "title": "Block Type", + "default": "action" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "ActionBlockYAML" + }, + "ActionStatus": { + "type": "string", + "enum": [ + "pending", + "skipped", + "failed", + "completed" + ], + "title": "ActionStatus" + }, + "ActionType": { + "type": "string", + "enum": [ + "click", + "input_text", + "upload_file", + "download_file", + "select_option", + "checkbox", + "wait", + "hover", + "null_action", + "solve_captcha", + "terminate", + "complete", + "reload_page", + "close_page", + "extract", + "verification_code", + "goto_url", + "scroll", + "keypress", + "move", + "drag", + "left_mouse" + ], + "title": "ActionType" + }, + "Artifact": { + "properties": { + "created_at": { + "type": "string", + "title": "Created At", + "description": "The creation datetime of the task.", + "example": "2023-01-01T00:00:00Z" + }, + "modified_at": { + "type": "string", + "title": "Modified At", + "description": "The modification datetime of the task.", + "example": "2023-01-01T00:00:00Z" + }, + "artifact_id": { + "type": "string", + "title": "Artifact Id" + }, + "artifact_type": { + "$ref": "#/components/schemas/ArtifactType" + }, + "uri": { + "type": "string", + "title": "Uri" + }, + "task_id": { + "type": "string", + "nullable": true, + "title": "Task Id" + }, + "step_id": { + "type": "string", + "nullable": true, + "title": "Step Id" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id" + }, + "workflow_run_block_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Block Id" + }, + "run_id": { + "type": "string", + "nullable": true, + "title": "Run Id" + }, + "observer_cruise_id": { + "type": "string", + "nullable": true, + "title": "Observer Cruise Id" + }, + "observer_thought_id": { + "type": "string", + "nullable": true, + "title": "Observer Thought Id" + }, + "ai_suggestion_id": { + "type": "string", + "nullable": true, + "title": "Ai Suggestion Id" + }, + "signed_url": { + "type": "string", + "nullable": true, + "title": "Signed Url" + }, + "organization_id": { + "type": "string", + "title": "Organization Id" + } + }, + "type": "object", + "required": [ + "created_at", + "modified_at", + "artifact_id", + "artifact_type", + "uri", + "organization_id" + ], + "title": "Artifact" + }, + "ArtifactType": { + "type": "string", + "enum": [ + "recording", + "browser_console_log", + "skyvern_log", + "skyvern_log_raw", + "screenshot", + "screenshot_llm", + "screenshot_action", + "screenshot_final", + "llm_prompt", + "llm_request", + "llm_response", + "llm_response_parsed", + "llm_response_rendered", + "visible_elements_id_css_map", + "visible_elements_id_frame_map", + "visible_elements_tree", + "visible_elements_tree_trimmed", + "visible_elements_tree_in_prompt", + "hashed_href_map", + "visible_elements_id_xpath_map", + "html", + "html_scrape", + "html_action", + "trace", + "har", + "script_file", + "pdf" + ], + "title": "ArtifactType" + }, + "AzureSecretParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "azure_secret" + ], + "title": "Parameter Type", + "default": "azure_secret" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "azure_secret_parameter_id": { + "type": "string", + "title": "Azure Secret Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "azure_key": { + "type": "string", + "title": "Azure Key" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "azure_secret_parameter_id", + "workflow_id", + "azure_key", + "created_at", + "modified_at" + ], + "title": "AzureSecretParameter" + }, + "AzureVaultCredentialParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "azure_vault_credential" + ], + "title": "Parameter Type", + "default": "azure_vault_credential" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "azure_vault_credential_parameter_id": { + "type": "string", + "title": "Azure Vault Credential Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "vault_name": { + "type": "string", + "title": "Vault Name" + }, + "username_key": { + "type": "string", + "title": "Username Key" + }, + "password_key": { + "type": "string", + "title": "Password Key" + }, + "totp_secret_key": { + "type": "string", + "nullable": true, + "title": "Totp Secret Key" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "azure_vault_credential_parameter_id", + "workflow_id", + "vault_name", + "username_key", + "password_key", + "created_at", + "modified_at" + ], + "title": "AzureVaultCredentialParameter" + }, + "AzureVaultCredentialParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "azure_vault_credential" + ], + "title": "Parameter Type", + "default": "azure_vault_credential" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "vault_name": { + "type": "string", + "title": "Vault Name" + }, + "username_key": { + "type": "string", + "title": "Username Key" + }, + "password_key": { + "type": "string", + "title": "Password Key" + }, + "totp_secret_key": { + "type": "string", + "nullable": true, + "title": "Totp Secret Key" + } + }, + "type": "object", + "required": [ + "key", + "vault_name", + "username_key", + "password_key" + ], + "title": "AzureVaultCredentialParameterYAML" + }, + "BillingStateResponse": { + "properties": { + "billing_id": { + "type": "string", + "title": "Billing Id" + }, + "organization_id": { + "type": "string", + "title": "Organization Id" + }, + "plan_tier": { + "$ref": "#/components/schemas/PlanTier" + }, + "current_period_start": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Current Period Start" + }, + "current_period_end": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Current Period End" + }, + "included_credits_this_period": { + "type": "integer", + "title": "Included Credits This Period" + }, + "credits_consumed_this_period": { + "type": "integer", + "title": "Credits Consumed This Period" + }, + "cached_credits_consumed_this_period": { + "type": "integer", + "title": "Cached Credits Consumed This Period" + }, + "overage_enabled": { + "type": "boolean", + "title": "Overage Enabled" + }, + "browser_uptime_seconds_consumed": { + "type": "integer", + "title": "Browser Uptime Seconds Consumed" + }, + "topup_credits_total": { + "type": "integer", + "title": "Topup Credits Total" + }, + "topup_credits_used": { + "type": "integer", + "title": "Topup Credits Used" + }, + "topup_credits_remaining": { + "type": "integer", + "title": "Topup Credits Remaining" + }, + "credits_remaining": { + "type": "integer", + "title": "Credits Remaining" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + } + }, + "type": "object", + "required": [ + "billing_id", + "organization_id", + "plan_tier", + "current_period_start", + "current_period_end", + "included_credits_this_period", + "credits_consumed_this_period", + "cached_credits_consumed_this_period", + "overage_enabled", + "browser_uptime_seconds_consumed", + "topup_credits_total", + "topup_credits_used", + "topup_credits_remaining", + "credits_remaining", + "created_at", + "modified_at" + ], + "title": "BillingStateResponse" + }, + "BitwardenCreditCardDataParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "bitwarden_credit_card_data" + ], + "title": "Parameter Type", + "default": "bitwarden_credit_card_data" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "bitwarden_credit_card_data_parameter_id": { + "type": "string", + "title": "Bitwarden Credit Card Data Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "bitwarden_client_id_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Id Aws Secret Key" + }, + "bitwarden_client_secret_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Secret Aws Secret Key" + }, + "bitwarden_master_password_aws_secret_key": { + "type": "string", + "title": "Bitwarden Master Password Aws Secret Key" + }, + "bitwarden_collection_id": { + "type": "string", + "title": "Bitwarden Collection Id" + }, + "bitwarden_item_id": { + "type": "string", + "title": "Bitwarden Item Id" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "bitwarden_credit_card_data_parameter_id", + "workflow_id", + "bitwarden_client_id_aws_secret_key", + "bitwarden_client_secret_aws_secret_key", + "bitwarden_master_password_aws_secret_key", + "bitwarden_collection_id", + "bitwarden_item_id", + "created_at", + "modified_at" + ], + "title": "BitwardenCreditCardDataParameter" + }, + "BitwardenCreditCardDataParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "bitwarden_credit_card_data" + ], + "title": "Parameter Type", + "default": "bitwarden_credit_card_data" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "bitwarden_client_id_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Id Aws Secret Key" + }, + "bitwarden_client_secret_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Secret Aws Secret Key" + }, + "bitwarden_master_password_aws_secret_key": { + "type": "string", + "title": "Bitwarden Master Password Aws Secret Key" + }, + "bitwarden_collection_id": { + "type": "string", + "title": "Bitwarden Collection Id" + }, + "bitwarden_item_id": { + "type": "string", + "title": "Bitwarden Item Id" + } + }, + "type": "object", + "required": [ + "key", + "bitwarden_client_id_aws_secret_key", + "bitwarden_client_secret_aws_secret_key", + "bitwarden_master_password_aws_secret_key", + "bitwarden_collection_id", + "bitwarden_item_id" + ], + "title": "BitwardenCreditCardDataParameterYAML" + }, + "BitwardenLoginCredentialParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "bitwarden_login_credential" + ], + "title": "Parameter Type", + "default": "bitwarden_login_credential" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "bitwarden_login_credential_parameter_id": { + "type": "string", + "title": "Bitwarden Login Credential Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "bitwarden_client_id_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Id Aws Secret Key" + }, + "bitwarden_client_secret_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Secret Aws Secret Key" + }, + "bitwarden_master_password_aws_secret_key": { + "type": "string", + "title": "Bitwarden Master Password Aws Secret Key" + }, + "url_parameter_key": { + "type": "string", + "nullable": true, + "title": "Url Parameter Key" + }, + "bitwarden_collection_id": { + "type": "string", + "nullable": true, + "title": "Bitwarden Collection Id" + }, + "bitwarden_item_id": { + "type": "string", + "nullable": true, + "title": "Bitwarden Item Id" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "bitwarden_login_credential_parameter_id", + "workflow_id", + "bitwarden_client_id_aws_secret_key", + "bitwarden_client_secret_aws_secret_key", + "bitwarden_master_password_aws_secret_key", + "created_at", + "modified_at" + ], + "title": "BitwardenLoginCredentialParameter" + }, + "BitwardenLoginCredentialParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "bitwarden_login_credential" + ], + "title": "Parameter Type", + "default": "bitwarden_login_credential" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "bitwarden_client_id_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Id Aws Secret Key" + }, + "bitwarden_client_secret_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Secret Aws Secret Key" + }, + "bitwarden_master_password_aws_secret_key": { + "type": "string", + "title": "Bitwarden Master Password Aws Secret Key" + }, + "url_parameter_key": { + "type": "string", + "nullable": true, + "title": "Url Parameter Key" + }, + "bitwarden_collection_id": { + "type": "string", + "nullable": true, + "title": "Bitwarden Collection Id" + }, + "bitwarden_item_id": { + "type": "string", + "nullable": true, + "title": "Bitwarden Item Id" + } + }, + "type": "object", + "required": [ + "key", + "bitwarden_client_id_aws_secret_key", + "bitwarden_client_secret_aws_secret_key", + "bitwarden_master_password_aws_secret_key" + ], + "title": "BitwardenLoginCredentialParameterYAML" + }, + "BitwardenSensitiveInformationParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "bitwarden_sensitive_information" + ], + "title": "Parameter Type", + "default": "bitwarden_sensitive_information" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "bitwarden_sensitive_information_parameter_id": { + "type": "string", + "title": "Bitwarden Sensitive Information Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "bitwarden_client_id_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Id Aws Secret Key" + }, + "bitwarden_client_secret_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Secret Aws Secret Key" + }, + "bitwarden_master_password_aws_secret_key": { + "type": "string", + "title": "Bitwarden Master Password Aws Secret Key" + }, + "bitwarden_collection_id": { + "type": "string", + "title": "Bitwarden Collection Id" + }, + "bitwarden_identity_key": { + "type": "string", + "title": "Bitwarden Identity Key" + }, + "bitwarden_identity_fields": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Bitwarden Identity Fields" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "bitwarden_sensitive_information_parameter_id", + "workflow_id", + "bitwarden_client_id_aws_secret_key", + "bitwarden_client_secret_aws_secret_key", + "bitwarden_master_password_aws_secret_key", + "bitwarden_collection_id", + "bitwarden_identity_key", + "bitwarden_identity_fields", + "created_at", + "modified_at" + ], + "title": "BitwardenSensitiveInformationParameter" + }, + "BitwardenSensitiveInformationParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "bitwarden_sensitive_information" + ], + "title": "Parameter Type", + "default": "bitwarden_sensitive_information" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "bitwarden_client_id_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Id Aws Secret Key" + }, + "bitwarden_client_secret_aws_secret_key": { + "type": "string", + "title": "Bitwarden Client Secret Aws Secret Key" + }, + "bitwarden_master_password_aws_secret_key": { + "type": "string", + "title": "Bitwarden Master Password Aws Secret Key" + }, + "bitwarden_collection_id": { + "type": "string", + "title": "Bitwarden Collection Id" + }, + "bitwarden_identity_key": { + "type": "string", + "title": "Bitwarden Identity Key" + }, + "bitwarden_identity_fields": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Bitwarden Identity Fields" + } + }, + "type": "object", + "required": [ + "key", + "bitwarden_client_id_aws_secret_key", + "bitwarden_client_secret_aws_secret_key", + "bitwarden_master_password_aws_secret_key", + "bitwarden_collection_id", + "bitwarden_identity_key", + "bitwarden_identity_fields" + ], + "title": "BitwardenSensitiveInformationParameterYAML" + }, + "BlockType": { + "type": "string", + "enum": [ + "task", + "task_v2", + "for_loop", + "conditional", + "code", + "text_prompt", + "download_to_s3", + "upload_to_s3", + "file_upload", + "send_email", + "file_url_parser", + "validation", + "action", + "navigation", + "extraction", + "login", + "wait", + "file_download", + "goto_url", + "pdf_parser", + "http_request", + "human_interaction", + "print_page" + ], + "title": "BlockType" + }, + "Body_upload_file_v1_upload_file_post": { + "properties": { + "file": { + "type": "string", + "format": "binary", + "title": "File" + } + }, + "type": "object", + "required": [ + "file" + ], + "title": "Body_upload_file_v1_upload_file_post" + }, + "BranchCondition": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "criteria": { + "oneOf": [ + { + "$ref": "#/components/schemas/JinjaBranchCriteria" + }, + { + "$ref": "#/components/schemas/PromptBranchCriteria" + } + ], + "discriminator": { + "propertyName": "criteria_type", + "mapping": { + "jinja2_template": "#/components/schemas/JinjaBranchCriteria", + "prompt": "#/components/schemas/PromptBranchCriteria" + } + }, + "nullable": true, + "title": "Criteria" + }, + "next_block_label": { + "type": "string", + "nullable": true, + "title": "Next Block Label" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "is_default": { + "type": "boolean", + "title": "Is Default", + "default": false + } + }, + "type": "object", + "title": "BranchCondition", + "description": "Represents a single conditional branch edge within a ConditionalBlock." + }, + "BranchConditionYAML": { + "properties": { + "criteria": { + "$ref": "#/components/schemas/BranchCriteriaYAML", + "nullable": true + }, + "next_block_label": { + "type": "string", + "nullable": true, + "title": "Next Block Label" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "is_default": { + "type": "boolean", + "title": "Is Default", + "default": false + } + }, + "type": "object", + "title": "BranchConditionYAML" + }, + "BranchCriteriaYAML": { + "properties": { + "criteria_type": { + "type": "string", + "enum": [ + "jinja2_template", + "prompt" + ], + "title": "Criteria Type", + "default": "jinja2_template" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + } + }, + "type": "object", + "required": [ + "expression" + ], + "title": "BranchCriteriaYAML" + }, + "BrowserProfile": { + "properties": { + "browser_profile_id": { + "type": "string", + "title": "Browser Profile Id" + }, + "organization_id": { + "type": "string", + "title": "Organization Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "browser_profile_id", + "organization_id", + "name", + "created_at", + "modified_at" + ], + "title": "BrowserProfile" + }, + "BrowserSessionResponse": { + "properties": { + "browser_session_id": { + "type": "string", + "title": "Browser Session Id", + "description": "Unique identifier for the browser session. browser_session_id starts with `pbs_`.", + "example": "pbs_123456" + }, + "organization_id": { + "type": "string", + "title": "Organization Id", + "description": "ID of the organization that owns this session" + }, + "status": { + "type": "string", + "nullable": true, + "title": "Status", + "description": "Current status of the browser session", + "example": "created" + }, + "runnable_type": { + "type": "string", + "nullable": true, + "title": "Runnable Type", + "description": "Type of the current runnable associated with this session (workflow, task etc)", + "example": "task" + }, + "runnable_id": { + "type": "string", + "nullable": true, + "title": "Runnable Id", + "description": "ID of the current runnable", + "example": "tsk_123456" + }, + "timeout": { + "type": "integer", + "nullable": true, + "title": "Timeout", + "description": "Timeout in minutes for the session. Timeout is applied after the session is started. Defaults to 60 minutes.", + "example": 60 + }, + "browser_address": { + "type": "string", + "nullable": true, + "title": "Browser Address", + "description": "Url for connecting to the browser", + "example": "http://localhost:9222" + }, + "app_url": { + "type": "string", + "nullable": true, + "title": "App Url", + "description": "Url for the browser session page", + "example": "https://app.skyvern.com/browser-session/pbs_123456" + }, + "extensions": { + "items": { + "$ref": "#/components/schemas/Extensions" + }, + "type": "array", + "nullable": true, + "title": "Extensions", + "description": "A list of extensions installed in the browser session." + }, + "browser_type": { + "$ref": "#/components/schemas/PersistentBrowserType", + "nullable": true, + "description": "The type of browser used for the session." + }, + "vnc_streaming_supported": { + "type": "boolean", + "title": "Vnc Streaming Supported", + "description": "Whether the browser session supports VNC streaming", + "default": false + }, + "download_path": { + "type": "string", + "nullable": true, + "title": "Download Path", + "description": "The path where the browser session downloads files" + }, + "downloaded_files": { + "items": { + "$ref": "#/components/schemas/FileInfo" + }, + "type": "array", + "nullable": true, + "title": "Downloaded Files", + "description": "The list of files downloaded by the browser session" + }, + "recordings": { + "items": { + "$ref": "#/components/schemas/FileInfo" + }, + "type": "array", + "nullable": true, + "title": "Recordings", + "description": "The list of video recordings from the browser session" + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Started At", + "description": "Timestamp when the session was started" + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completed At", + "description": "Timestamp when the session was completed" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Timestamp when the session was created (the timestamp for the initial request)" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At", + "description": "Timestamp when the session was last modified" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At", + "description": "Timestamp when the session was deleted, if applicable" + } + }, + "type": "object", + "required": [ + "browser_session_id", + "organization_id", + "created_at", + "modified_at" + ], + "title": "BrowserSessionResponse", + "description": "Response model for browser session information." + }, + "ChangeTierRequest": { + "properties": { + "tier": { + "$ref": "#/components/schemas/PlanTier" + } + }, + "type": "object", + "required": [ + "tier" + ], + "title": "ChangeTierRequest" + }, + "ChangeTierResponse": { + "properties": { + "status": { + "type": "string", + "title": "Status" + }, + "tier": { + "type": "string", + "title": "Tier" + }, + "redirect_url": { + "type": "string", + "nullable": true, + "title": "Redirect Url" + } + }, + "type": "object", + "required": [ + "status", + "tier" + ], + "title": "ChangeTierResponse" + }, + "CheckoutSessionResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "id", + "url" + ], + "title": "CheckoutSessionResponse" + }, + "CheckoutSubscriptionRequest": { + "properties": { + "tier": { + "$ref": "#/components/schemas/PlanTier" + } + }, + "type": "object", + "required": [ + "tier" + ], + "title": "CheckoutSubscriptionRequest" + }, + "ClickAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "ai_click" + ], + "title": "Type", + "default": "ai_click" + }, + "selector": { + "type": "string", + "nullable": true, + "title": "Selector", + "description": "CSS selector for the element", + "default": "" + }, + "intention": { + "type": "string", + "title": "Intention", + "description": "The intention or goal of the click", + "default": "" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Data", + "description": "Additional context data", + "nullable": true + }, + "timeout": { + "type": "number", + "title": "Timeout", + "description": "Timeout in milliseconds", + "default": 10000 + } + }, + "type": "object", + "title": "ClickAction", + "description": "Click action parameters." + }, + "ClickContext": { + "properties": { + "thought": { + "type": "string", + "nullable": true, + "title": "Thought" + }, + "single_option_click": { + "type": "boolean", + "nullable": true, + "title": "Single Option Click" + } + }, + "type": "object", + "title": "ClickContext" + }, + "CodeBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "code" + ], + "title": "Block Type", + "default": "code" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "code": { + "type": "string", + "title": "Code" + }, + "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", + "code" + ], + "title": "CodeBlock" + }, + "CodeBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "code" + ], + "title": "Block Type", + "default": "code" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "code": { + "type": "string", + "title": "Code" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + } + }, + "type": "object", + "required": [ + "label", + "code" + ], + "title": "CodeBlockYAML" + }, + "ConditionalBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "conditional" + ], + "title": "Block Type", + "default": "conditional" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "branch_conditions": { + "items": { + "$ref": "#/components/schemas/BranchCondition" + }, + "type": "array", + "title": "Branch Conditions" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "ConditionalBlock", + "description": "Branching block that selects the next block label based on list-ordered conditions." + }, + "ConditionalBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "conditional" + ], + "title": "Block Type", + "default": "conditional" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "branch_conditions": { + "items": { + "$ref": "#/components/schemas/BranchConditionYAML" + }, + "type": "array", + "title": "Branch Conditions" + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "ConditionalBlockYAML" + }, + "ContextParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "context" + ], + "title": "Parameter Type", + "default": "context" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "source": { + "anyOf": [ + { + "$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" + } + ], + "title": "Source" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + } + ], + "title": "Value", + "nullable": true + } + }, + "type": "object", + "required": [ + "key", + "source" + ], + "title": "ContextParameter" + }, + "ContextParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "context" + ], + "title": "Parameter Type", + "default": "context" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "source_parameter_key": { + "type": "string", + "title": "Source Parameter Key" + } + }, + "type": "object", + "required": [ + "key", + "source_parameter_key" + ], + "title": "ContextParameterYAML" + }, + "CreateBrowserProfileRequest": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name for the browser profile" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description", + "description": "Optional profile description" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "Persistent browser session to convert into a profile" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id", + "description": "Workflow run whose persisted session should be captured" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "CreateBrowserProfileRequest" + }, + "CreateBrowserSessionRequest": { + "properties": { + "timeout": { + "type": "integer", + "maximum": 1440, + "minimum": 5, + "nullable": true, + "title": "Timeout", + "description": "Timeout in minutes for the session. Timeout is applied after the session is started. Must be between 5 and 1440. Defaults to 60.", + "default": 60 + }, + "proxy_location": { + "$ref": "#/components/schemas/ProxyLocation", + "nullable": true, + "description": "\nGeographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud.\n\nAvailable geotargeting options:\n- RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy.\n- RESIDENTIAL_ES: Spain\n- RESIDENTIAL_IE: Ireland\n- RESIDENTIAL_GB: United Kingdom\n- RESIDENTIAL_IN: India\n- RESIDENTIAL_JP: Japan\n- RESIDENTIAL_FR: France\n- RESIDENTIAL_DE: Germany\n- RESIDENTIAL_NZ: New Zealand\n- RESIDENTIAL_PH: Philippines\n- RESIDENTIAL_ZA: South Africa\n- RESIDENTIAL_AR: Argentina\n- RESIDENTIAL_AU: Australia\n- RESIDENTIAL_ISP: ISP proxy\n- US-CA: California (deprecated, routes through RESIDENTIAL_ISP)\n- US-NY: New York (deprecated, routes through RESIDENTIAL_ISP)\n- US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP)\n- US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP)\n- US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP)\n- NONE: No proxy\n" + }, + "extensions": { + "items": { + "$ref": "#/components/schemas/Extensions" + }, + "type": "array", + "nullable": true, + "title": "Extensions", + "description": "A list of extensions to install in the browser session." + }, + "browser_type": { + "$ref": "#/components/schemas/PersistentBrowserType", + "nullable": true, + "description": "The type of browser to use for the session." + } + }, + "type": "object", + "title": "CreateBrowserSessionRequest" + }, + "CreateCredentialRequest": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of the credential", + "example": "Amazon Login" + }, + "credential_type": { + "$ref": "#/components/schemas/skyvern__forge__sdk__schemas__credentials__CredentialType", + "description": "Type of credential to create" + }, + "credential": { + "anyOf": [ + { + "$ref": "#/components/schemas/NonEmptyPasswordCredential" + }, + { + "$ref": "#/components/schemas/NonEmptyCreditCardCredential" + }, + { + "$ref": "#/components/schemas/SecretCredential" + } + ], + "title": "Credential", + "description": "The credential data to store", + "example": { + "password": "securepassword123", + "username": "user@example.com" + } + } + }, + "type": "object", + "required": [ + "name", + "credential_type", + "credential" + ], + "title": "CreateCredentialRequest", + "description": "Request model for creating a new credential." + }, + "CreateScriptRequest": { + "properties": { + "workflow_id": { + "type": "string", + "nullable": true, + "title": "Workflow Id", + "description": "Associated workflow ID" + }, + "run_id": { + "type": "string", + "nullable": true, + "title": "Run Id", + "description": "Associated run ID" + }, + "files": { + "items": { + "$ref": "#/components/schemas/ScriptFileCreate" + }, + "type": "array", + "nullable": true, + "title": "Files", + "description": "Array of files to include in the script", + "example": { + "content": "cHJpbnQoIkhlbGxvLCBXb3JsZCEiKQ==", + "encoding": "base64", + "mime_type": "text/x-python", + "path": "main.py" + } + } + }, + "type": "object", + "title": "CreateScriptRequest" + }, + "CreateScriptResponse": { + "properties": { + "script_id": { + "type": "string", + "title": "Script Id", + "description": "Unique script identifier", + "example": "s_abc123" + }, + "version": { + "type": "integer", + "title": "Version", + "description": "Script version number", + "example": 1 + }, + "run_id": { + "type": "string", + "nullable": true, + "title": "Run Id", + "description": "ID of the workflow run or task run that generated this script" + }, + "file_count": { + "type": "integer", + "title": "File Count", + "description": "Total number of files in the script" + }, + "file_tree": { + "additionalProperties": { + "$ref": "#/components/schemas/FileNode" + }, + "type": "object", + "title": "File Tree", + "description": "Hierarchical file tree structure" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Timestamp when the script was created" + } + }, + "type": "object", + "required": [ + "script_id", + "version", + "file_count", + "file_tree", + "created_at" + ], + "title": "CreateScriptResponse" + }, + "CredentialParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "credential" + ], + "title": "Parameter Type", + "default": "credential" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "credential_parameter_id": { + "type": "string", + "title": "Credential Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "credential_id": { + "type": "string", + "title": "Credential Id" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "credential_parameter_id", + "workflow_id", + "credential_id", + "created_at", + "modified_at" + ], + "title": "CredentialParameter" + }, + "CredentialParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "credential" + ], + "title": "Parameter Type", + "default": "credential" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "credential_id": { + "type": "string", + "title": "Credential Id" + } + }, + "type": "object", + "required": [ + "key", + "credential_id" + ], + "title": "CredentialParameterYAML" + }, + "CredentialResponse": { + "properties": { + "credential_id": { + "type": "string", + "title": "Credential Id", + "description": "Unique identifier for the credential", + "example": "cred_1234567890" + }, + "credential": { + "anyOf": [ + { + "$ref": "#/components/schemas/PasswordCredentialResponse" + }, + { + "$ref": "#/components/schemas/CreditCardCredentialResponse" + }, + { + "$ref": "#/components/schemas/SecretCredentialResponse" + } + ], + "title": "Credential", + "description": "The credential data" + }, + "credential_type": { + "$ref": "#/components/schemas/CredentialType-Output", + "description": "Type of the credential" + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the credential", + "example": "Amazon Login" + } + }, + "type": "object", + "required": [ + "credential_id", + "credential", + "credential_type", + "name" + ], + "title": "CredentialResponse", + "description": "Response model for credential operations." + }, + "CredentialType-Output": { + "type": "string", + "enum": [ + "password", + "credit_card", + "secret" + ], + "title": "CredentialType", + "description": "Type of credential stored in the system." + }, + "CreditCardCredentialResponse": { + "properties": { + "last_four": { + "type": "string", + "title": "Last Four", + "description": "Last four digits of the credit card number", + "example": "1234" + }, + "brand": { + "type": "string", + "title": "Brand", + "description": "Brand of the credit card", + "example": "visa" + } + }, + "type": "object", + "required": [ + "last_four", + "brand" + ], + "title": "CreditCardCredentialResponse", + "description": "Response model for credit card credentials, containing only the last four digits and brand." + }, + "DeployScriptRequest": { + "properties": { + "files": { + "items": { + "$ref": "#/components/schemas/ScriptFileCreate" + }, + "type": "array", + "title": "Files", + "description": "Array of files to include in the script", + "example": { + "content": "cHJpbnQoIkhlbGxvLCBXb3JsZCEiKQ==", + "encoding": "base64", + "mime_type": "text/x-python", + "path": "src/main.py" + } + } + }, + "type": "object", + "required": [ + "files" + ], + "title": "DeployScriptRequest", + "description": "Request model for deploying a script with updated files." + }, + "DownloadFilesRequest": { + "properties": { + "url": { + "type": "string", + "nullable": true, + "title": "Url", + "description": "Website URL" + }, + "webhook_url": { + "type": "string", + "nullable": true, + "title": "Webhook Url", + "description": "Webhook URL to send status updates" + }, + "proxy_location": { + "$ref": "#/components/schemas/ProxyLocation", + "nullable": true, + "description": "Proxy location to use" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "Identifier for TOTP (Time-based One-Time Password) if required" + }, + "totp_url": { + "type": "string", + "nullable": true, + "title": "Totp Url", + "description": "TOTP URL to fetch one-time passwords" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "ID of the browser session to use, which is prefixed by `pbs_` e.g. `pbs_123456`", + "example": "pbs_123456" + }, + "browser_profile_id": { + "type": "string", + "nullable": true, + "title": "Browser Profile Id", + "description": "ID of a browser profile to reuse for this run" + }, + "browser_address": { + "type": "string", + "nullable": true, + "title": "Browser Address", + "description": "The CDP address for the task.", + "example": "http://127.0.0.1:9222" + }, + "extra_http_headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Extra Http Headers", + "description": "Additional HTTP headers to include in requests" + }, + "max_screenshot_scrolling_times": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolling Times", + "description": "Maximum number of times to scroll for screenshots" + }, + "navigation_goal": { + "type": "string", + "title": "Navigation Goal", + "description": "Instructions for navigating to and downloading the file" + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix", + "description": "Suffix or complete filename for the downloaded file" + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout", + "description": "Timeout in seconds for the download operation" + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run", + "description": "Maximum number of steps to execute" + } + }, + "type": "object", + "required": [ + "navigation_goal" + ], + "title": "DownloadFilesRequest" + }, + "DownloadToS3Block": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "download_to_s3" + ], + "title": "Block Type", + "default": "download_to_s3" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "url" + ], + "title": "DownloadToS3Block" + }, + "DownloadToS3BlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "download_to_s3" + ], + "title": "Block Type", + "default": "download_to_s3" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "label", + "url" + ], + "title": "DownloadToS3BlockYAML" + }, + "Extensions": { + "type": "string", + "enum": [ + "ad-blocker", + "captcha-solver" + ], + "title": "Extensions" + }, + "ExtractAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "extract" + ], + "title": "Type", + "default": "extract" + }, + "prompt": { + "type": "string", + "title": "Prompt", + "description": "Extraction prompt", + "default": "" + }, + "extract_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Extract Schema", + "description": "Schema for extraction", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping", + "description": "Error code mapping for extraction" + }, + "intention": { + "type": "string", + "nullable": true, + "title": "Intention", + "description": "The intention or goal of the extraction" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Data", + "description": "Additional context data", + "nullable": true + } + }, + "type": "object", + "title": "ExtractAction", + "description": "Extract data action parameters." + }, + "ExtractionBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "extraction" + ], + "title": "Block Type", + "default": "extraction" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "data_extraction_goal" + ], + "title": "ExtractionBlock" + }, + "ExtractionBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "extraction" + ], + "title": "Block Type", + "default": "extraction" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "data_extraction_goal": { + "type": "string", + "title": "Data Extraction Goal" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + } + }, + "type": "object", + "required": [ + "label", + "data_extraction_goal" + ], + "title": "ExtractionBlockYAML" + }, + "FileDownloadBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "file_download" + ], + "title": "Block Type", + "default": "file_download" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "FileDownloadBlock" + }, + "FileDownloadBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "file_download" + ], + "title": "Block Type", + "default": "file_download" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "navigation_goal": { + "type": "string", + "title": "Navigation Goal" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "navigation_goal" + ], + "title": "FileDownloadBlockYAML" + }, + "FileEncoding": { + "type": "string", + "enum": [ + "base64", + "utf-8" + ], + "title": "FileEncoding", + "description": "Supported file content encodings." + }, + "FileInfo": { + "properties": { + "url": { + "type": "string", + "title": "Url", + "description": "URL to access the file" + }, + "checksum": { + "type": "string", + "nullable": true, + "title": "Checksum", + "description": "SHA-256 checksum of the file" + }, + "filename": { + "type": "string", + "nullable": true, + "title": "Filename", + "description": "Original filename" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Modified At", + "description": "Modified time of the file" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "FileInfo", + "description": "Information about a downloaded file, including URL and checksum." + }, + "FileNode": { + "properties": { + "type": { + "type": "string", + "title": "Type", + "description": "Type of node: 'file' or 'directory'" + }, + "size": { + "type": "integer", + "nullable": true, + "title": "Size", + "description": "File size in bytes" + }, + "mime_type": { + "type": "string", + "nullable": true, + "title": "Mime Type", + "description": "MIME type of the file" + }, + "content_hash": { + "type": "string", + "nullable": true, + "title": "Content Hash", + "description": "SHA256 hash of file content" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Timestamp when the file was created" + }, + "children": { + "additionalProperties": { + "$ref": "#/components/schemas/FileNode" + }, + "type": "object", + "nullable": true, + "title": "Children", + "description": "Child nodes for directories" + } + }, + "type": "object", + "required": [ + "type", + "created_at" + ], + "title": "FileNode", + "description": "Model representing a file or directory in the file tree." + }, + "FileParserBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "file_url_parser" + ], + "title": "Block Type", + "default": "file_url_parser" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "file_url": { + "type": "string", + "title": "File Url" + }, + "file_type": { + "$ref": "#/components/schemas/FileType" + }, + "json_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Json Schema" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "file_url", + "file_type" + ], + "title": "FileParserBlock" + }, + "FileParserBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "file_url_parser" + ], + "title": "Block Type", + "default": "file_url_parser" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "file_url": { + "type": "string", + "title": "File Url" + }, + "file_type": { + "$ref": "#/components/schemas/FileType" + }, + "json_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Json Schema" + } + }, + "type": "object", + "required": [ + "label", + "file_url", + "file_type" + ], + "title": "FileParserBlockYAML" + }, + "FileStorageType": { + "type": "string", + "enum": [ + "s3", + "azure" + ], + "title": "FileStorageType" + }, + "FileType": { + "type": "string", + "enum": [ + "csv", + "excel", + "pdf" + ], + "title": "FileType" + }, + "FileUploadBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "file_upload" + ], + "title": "Block Type", + "default": "file_upload" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "storage_type": { + "$ref": "#/components/schemas/FileStorageType", + "default": "s3" + }, + "s3_bucket": { + "type": "string", + "nullable": true, + "title": "S3 Bucket" + }, + "aws_access_key_id": { + "type": "string", + "nullable": true, + "title": "Aws Access Key Id" + }, + "aws_secret_access_key": { + "type": "string", + "nullable": true, + "title": "Aws Secret Access Key" + }, + "region_name": { + "type": "string", + "nullable": true, + "title": "Region Name" + }, + "azure_storage_account_name": { + "type": "string", + "nullable": true, + "title": "Azure Storage Account Name" + }, + "azure_storage_account_key": { + "type": "string", + "nullable": true, + "title": "Azure Storage Account Key" + }, + "azure_blob_container_name": { + "type": "string", + "nullable": true, + "title": "Azure Blob Container Name" + }, + "path": { + "type": "string", + "nullable": true, + "title": "Path" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "FileUploadBlock" + }, + "FileUploadBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "file_upload" + ], + "title": "Block Type", + "default": "file_upload" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "storage_type": { + "$ref": "#/components/schemas/FileStorageType", + "default": "s3" + }, + "s3_bucket": { + "type": "string", + "nullable": true, + "title": "S3 Bucket" + }, + "aws_access_key_id": { + "type": "string", + "nullable": true, + "title": "Aws Access Key Id" + }, + "aws_secret_access_key": { + "type": "string", + "nullable": true, + "title": "Aws Secret Access Key" + }, + "region_name": { + "type": "string", + "nullable": true, + "title": "Region Name" + }, + "azure_storage_account_name": { + "type": "string", + "nullable": true, + "title": "Azure Storage Account Name" + }, + "azure_storage_account_key": { + "type": "string", + "nullable": true, + "title": "Azure Storage Account Key" + }, + "azure_blob_container_name": { + "type": "string", + "nullable": true, + "title": "Azure Blob Container Name" + }, + "azure_folder_path": { + "type": "string", + "nullable": true, + "title": "Azure Folder Path" + }, + "path": { + "type": "string", + "nullable": true, + "title": "Path" + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "FileUploadBlockYAML" + }, + "ForLoopBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "for_loop" + ], + "title": "Block Type", + "default": "for_loop" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "loop_blocks": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ConditionalBlock" + }, + { + "$ref": "#/components/schemas/ForLoopBlock" + }, + { + "$ref": "#/components/schemas/TaskBlock" + }, + { + "$ref": "#/components/schemas/CodeBlock" + }, + { + "$ref": "#/components/schemas/TextPromptBlock" + }, + { + "$ref": "#/components/schemas/DownloadToS3Block" + }, + { + "$ref": "#/components/schemas/UploadToS3Block" + }, + { + "$ref": "#/components/schemas/SendEmailBlock" + }, + { + "$ref": "#/components/schemas/FileParserBlock" + }, + { + "$ref": "#/components/schemas/PDFParserBlock" + }, + { + "$ref": "#/components/schemas/ValidationBlock" + }, + { + "$ref": "#/components/schemas/ActionBlock" + }, + { + "$ref": "#/components/schemas/NavigationBlock" + }, + { + "$ref": "#/components/schemas/ExtractionBlock" + }, + { + "$ref": "#/components/schemas/LoginBlock" + }, + { + "$ref": "#/components/schemas/WaitBlock" + }, + { + "$ref": "#/components/schemas/HumanInteractionBlock" + }, + { + "$ref": "#/components/schemas/FileDownloadBlock" + }, + { + "$ref": "#/components/schemas/UrlBlock" + }, + { + "$ref": "#/components/schemas/TaskV2Block" + }, + { + "$ref": "#/components/schemas/FileUploadBlock" + }, + { + "$ref": "#/components/schemas/HttpRequestBlock" + }, + { + "$ref": "#/components/schemas/PrintPageBlock" + } + ], + "discriminator": { + "propertyName": "block_type", + "mapping": { + "action": "#/components/schemas/ActionBlock", + "code": "#/components/schemas/CodeBlock", + "conditional": "#/components/schemas/ConditionalBlock", + "download_to_s3": "#/components/schemas/DownloadToS3Block", + "extraction": "#/components/schemas/ExtractionBlock", + "file_download": "#/components/schemas/FileDownloadBlock", + "file_upload": "#/components/schemas/FileUploadBlock", + "file_url_parser": "#/components/schemas/FileParserBlock", + "for_loop": "#/components/schemas/ForLoopBlock", + "goto_url": "#/components/schemas/UrlBlock", + "http_request": "#/components/schemas/HttpRequestBlock", + "human_interaction": "#/components/schemas/HumanInteractionBlock", + "login": "#/components/schemas/LoginBlock", + "navigation": "#/components/schemas/NavigationBlock", + "pdf_parser": "#/components/schemas/PDFParserBlock", + "print_page": "#/components/schemas/PrintPageBlock", + "send_email": "#/components/schemas/SendEmailBlock", + "task": "#/components/schemas/TaskBlock", + "task_v2": "#/components/schemas/TaskV2Block", + "text_prompt": "#/components/schemas/TextPromptBlock", + "upload_to_s3": "#/components/schemas/UploadToS3Block", + "validation": "#/components/schemas/ValidationBlock", + "wait": "#/components/schemas/WaitBlock" + } + } + }, + "type": "array", + "title": "Loop Blocks" + }, + "loop_over": { + "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" + } + }, + "nullable": true, + "title": "Loop Over" + }, + "loop_variable_reference": { + "type": "string", + "nullable": true, + "title": "Loop Variable Reference" + }, + "complete_if_empty": { + "type": "boolean", + "title": "Complete If Empty", + "default": false + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "loop_blocks" + ], + "title": "ForLoopBlock" + }, + "ForLoopBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "for_loop" + ], + "title": "Block Type", + "default": "for_loop" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "loop_blocks": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/TaskBlockYAML" + }, + { + "$ref": "#/components/schemas/ForLoopBlockYAML" + }, + { + "$ref": "#/components/schemas/CodeBlockYAML" + }, + { + "$ref": "#/components/schemas/TextPromptBlockYAML" + }, + { + "$ref": "#/components/schemas/DownloadToS3BlockYAML" + }, + { + "$ref": "#/components/schemas/UploadToS3BlockYAML" + }, + { + "$ref": "#/components/schemas/FileUploadBlockYAML" + }, + { + "$ref": "#/components/schemas/SendEmailBlockYAML" + }, + { + "$ref": "#/components/schemas/FileParserBlockYAML" + }, + { + "$ref": "#/components/schemas/ValidationBlockYAML" + }, + { + "$ref": "#/components/schemas/ActionBlockYAML" + }, + { + "$ref": "#/components/schemas/NavigationBlockYAML" + }, + { + "$ref": "#/components/schemas/ExtractionBlockYAML" + }, + { + "$ref": "#/components/schemas/LoginBlockYAML" + }, + { + "$ref": "#/components/schemas/WaitBlockYAML" + }, + { + "$ref": "#/components/schemas/HumanInteractionBlockYAML" + }, + { + "$ref": "#/components/schemas/FileDownloadBlockYAML" + }, + { + "$ref": "#/components/schemas/UrlBlockYAML" + }, + { + "$ref": "#/components/schemas/PDFParserBlockYAML" + }, + { + "$ref": "#/components/schemas/TaskV2BlockYAML" + }, + { + "$ref": "#/components/schemas/HttpRequestBlockYAML" + }, + { + "$ref": "#/components/schemas/ConditionalBlockYAML" + }, + { + "$ref": "#/components/schemas/PrintPageBlockYAML" + } + ] + }, + "type": "array", + "title": "Loop Blocks" + }, + "loop_over_parameter_key": { + "type": "string", + "title": "Loop Over Parameter Key", + "default": "" + }, + "loop_variable_reference": { + "type": "string", + "nullable": true, + "title": "Loop Variable Reference" + }, + "complete_if_empty": { + "type": "boolean", + "title": "Complete If Empty", + "default": false + } + }, + "type": "object", + "required": [ + "label", + "loop_blocks" + ], + "title": "ForLoopBlockYAML" + }, + "GeoTarget": { + "properties": { + "country": { + "type": "string", + "maxLength": 2, + "minLength": 2, + "title": "Country", + "description": "ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB', 'DE')", + "example": "US" + }, + "subdivision": { + "type": "string", + "maxLength": 10, + "nullable": true, + "title": "Subdivision", + "description": "ISO 3166-2 subdivision code without country prefix (e.g., 'CA' for California, 'NY' for New York)", + "example": "CA" + }, + "city": { + "type": "string", + "maxLength": 100, + "nullable": true, + "title": "City", + "description": "City name in English from GeoNames (e.g., 'New York', 'Los Angeles', 'London')", + "example": "New York" + } + }, + "type": "object", + "required": [ + "country" + ], + "title": "GeoTarget", + "description": "Granular geographic targeting for proxy selection.\n\nSupports country, subdivision (state/region), and city level targeting.\nUses ISO 3166-1 alpha-2 for countries, ISO 3166-2 for subdivisions,\nand GeoNames English names for cities.\n\nExamples:\n - {\"country\": \"US\"} - United States (same as RESIDENTIAL)\n - {\"country\": \"US\", \"subdivision\": \"CA\"} - California, US\n - {\"country\": \"US\", \"subdivision\": \"NY\", \"city\": \"New York\"} - New York City\n - {\"country\": \"GB\", \"city\": \"London\"} - London, UK" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "HttpRequestBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "http_request" + ], + "title": "Block Type", + "default": "http_request" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "method": { + "type": "string", + "title": "Method", + "default": "GET" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Headers" + }, + "body": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Body" + }, + "files": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Files" + }, + "timeout": { + "type": "integer", + "title": "Timeout", + "default": 30 + }, + "follow_redirects": { + "type": "boolean", + "title": "Follow Redirects", + "default": true + }, + "download_filename": { + "type": "string", + "nullable": true, + "title": "Download Filename" + }, + "save_response_as_file": { + "type": "boolean", + "title": "Save Response As File", + "default": false + }, + "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" + ], + "title": "HttpRequestBlock" + }, + "HttpRequestBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "http_request" + ], + "title": "Block Type", + "default": "http_request" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "method": { + "type": "string", + "title": "Method", + "default": "GET" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Headers" + }, + "body": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Body" + }, + "files": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Files" + }, + "timeout": { + "type": "integer", + "title": "Timeout", + "default": 30 + }, + "follow_redirects": { + "type": "boolean", + "title": "Follow Redirects", + "default": true + }, + "download_filename": { + "type": "string", + "nullable": true, + "title": "Download Filename" + }, + "save_response_as_file": { + "type": "boolean", + "title": "Save Response As File", + "default": false + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "HttpRequestBlockYAML" + }, + "HumanInteractionBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "human_interaction" + ], + "title": "Block Type", + "default": "human_interaction" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + }, + "instructions": { + "type": "string", + "title": "Instructions", + "default": "Please review and approve or reject to continue the workflow." + }, + "positive_descriptor": { + "type": "string", + "title": "Positive Descriptor", + "default": "Approve" + }, + "negative_descriptor": { + "type": "string", + "title": "Negative Descriptor", + "default": "Reject" + }, + "timeout_seconds": { + "type": "integer", + "title": "Timeout Seconds", + "default": 7200 + }, + "sender": { + "type": "string", + "title": "Sender", + "default": "hello@skyvern.com" + }, + "recipients": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipients", + "default": [] + }, + "subject": { + "type": "string", + "title": "Subject", + "default": "Human interaction required for workflow run" + }, + "body": { + "type": "string", + "title": "Body", + "default": "Your interaction is required for a workflow run!" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "HumanInteractionBlock", + "description": "A block for human/agent interaction.\n\nFor the first pass at this, the implicit behaviour is that the user is given a single binary\nchoice (a go//no-go).\n\nIf the human:\n - chooses positively, the workflow continues\n - chooses negatively, the workflow is terminated\n - does not respond within the timeout period, the workflow terminates" + }, + "HumanInteractionBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "human_interaction" + ], + "title": "Block Type", + "default": "human_interaction" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "instructions": { + "type": "string", + "title": "Instructions", + "default": "Please review and approve or reject to continue the workflow." + }, + "positive_descriptor": { + "type": "string", + "title": "Positive Descriptor", + "default": "Approve" + }, + "negative_descriptor": { + "type": "string", + "title": "Negative Descriptor", + "default": "Reject" + }, + "timeout_seconds": { + "type": "integer", + "title": "Timeout Seconds" + }, + "sender": { + "type": "string", + "title": "Sender" + }, + "recipients": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipients" + }, + "subject": { + "type": "string", + "title": "Subject" + }, + "body": { + "type": "string", + "title": "Body" + } + }, + "type": "object", + "required": [ + "label", + "timeout_seconds", + "sender", + "recipients", + "subject", + "body" + ], + "title": "HumanInteractionBlockYAML" + }, + "InputOrSelectContext": { + "properties": { + "intention": { + "type": "string", + "nullable": true, + "title": "Intention" + }, + "field": { + "type": "string", + "nullable": true, + "title": "Field" + }, + "is_required": { + "type": "boolean", + "nullable": true, + "title": "Is Required" + }, + "is_search_bar": { + "type": "boolean", + "nullable": true, + "title": "Is Search Bar" + }, + "is_location_input": { + "type": "boolean", + "nullable": true, + "title": "Is Location Input" + }, + "is_date_related": { + "type": "boolean", + "nullable": true, + "title": "Is Date Related" + }, + "date_format": { + "type": "string", + "nullable": true, + "title": "Date Format" + }, + "is_text_captcha": { + "type": "boolean", + "nullable": true, + "title": "Is Text Captcha" + } + }, + "type": "object", + "title": "InputOrSelectContext" + }, + "InputTextAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "ai_input_text" + ], + "title": "Type", + "default": "ai_input_text" + }, + "selector": { + "type": "string", + "nullable": true, + "title": "Selector", + "description": "CSS selector for the element", + "default": "" + }, + "value": { + "type": "string", + "nullable": true, + "title": "Value", + "description": "Value to input", + "default": "" + }, + "intention": { + "type": "string", + "title": "Intention", + "description": "The intention or goal of the input", + "default": "" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Data", + "description": "Additional context data", + "nullable": true + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "TOTP identifier for input_text actions" + }, + "totp_url": { + "type": "string", + "nullable": true, + "title": "Totp Url", + "description": "TOTP URL for input_text actions" + }, + "timeout": { + "type": "number", + "title": "Timeout", + "description": "Timeout in milliseconds", + "default": 10000 + } + }, + "type": "object", + "title": "InputTextAction", + "description": "Input text action parameters." + }, + "JinjaBranchCriteria": { + "properties": { + "criteria_type": { + "type": "string", + "enum": [ + "jinja2_template" + ], + "title": "Criteria Type", + "default": "jinja2_template" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + } + }, + "type": "object", + "required": [ + "expression" + ], + "title": "JinjaBranchCriteria", + "description": "Jinja2-templated branch criteria (only supported criteria type for now)." + }, + "LocateElementAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "locate_element" + ], + "title": "Type", + "default": "locate_element" + }, + "prompt": { + "type": "string", + "title": "Prompt", + "description": "Natural language prompt to locate an element", + "default": "" + } + }, + "type": "object", + "title": "LocateElementAction", + "description": "Locate element action parameters." + }, + "LoginBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "login" + ], + "title": "Block Type", + "default": "login" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "LoginBlock" + }, + "LoginBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "login" + ], + "title": "Block Type", + "default": "login" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "LoginBlockYAML" + }, + "LoginRequest": { + "properties": { + "url": { + "type": "string", + "nullable": true, + "title": "Url", + "description": "Website URL" + }, + "webhook_url": { + "type": "string", + "nullable": true, + "title": "Webhook Url", + "description": "Webhook URL to send status updates" + }, + "proxy_location": { + "$ref": "#/components/schemas/ProxyLocation", + "nullable": true, + "description": "Proxy location to use" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "Identifier for TOTP (Time-based One-Time Password) if required" + }, + "totp_url": { + "type": "string", + "nullable": true, + "title": "Totp Url", + "description": "TOTP URL to fetch one-time passwords" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "ID of the browser session to use, which is prefixed by `pbs_` e.g. `pbs_123456`", + "example": "pbs_123456" + }, + "browser_profile_id": { + "type": "string", + "nullable": true, + "title": "Browser Profile Id", + "description": "ID of a browser profile to reuse for this run" + }, + "browser_address": { + "type": "string", + "nullable": true, + "title": "Browser Address", + "description": "The CDP address for the task.", + "example": "http://127.0.0.1:9222" + }, + "extra_http_headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Extra Http Headers", + "description": "Additional HTTP headers to include in requests" + }, + "max_screenshot_scrolling_times": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolling Times", + "description": "Maximum number of times to scroll for screenshots" + }, + "credential_type": { + "$ref": "#/components/schemas/skyvern__schemas__run_blocks__CredentialType", + "description": "Where to get the credential from" + }, + "prompt": { + "type": "string", + "nullable": true, + "title": "Prompt", + "description": "Login instructions. Skyvern has default prompt/instruction for login if this field is not provided." + }, + "credential_id": { + "type": "string", + "nullable": true, + "title": "Credential Id", + "description": "ID of the Skyvern credential to use for login.", + "example": "cred_123" + }, + "bitwarden_collection_id": { + "type": "string", + "nullable": true, + "title": "Bitwarden Collection Id", + "description": "Bitwarden collection ID. You can find it in the Bitwarden collection URL. e.g. `https://vault.bitwarden.com/vaults/collection_id/items`" + }, + "bitwarden_item_id": { + "type": "string", + "nullable": true, + "title": "Bitwarden Item Id", + "description": "Bitwarden item ID" + }, + "onepassword_vault_id": { + "type": "string", + "nullable": true, + "title": "Onepassword Vault Id", + "description": "1Password vault ID" + }, + "onepassword_item_id": { + "type": "string", + "nullable": true, + "title": "Onepassword Item Id", + "description": "1Password item ID" + }, + "azure_vault_name": { + "type": "string", + "nullable": true, + "title": "Azure Vault Name", + "description": "Azure Vault Name" + }, + "azure_vault_username_key": { + "type": "string", + "nullable": true, + "title": "Azure Vault Username Key", + "description": "Azure Vault username key" + }, + "azure_vault_password_key": { + "type": "string", + "nullable": true, + "title": "Azure Vault Password Key", + "description": "Azure Vault password key" + }, + "azure_vault_totp_secret_key": { + "type": "string", + "nullable": true, + "title": "Azure Vault Totp Secret Key", + "description": "Azure Vault TOTP secret key" + } + }, + "type": "object", + "required": [ + "credential_type" + ], + "title": "LoginRequest" + }, + "NavigationBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "navigation" + ], + "title": "Block Type", + "default": "navigation" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "navigation_goal" + ], + "title": "NavigationBlock" + }, + "NavigationBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "navigation" + ], + "title": "Block Type", + "default": "navigation" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "navigation_goal": { + "type": "string", + "title": "Navigation Goal" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + } + }, + "type": "object", + "required": [ + "label", + "navigation_goal" + ], + "title": "NavigationBlockYAML" + }, + "NonEmptyCreditCardCredential": { + "properties": { + "card_number": { + "type": "string", + "minLength": 1, + "title": "Card Number", + "description": "The full credit card number (must not be empty)", + "example": "4111111111111111" + }, + "card_cvv": { + "type": "string", + "minLength": 1, + "title": "Card Cvv", + "description": "The card's CVV (must not be empty)", + "example": "123" + }, + "card_exp_month": { + "type": "string", + "minLength": 1, + "title": "Card Exp Month", + "description": "The card's expiration month (must not be empty)", + "example": "12" + }, + "card_exp_year": { + "type": "string", + "minLength": 1, + "title": "Card Exp Year", + "description": "The card's expiration year (must not be empty)", + "example": "2025" + }, + "card_brand": { + "type": "string", + "minLength": 1, + "title": "Card Brand", + "description": "The card's brand (must not be empty)", + "example": "visa" + }, + "card_holder_name": { + "type": "string", + "minLength": 1, + "title": "Card Holder Name", + "description": "The name of the card holder (must not be empty)", + "example": "John Doe" + } + }, + "type": "object", + "required": [ + "card_number", + "card_cvv", + "card_exp_month", + "card_exp_year", + "card_brand", + "card_holder_name" + ], + "title": "NonEmptyCreditCardCredential", + "description": "Credit card credential model that requires non-empty values." + }, + "NonEmptyPasswordCredential": { + "properties": { + "password": { + "type": "string", + "minLength": 1, + "title": "Password", + "description": "The password value (must not be empty)", + "example": "securepassword123" + }, + "username": { + "type": "string", + "minLength": 1, + "title": "Username", + "description": "The username associated with the credential (must not be empty)", + "example": "user@example.com" + }, + "totp": { + "type": "string", + "nullable": true, + "title": "Totp", + "description": "Optional TOTP (Time-based One-Time Password) string used to generate 2FA codes", + "example": "JBSWY3DPEHPK3PXP" + }, + "totp_type": { + "$ref": "#/components/schemas/TotpType", + "description": "Type of 2FA method used for this credential", + "default": "none", + "example": "authenticator" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "Identifier (email or phone number) used to fetch TOTP codes", + "example": "user@example.com" + } + }, + "type": "object", + "required": [ + "password", + "username" + ], + "title": "NonEmptyPasswordCredential", + "description": "Password credential model that requires non-empty values." + }, + "OTPType": { + "type": "string", + "enum": [ + "totp", + "magic_link" + ], + "title": "OTPType" + }, + "OnePasswordCredentialParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "onepassword" + ], + "title": "Parameter Type", + "default": "onepassword" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "onepassword_credential_parameter_id": { + "type": "string", + "title": "Onepassword Credential Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "vault_id": { + "type": "string", + "title": "Vault Id" + }, + "item_id": { + "type": "string", + "title": "Item Id" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "onepassword_credential_parameter_id", + "workflow_id", + "vault_id", + "item_id", + "created_at", + "modified_at" + ], + "title": "OnePasswordCredentialParameter" + }, + "OnePasswordCredentialParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "onepassword" + ], + "title": "Parameter Type", + "default": "onepassword" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "vault_id": { + "type": "string", + "title": "Vault Id" + }, + "item_id": { + "type": "string", + "title": "Item Id" + } + }, + "type": "object", + "required": [ + "key", + "vault_id", + "item_id" + ], + "title": "OnePasswordCredentialParameterYAML" + }, + "OutputParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "output" + ], + "title": "Parameter Type", + "default": "output" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "output_parameter_id": { + "type": "string", + "title": "Output Parameter Id" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "output_parameter_id", + "workflow_id", + "created_at", + "modified_at" + ], + "title": "OutputParameter" + }, + "OutputParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "output" + ], + "title": "Parameter Type", + "default": "output" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + } + }, + "type": "object", + "required": [ + "key" + ], + "title": "OutputParameterYAML" + }, + "PDFFormat": { + "type": "string", + "enum": [ + "A4", + "Letter", + "Legal", + "Tabloid" + ], + "title": "PDFFormat" + }, + "PDFParserBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "pdf_parser" + ], + "title": "Block Type", + "default": "pdf_parser" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "file_url": { + "type": "string", + "title": "File Url" + }, + "json_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Json Schema" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "file_url" + ], + "title": "PDFParserBlock", + "description": "DEPRECATED: Use FileParserBlock with file_type=FileType.PDF instead.\nThis block will be removed in a future version." + }, + "PDFParserBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "pdf_parser" + ], + "title": "Block Type", + "default": "pdf_parser" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "file_url": { + "type": "string", + "title": "File Url" + }, + "json_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Json Schema" + } + }, + "type": "object", + "required": [ + "label", + "file_url" + ], + "title": "PDFParserBlockYAML" + }, + "PasswordCredentialResponse": { + "properties": { + "username": { + "type": "string", + "title": "Username", + "description": "The username associated with the credential", + "example": "user@example.com" + }, + "totp_type": { + "$ref": "#/components/schemas/TotpType", + "description": "Type of 2FA method used for this credential", + "default": "none", + "example": "authenticator" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "Identifier (email or phone number) used to fetch TOTP codes", + "example": "user@example.com" + } + }, + "type": "object", + "required": [ + "username" + ], + "title": "PasswordCredentialResponse", + "description": "Response model for password credentials, containing only the username." + }, + "PersistentBrowserType": { + "type": "string", + "enum": [ + "msedge", + "chrome" + ], + "title": "PersistentBrowserType" + }, + "PlanTier": { + "type": "string", + "enum": [ + "free", + "hobby", + "pro" + ], + "title": "PlanTier", + "description": "Self-serve subscription tiers. Enterprise customers use manual billing (bypass)." + }, + "PortalSessionResponse": { + "properties": { + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "PortalSessionResponse" + }, + "PrintPageBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "print_page" + ], + "title": "Block Type", + "default": "print_page" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "include_timestamp": { + "type": "boolean", + "title": "Include Timestamp", + "default": true + }, + "custom_filename": { + "type": "string", + "nullable": true, + "title": "Custom Filename" + }, + "format": { + "type": "string", + "title": "Format", + "default": "A4" + }, + "landscape": { + "type": "boolean", + "title": "Landscape", + "default": false + }, + "print_background": { + "type": "boolean", + "title": "Print Background", + "default": true + }, + "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" + ], + "title": "PrintPageBlock" + }, + "PrintPageBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "print_page" + ], + "title": "Block Type", + "default": "print_page" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "include_timestamp": { + "type": "boolean", + "title": "Include Timestamp", + "default": true + }, + "custom_filename": { + "type": "string", + "nullable": true, + "title": "Custom Filename" + }, + "format": { + "$ref": "#/components/schemas/PDFFormat", + "default": "A4" + }, + "landscape": { + "type": "boolean", + "title": "Landscape", + "default": false + }, + "print_background": { + "type": "boolean", + "title": "Print Background", + "default": true + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "PrintPageBlockYAML" + }, + "PromptAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "prompt" + ], + "title": "Type", + "default": "prompt" + }, + "prompt": { + "type": "string", + "title": "Prompt", + "description": "The prompt to send to the LLM" + }, + "response_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Response Schema", + "description": "Optional JSON schema to structure the response" + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model", + "description": "Optional model configuration" + } + }, + "type": "object", + "required": [ + "prompt" + ], + "title": "PromptAction", + "description": "Prompt action parameters." + }, + "PromptBranchCriteria": { + "properties": { + "criteria_type": { + "type": "string", + "enum": [ + "prompt" + ], + "title": "Criteria Type", + "default": "prompt" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + } + }, + "type": "object", + "required": [ + "expression" + ], + "title": "PromptBranchCriteria", + "description": "Natural language branch criteria." + }, + "ProxyLocation": { + "type": "string", + "enum": [ + "RESIDENTIAL", + "US-CA", + "US-NY", + "US-TX", + "US-FL", + "US-WA", + "RESIDENTIAL_ES", + "RESIDENTIAL_IE", + "RESIDENTIAL_GB", + "RESIDENTIAL_IN", + "RESIDENTIAL_JP", + "RESIDENTIAL_FR", + "RESIDENTIAL_DE", + "RESIDENTIAL_NZ", + "RESIDENTIAL_ZA", + "RESIDENTIAL_AR", + "RESIDENTIAL_AU", + "RESIDENTIAL_BR", + "RESIDENTIAL_TR", + "RESIDENTIAL_CA", + "RESIDENTIAL_MX", + "RESIDENTIAL_IT", + "RESIDENTIAL_NL", + "RESIDENTIAL_PH", + "RESIDENTIAL_ISP", + "NONE" + ], + "title": "ProxyLocation" + }, + "RetryRunWebhookRequest": { + "properties": { + "webhook_url": { + "type": "string", + "nullable": true, + "title": "Webhook Url", + "description": "Optional webhook URL to send the payload to instead of the stored configuration" + } + }, + "type": "object", + "title": "RetryRunWebhookRequest" + }, + "RunEngine": { + "type": "string", + "enum": [ + "skyvern-1.0", + "skyvern-2.0", + "openai-cua", + "anthropic-cua", + "ui-tars" + ], + "title": "RunEngine" + }, + "RunSdkActionRequest": { + "properties": { + "url": { + "type": "string", + "title": "Url", + "description": "The URL where the action should be executed" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "The browser session ID" + }, + "browser_address": { + "type": "string", + "nullable": true, + "title": "Browser Address", + "description": "The browser address" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id", + "description": "Optional workflow run ID to continue an existing workflow run" + }, + "action": { + "oneOf": [ + { + "$ref": "#/components/schemas/ClickAction" + }, + { + "$ref": "#/components/schemas/InputTextAction" + }, + { + "$ref": "#/components/schemas/SelectOptionAction" + }, + { + "$ref": "#/components/schemas/UploadFileAction" + }, + { + "$ref": "#/components/schemas/ActAction" + }, + { + "$ref": "#/components/schemas/ExtractAction" + }, + { + "$ref": "#/components/schemas/LocateElementAction" + }, + { + "$ref": "#/components/schemas/ValidateAction" + }, + { + "$ref": "#/components/schemas/PromptAction" + } + ], + "title": "Action", + "description": "The action to execute with its specific parameters", + "discriminator": { + "propertyName": "type", + "mapping": { + "ai_act": "#/components/schemas/ActAction", + "ai_click": "#/components/schemas/ClickAction", + "ai_input_text": "#/components/schemas/InputTextAction", + "ai_select_option": "#/components/schemas/SelectOptionAction", + "ai_upload_file": "#/components/schemas/UploadFileAction", + "extract": "#/components/schemas/ExtractAction", + "locate_element": "#/components/schemas/LocateElementAction", + "prompt": "#/components/schemas/PromptAction", + "validate": "#/components/schemas/ValidateAction" + } + } + } + }, + "type": "object", + "required": [ + "url", + "action" + ], + "title": "RunSdkActionRequest", + "description": "Request to run a single SDK action." + }, + "RunSdkActionResponse": { + "properties": { + "workflow_run_id": { + "type": "string", + "title": "Workflow Run Id", + "description": "The workflow run ID used for this action" + }, + "result": { + "nullable": true, + "title": "Result", + "description": "The result from the action (e.g., selector, value, extracted data)" + } + }, + "type": "object", + "required": [ + "workflow_run_id" + ], + "title": "RunSdkActionResponse", + "description": "Response from running an SDK action." + }, + "RunStatus": { + "type": "string", + "enum": [ + "created", + "queued", + "running", + "timed_out", + "failed", + "terminated", + "completed", + "canceled" + ], + "title": "RunStatus" + }, + "Script": { + "properties": { + "script_revision_id": { + "type": "string", + "title": "Script Revision Id", + "description": "Unique identifier for this specific script revision" + }, + "script_id": { + "type": "string", + "title": "Script Id", + "description": "User-facing script identifier, consistent across versions" + }, + "organization_id": { + "type": "string", + "title": "Organization Id", + "description": "ID of the organization that owns this script" + }, + "run_id": { + "type": "string", + "nullable": true, + "title": "Run Id", + "description": "ID of the workflow run or task run that generated this script" + }, + "version": { + "type": "integer", + "title": "Version", + "description": "Version number of the script" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Timestamp when the script was created" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At", + "description": "Timestamp when the script was last modified" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At", + "description": "Timestamp when the script was soft deleted" + } + }, + "type": "object", + "required": [ + "script_revision_id", + "script_id", + "organization_id", + "version", + "created_at", + "modified_at" + ], + "title": "Script" + }, + "ScriptFileCreate": { + "properties": { + "path": { + "type": "string", + "title": "Path", + "description": "File path relative to script root", + "example": "src/main.py" + }, + "content": { + "type": "string", + "title": "Content", + "description": "Base64 encoded file content" + }, + "encoding": { + "$ref": "#/components/schemas/FileEncoding", + "description": "Content encoding", + "default": "base64" + }, + "mime_type": { + "type": "string", + "nullable": true, + "title": "Mime Type", + "description": "MIME type (auto-detected if not provided)" + } + }, + "type": "object", + "required": [ + "path", + "content" + ], + "title": "ScriptFileCreate", + "description": "Model representing a file in a script." + }, + "ScriptRunResponse": { + "properties": { + "ai_fallback_triggered": { + "type": "boolean", + "title": "Ai Fallback Triggered", + "default": false + } + }, + "type": "object", + "title": "ScriptRunResponse" + }, + "SecretCredential": { + "properties": { + "secret_value": { + "type": "string", + "minLength": 1, + "title": "Secret Value", + "description": "The secret value", + "example": "sk-abc123" + }, + "secret_label": { + "type": "string", + "nullable": true, + "title": "Secret Label", + "description": "Optional label describing the secret" + } + }, + "type": "object", + "required": [ + "secret_value" + ], + "title": "SecretCredential", + "description": "Generic secret credential." + }, + "SecretCredentialResponse": { + "properties": { + "secret_label": { + "type": "string", + "nullable": true, + "title": "Secret Label", + "description": "Optional label for the stored secret" + } + }, + "type": "object", + "title": "SecretCredentialResponse", + "description": "Response model for secret credentials." + }, + "SelectOption": { + "properties": { + "label": { + "type": "string", + "nullable": true, + "title": "Label" + }, + "value": { + "type": "string", + "nullable": true, + "title": "Value" + }, + "index": { + "type": "integer", + "nullable": true, + "title": "Index" + } + }, + "type": "object", + "title": "SelectOption" + }, + "SelectOptionAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "ai_select_option" + ], + "title": "Type", + "default": "ai_select_option" + }, + "selector": { + "type": "string", + "nullable": true, + "title": "Selector", + "description": "CSS selector for the element", + "default": "" + }, + "value": { + "type": "string", + "nullable": true, + "title": "Value", + "description": "Value to select", + "default": "" + }, + "intention": { + "type": "string", + "title": "Intention", + "description": "The intention or goal of the selection", + "default": "" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Data", + "description": "Additional context data", + "nullable": true + }, + "timeout": { + "type": "number", + "title": "Timeout", + "description": "Timeout in milliseconds", + "default": 10000 + } + }, + "type": "object", + "title": "SelectOptionAction", + "description": "Select option action parameters." + }, + "SendEmailBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "send_email" + ], + "title": "Block Type", + "default": "send_email" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "smtp_host": { + "$ref": "#/components/schemas/AWSSecretParameter" + }, + "smtp_port": { + "$ref": "#/components/schemas/AWSSecretParameter" + }, + "smtp_username": { + "$ref": "#/components/schemas/AWSSecretParameter" + }, + "smtp_password": { + "$ref": "#/components/schemas/AWSSecretParameter" + }, + "sender": { + "type": "string", + "title": "Sender" + }, + "recipients": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipients" + }, + "subject": { + "type": "string", + "title": "Subject" + }, + "body": { + "type": "string", + "title": "Body" + }, + "file_attachments": { + "items": { + "type": "string" + }, + "type": "array", + "title": "File Attachments", + "default": [] + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "smtp_host", + "smtp_port", + "smtp_username", + "smtp_password", + "sender", + "recipients", + "subject", + "body" + ], + "title": "SendEmailBlock" + }, + "SendEmailBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "send_email" + ], + "title": "Block Type", + "default": "send_email" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "smtp_host_secret_parameter_key": { + "type": "string", + "title": "Smtp Host Secret Parameter Key" + }, + "smtp_port_secret_parameter_key": { + "type": "string", + "title": "Smtp Port Secret Parameter Key" + }, + "smtp_username_secret_parameter_key": { + "type": "string", + "title": "Smtp Username Secret Parameter Key" + }, + "smtp_password_secret_parameter_key": { + "type": "string", + "title": "Smtp Password Secret Parameter Key" + }, + "sender": { + "type": "string", + "title": "Sender" + }, + "recipients": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipients" + }, + "subject": { + "type": "string", + "title": "Subject" + }, + "body": { + "type": "string", + "title": "Body" + }, + "file_attachments": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "File Attachments" + } + }, + "type": "object", + "required": [ + "label", + "smtp_host_secret_parameter_key", + "smtp_port_secret_parameter_key", + "smtp_username_secret_parameter_key", + "smtp_password_secret_parameter_key", + "sender", + "recipients", + "subject", + "body" + ], + "title": "SendEmailBlockYAML" + }, + "TOTPCode": { + "properties": { + "totp_identifier": { + "type": "string", + "title": "Totp Identifier", + "description": "The identifier of the TOTP code. It can be the email address, phone number, or the identifier of the user.", + "example": "john.doe@example.com" + }, + "task_id": { + "type": "string", + "nullable": true, + "title": "Task Id", + "description": "The task_id the totp code is for. It can be the task_id of the task that the TOTP code is for.", + "example": "task_123456" + }, + "workflow_id": { + "type": "string", + "nullable": true, + "title": "Workflow Id", + "description": "The workflow ID the TOTP code is for. It can be the workflow ID of the workflow that the TOTP code is for.", + "example": "wpid_123456" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id", + "description": "The workflow run id that the TOTP code is for. It can be the workflow run id of the workflow run that the TOTP code is for.", + "example": "wr_123456" + }, + "source": { + "type": "string", + "nullable": true, + "title": "Source", + "description": "An optional field. The source of the TOTP code. e.g. email, sms, etc.", + "example": "email" + }, + "content": { + "type": "string", + "title": "Content", + "description": "The content of the TOTP code. It can be the email content that contains the TOTP code, or the sms message that contains the TOTP code. Skyvern will automatically extract the TOTP code from the content.", + "example": "Hello, your verification code is 123456" + }, + "expired_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Expired At", + "description": "The timestamp when the TOTP code expires", + "example": "2025-01-01T00:00:00Z" + }, + "type": { + "$ref": "#/components/schemas/OTPType", + "nullable": true, + "description": "Optional. If provided, forces extraction of this specific OTP type (totp or magic_link). Use this when the content contains multiple OTP types and you want to specify which one to extract.", + "example": "totp" + }, + "totp_code_id": { + "type": "string", + "title": "Totp Code Id", + "description": "The skyvern ID of the TOTP code." + }, + "code": { + "type": "string", + "title": "Code", + "description": "The TOTP code extracted from the content." + }, + "organization_id": { + "type": "string", + "title": "Organization Id", + "description": "The ID of the organization that the TOTP code is for." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "The timestamp when the TOTP code was created." + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At", + "description": "The timestamp when the TOTP code was modified." + }, + "otp_type": { + "$ref": "#/components/schemas/OTPType", + "nullable": true, + "description": "The type of the OTP code." + } + }, + "type": "object", + "required": [ + "totp_identifier", + "content", + "totp_code_id", + "code", + "organization_id", + "created_at", + "modified_at" + ], + "title": "TOTPCode" + }, + "TOTPCodeCreate": { + "properties": { + "totp_identifier": { + "type": "string", + "title": "Totp Identifier", + "description": "The identifier of the TOTP code. It can be the email address, phone number, or the identifier of the user.", + "example": "john.doe@example.com" + }, + "task_id": { + "type": "string", + "nullable": true, + "title": "Task Id", + "description": "The task_id the totp code is for. It can be the task_id of the task that the TOTP code is for.", + "example": "task_123456" + }, + "workflow_id": { + "type": "string", + "nullable": true, + "title": "Workflow Id", + "description": "The workflow ID the TOTP code is for. It can be the workflow ID of the workflow that the TOTP code is for.", + "example": "wpid_123456" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id", + "description": "The workflow run id that the TOTP code is for. It can be the workflow run id of the workflow run that the TOTP code is for.", + "example": "wr_123456" + }, + "source": { + "type": "string", + "nullable": true, + "title": "Source", + "description": "An optional field. The source of the TOTP code. e.g. email, sms, etc.", + "example": "email" + }, + "content": { + "type": "string", + "title": "Content", + "description": "The content of the TOTP code. It can be the email content that contains the TOTP code, or the sms message that contains the TOTP code. Skyvern will automatically extract the TOTP code from the content.", + "example": "Hello, your verification code is 123456" + }, + "expired_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Expired At", + "description": "The timestamp when the TOTP code expires", + "example": "2025-01-01T00:00:00Z" + }, + "type": { + "$ref": "#/components/schemas/OTPType", + "nullable": true, + "description": "Optional. If provided, forces extraction of this specific OTP type (totp or magic_link). Use this when the content contains multiple OTP types and you want to specify which one to extract.", + "example": "totp" + } + }, + "type": "object", + "required": [ + "totp_identifier", + "content" + ], + "title": "TOTPCodeCreate" + }, + "TaskBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "task" + ], + "title": "Block Type", + "default": "task" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "TaskBlock" + }, + "TaskBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "task" + ], + "title": "Block Type", + "default": "task" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "TaskBlockYAML" + }, + "TaskRunRequest": { + "properties": { + "prompt": { + "type": "string", + "title": "Prompt", + "description": "\nThe goal or task description for Skyvern to accomplish\n", + "example": "Find the top 3 posts on Hacker News." + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url", + "description": "\nThe starting URL for the task. If not provided, Skyvern will attempt to determine an appropriate URL\n", + "example": "https://www.hackernews.com" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "description": "\nThe engine that powers the agent task. The default value is `skyvern-2.0`, the latest Skyvern agent that performs pretty well with complex and multi-step tasks. `skyvern-1.0` is good for simple tasks like filling a form, or searching for information on Google. The `openai-cua` engine uses OpenAI's CUA model. The `anthropic-cua` uses Anthropic's Claude Sonnet 3.7 model with the computer use tool.\n", + "default": "skyvern-2.0" + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title", + "description": "The title for the task", + "example": "The title of my first skyvern task" + }, + "proxy_location": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProxyLocation" + }, + { + "$ref": "#/components/schemas/GeoTarget" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Proxy Location", + "description": "\nGeographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud.\n\nAvailable geotargeting options:\n- RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy.\n- RESIDENTIAL_ES: Spain\n- RESIDENTIAL_IE: Ireland\n- RESIDENTIAL_GB: United Kingdom\n- RESIDENTIAL_IN: India\n- RESIDENTIAL_JP: Japan\n- RESIDENTIAL_FR: France\n- RESIDENTIAL_DE: Germany\n- RESIDENTIAL_NZ: New Zealand\n- RESIDENTIAL_PH: Philippines\n- RESIDENTIAL_ZA: South Africa\n- RESIDENTIAL_AR: Argentina\n- RESIDENTIAL_AU: Australia\n- RESIDENTIAL_ISP: ISP proxy\n- US-CA: California (deprecated, routes through RESIDENTIAL_ISP)\n- US-NY: New York (deprecated, routes through RESIDENTIAL_ISP)\n- US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP)\n- US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP)\n- US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP)\n- NONE: No proxy\n Can also be a GeoTarget object for granular city/state targeting: {\"country\": \"US\", \"subdivision\": \"CA\", \"city\": \"San Francisco\"}", + "default": "RESIDENTIAL", + "nullable": true + }, + "data_extraction_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Extraction Schema", + "description": "\nThe schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/.\n", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping", + "description": "\nCustom mapping of error codes to error messages if Skyvern encounters an error.\n", + "example": { + "login_failed": "The login credentials are incorrect or the account is locked" + } + }, + "max_steps": { + "type": "integer", + "nullable": true, + "title": "Max Steps", + "description": "\nMaximum number of steps the task can take. Task will fail if it exceeds this number. Cautions: you are charged per step so please set this number to a reasonable value. Contact sales@skyvern.com for custom pricing.\n", + "example": 10 + }, + "webhook_url": { + "type": "string", + "nullable": true, + "title": "Webhook Url", + "description": "\nAfter a run is finished, send an update to this URL. Refer to https://www.skyvern.com/docs/running-tasks/webhooks-faq for more details.\n", + "example": "https://my-site.com/webhook" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "\nIdentifier for the TOTP/2FA/MFA code when the code is pushed to Skyvern. Refer to https://www.skyvern.com/docs/credentials/totp#option-3-push-code-to-skyvern for more details.\n", + "example": "john.doe@example.com" + }, + "totp_url": { + "type": "string", + "nullable": true, + "title": "Totp Url", + "description": "\nURL that serves TOTP/2FA/MFA codes for Skyvern to use during the workflow run. Refer to https://www.skyvern.com/docs/credentials/totp#option-2-get-code-from-your-endpoint for more details.\n", + "example": "https://my-totp-service.com/totp" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "\nRun the task or workflow in the specific Skyvern browser session. Having a browser session can persist the real-time state of the browser, so that the next run can continue from where the previous run left off.\n", + "example": "pbs_123" + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model", + "description": "\nOptional model configuration.\n" + }, + "extra_http_headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Extra Http Headers", + "description": "The extra HTTP headers for the requests in browser." + }, + "publish_workflow": { + "type": "boolean", + "title": "Publish Workflow", + "description": "Whether to publish this task as a reusable workflow. Only available for skyvern-2.0.", + "default": false + }, + "include_action_history_in_verification": { + "type": "boolean", + "nullable": true, + "title": "Include Action History In Verification", + "description": "Whether to include action history when verifying that the task is complete", + "default": false + }, + "max_screenshot_scrolls": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolls", + "description": "The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot." + }, + "browser_address": { + "type": "string", + "nullable": true, + "title": "Browser Address", + "description": "The CDP address for the task.", + "example": "http://127.0.0.1:9222" + }, + "run_with": { + "type": "string", + "nullable": true, + "title": "Run With", + "description": "Whether to run the task with agent or code.", + "example": "agent" + } + }, + "type": "object", + "required": [ + "prompt" + ], + "title": "TaskRunRequest" + }, + "TaskRunResponse": { + "properties": { + "run_id": { + "type": "string", + "title": "Run Id", + "description": "Unique identifier for this run. Run ID starts with `tsk_` for task runs and `wr_` for workflow runs.", + "example": "tsk_123" + }, + "status": { + "$ref": "#/components/schemas/RunStatus", + "description": "Current status of the run", + "example": "created" + }, + "output": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Output", + "description": "Output data from the run, if any. Format/schema depends on the data extracted by the run.", + "nullable": true + }, + "downloaded_files": { + "items": { + "$ref": "#/components/schemas/FileInfo" + }, + "type": "array", + "nullable": true, + "title": "Downloaded Files", + "description": "List of files downloaded during the run" + }, + "recording_url": { + "type": "string", + "nullable": true, + "title": "Recording Url", + "description": "URL to the recording of the run" + }, + "screenshot_urls": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Screenshot Urls", + "description": "List of last n screenshot URLs in reverse chronological order - the first one the list is the latest screenshot." + }, + "failure_reason": { + "type": "string", + "nullable": true, + "title": "Failure Reason", + "description": "Reason for failure if the run failed or terminated" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Timestamp when this run was created", + "example": "2025-01-01T00:00:00Z" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At", + "description": "Timestamp when this run was last modified", + "example": "2025-01-01T00:05:00Z" + }, + "queued_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Queued At", + "description": "Timestamp when this run was queued" + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Started At", + "description": "Timestamp when this run started execution" + }, + "finished_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Finished At", + "description": "Timestamp when this run finished" + }, + "app_url": { + "type": "string", + "nullable": true, + "title": "App Url", + "description": "URL to the application UI where the run can be viewed", + "example": "https://app.skyvern.com/tasks/tsk_123" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "ID of the Skyvern persistent browser session used for this run", + "example": "pbs_123" + }, + "browser_profile_id": { + "type": "string", + "nullable": true, + "title": "Browser Profile Id", + "description": "ID of the browser profile used for this run", + "example": "bp_123" + }, + "max_screenshot_scrolls": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolls", + "description": "The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot" + }, + "script_run": { + "$ref": "#/components/schemas/ScriptRunResponse", + "nullable": true, + "description": "The script run result" + }, + "errors": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "nullable": true, + "title": "Errors", + "description": "The errors for the run" + }, + "step_count": { + "type": "integer", + "nullable": true, + "title": "Step Count", + "description": "Total number of steps executed in this run" + }, + "run_type": { + "type": "string", + "enum": [ + "task_v1", + "task_v2", + "openai_cua", + "anthropic_cua", + "ui_tars" + ], + "title": "Run Type", + "description": "Types of a task run - task_v1, task_v2, openai_cua, anthropic_cua, ui_tars" + }, + "run_request": { + "$ref": "#/components/schemas/TaskRunRequest", + "nullable": true, + "description": "The original request parameters used to start this task run" + } + }, + "type": "object", + "required": [ + "run_id", + "status", + "created_at", + "modified_at", + "run_type" + ], + "title": "TaskRunResponse" + }, + "TaskV2Block": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "task_v2" + ], + "title": "Block Type", + "default": "task_v2" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "prompt": { + "type": "string", + "title": "Prompt" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "max_iterations": { + "type": "integer", + "title": "Max Iterations", + "default": 10 + }, + "max_steps": { + "type": "integer", + "title": "Max Steps", + "default": 25 + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "prompt" + ], + "title": "TaskV2Block" + }, + "TaskV2BlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "task_v2" + ], + "title": "Block Type", + "default": "task_v2" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "prompt": { + "type": "string", + "title": "Prompt" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "max_iterations": { + "type": "integer", + "title": "Max Iterations", + "default": 10 + }, + "max_steps": { + "type": "integer", + "title": "Max Steps", + "default": 25 + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + } + }, + "type": "object", + "required": [ + "label", + "prompt" + ], + "title": "TaskV2BlockYAML" + }, + "TextPromptBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "text_prompt" + ], + "title": "Block Type", + "default": "text_prompt" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "llm_key": { + "type": "string", + "nullable": true, + "title": "Llm Key" + }, + "prompt": { + "type": "string", + "title": "Prompt" + }, + "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": [] + }, + "json_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Json Schema" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "prompt" + ], + "title": "TextPromptBlock" + }, + "TextPromptBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "text_prompt" + ], + "title": "Block Type", + "default": "text_prompt" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "llm_key": { + "type": "string", + "nullable": true, + "title": "Llm Key" + }, + "prompt": { + "type": "string", + "title": "Prompt" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "json_schema": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Json Schema" + } + }, + "type": "object", + "required": [ + "label", + "prompt" + ], + "title": "TextPromptBlockYAML" + }, + "Thought": { + "properties": { + "thought_id": { + "type": "string", + "title": "Thought Id" + }, + "task_id": { + "type": "string", + "title": "Task Id" + }, + "organization_id": { + "type": "string", + "title": "Organization Id" + }, + "workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Id" + }, + "workflow_run_block_id": { + "type": "string", + "nullable": true, + "title": "Workflow Run Block Id" + }, + "workflow_id": { + "type": "string", + "nullable": true, + "title": "Workflow Id" + }, + "workflow_permanent_id": { + "type": "string", + "nullable": true, + "title": "Workflow Permanent Id" + }, + "user_input": { + "type": "string", + "nullable": true, + "title": "User Input" + }, + "observation": { + "type": "string", + "nullable": true, + "title": "Observation" + }, + "thought": { + "type": "string", + "nullable": true, + "title": "Thought" + }, + "answer": { + "type": "string", + "nullable": true, + "title": "Answer" + }, + "thought_type": { + "$ref": "#/components/schemas/ThoughtType", + "nullable": true, + "default": "plan" + }, + "thought_scenario": { + "$ref": "#/components/schemas/ThoughtScenario", + "nullable": true + }, + "output": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Output" + }, + "input_token_count": { + "type": "integer", + "nullable": true, + "title": "Input Token Count" + }, + "output_token_count": { + "type": "integer", + "nullable": true, + "title": "Output Token Count" + }, + "reasoning_token_count": { + "type": "integer", + "nullable": true, + "title": "Reasoning Token Count" + }, + "cached_token_count": { + "type": "integer", + "nullable": true, + "title": "Cached Token Count" + }, + "thought_cost": { + "type": "number", + "nullable": true, + "title": "Thought Cost" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + } + }, + "type": "object", + "required": [ + "thought_id", + "task_id", + "organization_id", + "created_at", + "modified_at" + ], + "title": "Thought" + }, + "ThoughtScenario": { + "type": "string", + "enum": [ + "generate_plan", + "user_goal_check", + "failure_describe", + "summarization", + "generate_metadata", + "extract_loop_values", + "generate_task_in_loop", + "generate_general_task" + ], + "title": "ThoughtScenario" + }, + "ThoughtType": { + "type": "string", + "enum": [ + "plan", + "metadata", + "user_goal_check", + "internal_plan", + "failure_describe" + ], + "title": "ThoughtType" + }, + "TotpType": { + "type": "string", + "enum": [ + "authenticator", + "email", + "text", + "none" + ], + "title": "TotpType", + "description": "Type of 2FA/TOTP method used." + }, + "UploadFileAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "ai_upload_file" + ], + "title": "Type", + "default": "ai_upload_file" + }, + "selector": { + "type": "string", + "nullable": true, + "title": "Selector", + "description": "CSS selector for the element", + "default": "" + }, + "file_url": { + "type": "string", + "nullable": true, + "title": "File Url", + "description": "File URL for upload", + "default": "" + }, + "intention": { + "type": "string", + "title": "Intention", + "description": "The intention or goal of the upload", + "default": "" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Data", + "description": "Additional context data", + "nullable": true + }, + "timeout": { + "type": "number", + "title": "Timeout", + "description": "Timeout in milliseconds", + "default": 10000 + } + }, + "type": "object", + "title": "UploadFileAction", + "description": "Upload file action parameters." + }, + "UploadFileResponse": { + "properties": { + "s3_uri": { + "type": "string", + "title": "S3 Uri", + "description": "S3 URI where the file was uploaded" + }, + "presigned_url": { + "type": "string", + "title": "Presigned Url", + "description": "Presigned URL to access the uploaded file" + } + }, + "type": "object", + "required": [ + "s3_uri", + "presigned_url" + ], + "title": "UploadFileResponse" + }, + "UploadToS3Block": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "upload_to_s3" + ], + "title": "Block Type", + "default": "upload_to_s3" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "path": { + "type": "string", + "nullable": true, + "title": "Path" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "UploadToS3Block" + }, + "UploadToS3BlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "upload_to_s3" + ], + "title": "Block Type", + "default": "upload_to_s3" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "path": { + "type": "string", + "nullable": true, + "title": "Path" + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "UploadToS3BlockYAML" + }, + "UrlBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "goto_url" + ], + "title": "Block Type", + "default": "goto_url" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter", + "url" + ], + "title": "UrlBlock" + }, + "UrlBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "goto_url" + ], + "title": "Block Type", + "default": "goto_url" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "label", + "url" + ], + "title": "UrlBlockYAML" + }, + "UserDefinedError": { + "properties": { + "error_code": { + "type": "string", + "title": "Error Code" + }, + "reasoning": { + "type": "string", + "title": "Reasoning" + }, + "confidence_float": { + "type": "number", + "maximum": 1, + "minimum": 0, + "title": "Confidence Float" + } + }, + "type": "object", + "required": [ + "error_code", + "reasoning", + "confidence_float" + ], + "title": "UserDefinedError" + }, + "ValidateAction": { + "properties": { + "type": { + "type": "string", + "enum": [ + "validate" + ], + "title": "Type", + "default": "validate" + }, + "prompt": { + "type": "string", + "title": "Prompt", + "description": "Validation criteria or condition to check" + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model", + "description": "Optional model configuration" + } + }, + "type": "object", + "required": [ + "prompt" + ], + "title": "ValidateAction", + "description": "Validate action parameters." + }, + "ValidationBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "validation" + ], + "title": "Block Type", + "default": "validation" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "task_type": { + "type": "string", + "title": "Task Type", + "default": "general" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "title": { + "type": "string", + "title": "Title", + "default": "" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "default": "skyvern-1.0" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "max_retries": { + "type": "integer", + "title": "Max Retries", + "default": 0 + }, + "max_steps_per_run": { + "type": "integer", + "nullable": true, + "title": "Max Steps Per Run" + }, + "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": [] + }, + "complete_on_download": { + "type": "boolean", + "title": "Complete On Download", + "default": false + }, + "download_suffix": { + "type": "string", + "nullable": true, + "title": "Download Suffix" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "complete_verification": { + "type": "boolean", + "title": "Complete Verification", + "default": true + }, + "include_action_history_in_verification": { + "type": "boolean", + "title": "Include Action History In Verification", + "default": false + }, + "download_timeout": { + "type": "number", + "nullable": true, + "title": "Download Timeout" + } + }, + "type": "object", + "required": [ + "label", + "output_parameter" + ], + "title": "ValidationBlock" + }, + "ValidationBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "validation" + ], + "title": "Block Type", + "default": "validation" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "error_code_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Error Code Mapping" + }, + "parameter_keys": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Parameter Keys" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "ValidationBlockYAML" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "WaitBlock": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier for a block; unique within a workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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", + "enum": [ + "wait" + ], + "title": "Block Type", + "default": "wait" + }, + "output_parameter": { + "$ref": "#/components/schemas/OutputParameter" + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "disable_cache": { + "type": "boolean", + "title": "Disable Cache", + "default": false + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "wait_sec": { + "type": "integer", + "title": "Wait Sec" + }, + "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", + "wait_sec" + ], + "title": "WaitBlock" + }, + "WaitBlockYAML": { + "properties": { + "block_type": { + "type": "string", + "enum": [ + "wait" + ], + "title": "Block Type", + "default": "wait" + }, + "label": { + "type": "string", + "title": "Label", + "description": "Author-facing identifier; must be unique per workflow." + }, + "next_block_label": { + "type": "string", + "nullable": true, + "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": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "next_loop_on_failure": { + "type": "boolean", + "title": "Next Loop On Failure", + "default": false + }, + "wait_sec": { + "type": "integer", + "title": "Wait Sec", + "default": 0 + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "WaitBlockYAML" + }, + "Workflow": { + "properties": { + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "organization_id": { + "type": "string", + "title": "Organization Id" + }, + "title": { + "type": "string", + "title": "Title" + }, + "workflow_permanent_id": { + "type": "string", + "title": "Workflow Permanent Id" + }, + "version": { + "type": "integer", + "title": "Version" + }, + "is_saved_task": { + "type": "boolean", + "title": "Is Saved Task" + }, + "is_template": { + "type": "boolean", + "title": "Is Template", + "default": false + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "workflow_definition": { + "$ref": "#/components/schemas/WorkflowDefinition" + }, + "proxy_location": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProxyLocation" + }, + { + "$ref": "#/components/schemas/GeoTarget" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Proxy Location", + "nullable": true + }, + "webhook_callback_url": { + "type": "string", + "nullable": true, + "title": "Webhook Callback Url" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "persist_browser_session": { + "type": "boolean", + "title": "Persist Browser Session", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "status": { + "$ref": "#/components/schemas/WorkflowStatus", + "default": "published" + }, + "max_screenshot_scrolls": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolls" + }, + "extra_http_headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Extra Http Headers" + }, + "run_with": { + "type": "string", + "nullable": true, + "title": "Run With" + }, + "ai_fallback": { + "type": "boolean", + "title": "Ai Fallback", + "default": false + }, + "cache_key": { + "type": "string", + "nullable": true, + "title": "Cache Key" + }, + "run_sequentially": { + "type": "boolean", + "nullable": true, + "title": "Run Sequentially" + }, + "sequential_key": { + "type": "string", + "nullable": true, + "title": "Sequential Key" + }, + "folder_id": { + "type": "string", + "nullable": true, + "title": "Folder Id" + }, + "import_error": { + "type": "string", + "nullable": true, + "title": "Import Error" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "workflow_id", + "organization_id", + "title", + "workflow_permanent_id", + "version", + "is_saved_task", + "workflow_definition", + "created_at", + "modified_at" + ], + "title": "Workflow" + }, + "WorkflowCreateYAMLRequest": { + "properties": { + "title": { + "type": "string", + "title": "Title" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "proxy_location": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProxyLocation" + }, + { + "$ref": "#/components/schemas/GeoTarget" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Proxy Location", + "nullable": true + }, + "webhook_callback_url": { + "type": "string", + "nullable": true, + "title": "Webhook Callback Url" + }, + "totp_verification_url": { + "type": "string", + "nullable": true, + "title": "Totp Verification Url" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier" + }, + "persist_browser_session": { + "type": "boolean", + "title": "Persist Browser Session", + "default": false + }, + "model": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Model" + }, + "workflow_definition": { + "$ref": "#/components/schemas/WorkflowDefinitionYAML" + }, + "is_saved_task": { + "type": "boolean", + "title": "Is Saved Task", + "default": false + }, + "max_screenshot_scrolls": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolls" + }, + "extra_http_headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Extra Http Headers" + }, + "status": { + "$ref": "#/components/schemas/WorkflowStatus", + "default": "published" + }, + "run_with": { + "type": "string", + "nullable": true, + "title": "Run With" + }, + "ai_fallback": { + "type": "boolean", + "title": "Ai Fallback", + "default": false + }, + "cache_key": { + "type": "string", + "nullable": true, + "title": "Cache Key", + "default": "default" + }, + "run_sequentially": { + "type": "boolean", + "title": "Run Sequentially", + "default": false + }, + "sequential_key": { + "type": "string", + "nullable": true, + "title": "Sequential Key" + }, + "folder_id": { + "type": "string", + "nullable": true, + "title": "Folder Id" + } + }, + "type": "object", + "required": [ + "title", + "workflow_definition" + ], + "title": "WorkflowCreateYAMLRequest" + }, + "WorkflowDefinition": { + "properties": { + "version": { + "type": "integer", + "title": "Version", + "default": 1 + }, + "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" + }, + "blocks": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ConditionalBlock" + }, + { + "$ref": "#/components/schemas/ForLoopBlock" + }, + { + "$ref": "#/components/schemas/TaskBlock" + }, + { + "$ref": "#/components/schemas/CodeBlock" + }, + { + "$ref": "#/components/schemas/TextPromptBlock" + }, + { + "$ref": "#/components/schemas/DownloadToS3Block" + }, + { + "$ref": "#/components/schemas/UploadToS3Block" + }, + { + "$ref": "#/components/schemas/SendEmailBlock" + }, + { + "$ref": "#/components/schemas/FileParserBlock" + }, + { + "$ref": "#/components/schemas/PDFParserBlock" + }, + { + "$ref": "#/components/schemas/ValidationBlock" + }, + { + "$ref": "#/components/schemas/ActionBlock" + }, + { + "$ref": "#/components/schemas/NavigationBlock" + }, + { + "$ref": "#/components/schemas/ExtractionBlock" + }, + { + "$ref": "#/components/schemas/LoginBlock" + }, + { + "$ref": "#/components/schemas/WaitBlock" + }, + { + "$ref": "#/components/schemas/HumanInteractionBlock" + }, + { + "$ref": "#/components/schemas/FileDownloadBlock" + }, + { + "$ref": "#/components/schemas/UrlBlock" + }, + { + "$ref": "#/components/schemas/TaskV2Block" + }, + { + "$ref": "#/components/schemas/FileUploadBlock" + }, + { + "$ref": "#/components/schemas/HttpRequestBlock" + }, + { + "$ref": "#/components/schemas/PrintPageBlock" + } + ], + "discriminator": { + "propertyName": "block_type", + "mapping": { + "action": "#/components/schemas/ActionBlock", + "code": "#/components/schemas/CodeBlock", + "conditional": "#/components/schemas/ConditionalBlock", + "download_to_s3": "#/components/schemas/DownloadToS3Block", + "extraction": "#/components/schemas/ExtractionBlock", + "file_download": "#/components/schemas/FileDownloadBlock", + "file_upload": "#/components/schemas/FileUploadBlock", + "file_url_parser": "#/components/schemas/FileParserBlock", + "for_loop": "#/components/schemas/ForLoopBlock", + "goto_url": "#/components/schemas/UrlBlock", + "http_request": "#/components/schemas/HttpRequestBlock", + "human_interaction": "#/components/schemas/HumanInteractionBlock", + "login": "#/components/schemas/LoginBlock", + "navigation": "#/components/schemas/NavigationBlock", + "pdf_parser": "#/components/schemas/PDFParserBlock", + "print_page": "#/components/schemas/PrintPageBlock", + "send_email": "#/components/schemas/SendEmailBlock", + "task": "#/components/schemas/TaskBlock", + "task_v2": "#/components/schemas/TaskV2Block", + "text_prompt": "#/components/schemas/TextPromptBlock", + "upload_to_s3": "#/components/schemas/UploadToS3Block", + "validation": "#/components/schemas/ValidationBlock", + "wait": "#/components/schemas/WaitBlock" + } + } + }, + "type": "array", + "title": "Blocks" + }, + "finally_block_label": { + "type": "string", + "nullable": true, + "title": "Finally Block Label" + } + }, + "type": "object", + "required": [ + "parameters", + "blocks" + ], + "title": "WorkflowDefinition" + }, + "WorkflowDefinitionYAML": { + "properties": { + "version": { + "type": "integer", + "title": "Version", + "default": 1 + }, + "parameters": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AWSSecretParameterYAML" + }, + { + "$ref": "#/components/schemas/BitwardenLoginCredentialParameterYAML" + }, + { + "$ref": "#/components/schemas/BitwardenSensitiveInformationParameterYAML" + }, + { + "$ref": "#/components/schemas/BitwardenCreditCardDataParameterYAML" + }, + { + "$ref": "#/components/schemas/OnePasswordCredentialParameterYAML" + }, + { + "$ref": "#/components/schemas/AzureVaultCredentialParameterYAML" + }, + { + "$ref": "#/components/schemas/WorkflowParameterYAML" + }, + { + "$ref": "#/components/schemas/ContextParameterYAML" + }, + { + "$ref": "#/components/schemas/OutputParameterYAML" + }, + { + "$ref": "#/components/schemas/CredentialParameterYAML" + } + ], + "discriminator": { + "propertyName": "parameter_type", + "mapping": { + "aws_secret": "#/components/schemas/AWSSecretParameterYAML", + "azure_vault_credential": "#/components/schemas/AzureVaultCredentialParameterYAML", + "bitwarden_credit_card_data": "#/components/schemas/BitwardenCreditCardDataParameterYAML", + "bitwarden_login_credential": "#/components/schemas/BitwardenLoginCredentialParameterYAML", + "bitwarden_sensitive_information": "#/components/schemas/BitwardenSensitiveInformationParameterYAML", + "context": "#/components/schemas/ContextParameterYAML", + "credential": "#/components/schemas/CredentialParameterYAML", + "onepassword": "#/components/schemas/OnePasswordCredentialParameterYAML", + "output": "#/components/schemas/OutputParameterYAML", + "workflow": "#/components/schemas/WorkflowParameterYAML" + } + } + }, + "type": "array", + "title": "Parameters" + }, + "blocks": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TaskBlockYAML" + }, + { + "$ref": "#/components/schemas/ForLoopBlockYAML" + }, + { + "$ref": "#/components/schemas/CodeBlockYAML" + }, + { + "$ref": "#/components/schemas/TextPromptBlockYAML" + }, + { + "$ref": "#/components/schemas/DownloadToS3BlockYAML" + }, + { + "$ref": "#/components/schemas/UploadToS3BlockYAML" + }, + { + "$ref": "#/components/schemas/FileUploadBlockYAML" + }, + { + "$ref": "#/components/schemas/SendEmailBlockYAML" + }, + { + "$ref": "#/components/schemas/FileParserBlockYAML" + }, + { + "$ref": "#/components/schemas/ValidationBlockYAML" + }, + { + "$ref": "#/components/schemas/ActionBlockYAML" + }, + { + "$ref": "#/components/schemas/NavigationBlockYAML" + }, + { + "$ref": "#/components/schemas/ExtractionBlockYAML" + }, + { + "$ref": "#/components/schemas/LoginBlockYAML" + }, + { + "$ref": "#/components/schemas/WaitBlockYAML" + }, + { + "$ref": "#/components/schemas/HumanInteractionBlockYAML" + }, + { + "$ref": "#/components/schemas/FileDownloadBlockYAML" + }, + { + "$ref": "#/components/schemas/UrlBlockYAML" + }, + { + "$ref": "#/components/schemas/PDFParserBlockYAML" + }, + { + "$ref": "#/components/schemas/TaskV2BlockYAML" + }, + { + "$ref": "#/components/schemas/HttpRequestBlockYAML" + }, + { + "$ref": "#/components/schemas/ConditionalBlockYAML" + }, + { + "$ref": "#/components/schemas/PrintPageBlockYAML" + } + ], + "discriminator": { + "propertyName": "block_type", + "mapping": { + "action": "#/components/schemas/ActionBlockYAML", + "code": "#/components/schemas/CodeBlockYAML", + "conditional": "#/components/schemas/ConditionalBlockYAML", + "download_to_s3": "#/components/schemas/DownloadToS3BlockYAML", + "extraction": "#/components/schemas/ExtractionBlockYAML", + "file_download": "#/components/schemas/FileDownloadBlockYAML", + "file_upload": "#/components/schemas/FileUploadBlockYAML", + "file_url_parser": "#/components/schemas/FileParserBlockYAML", + "for_loop": "#/components/schemas/ForLoopBlockYAML", + "goto_url": "#/components/schemas/UrlBlockYAML", + "http_request": "#/components/schemas/HttpRequestBlockYAML", + "human_interaction": "#/components/schemas/HumanInteractionBlockYAML", + "login": "#/components/schemas/LoginBlockYAML", + "navigation": "#/components/schemas/NavigationBlockYAML", + "pdf_parser": "#/components/schemas/PDFParserBlockYAML", + "print_page": "#/components/schemas/PrintPageBlockYAML", + "send_email": "#/components/schemas/SendEmailBlockYAML", + "task": "#/components/schemas/TaskBlockYAML", + "task_v2": "#/components/schemas/TaskV2BlockYAML", + "text_prompt": "#/components/schemas/TextPromptBlockYAML", + "upload_to_s3": "#/components/schemas/UploadToS3BlockYAML", + "validation": "#/components/schemas/ValidationBlockYAML", + "wait": "#/components/schemas/WaitBlockYAML" + } + } + }, + "type": "array", + "title": "Blocks" + }, + "finally_block_label": { + "type": "string", + "nullable": true, + "title": "Finally Block Label" + } + }, + "type": "object", + "required": [ + "parameters", + "blocks" + ], + "title": "WorkflowDefinitionYAML" + }, + "WorkflowParameter": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "workflow" + ], + "title": "Parameter Type", + "default": "workflow" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "workflow_parameter_id": { + "type": "string", + "title": "Workflow Parameter Id" + }, + "workflow_parameter_type": { + "$ref": "#/components/schemas/WorkflowParameterType" + }, + "workflow_id": { + "type": "string", + "title": "Workflow Id" + }, + "default_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + } + ], + "title": "Default Value", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deleted At" + } + }, + "type": "object", + "required": [ + "key", + "workflow_parameter_id", + "workflow_parameter_type", + "workflow_id", + "created_at", + "modified_at" + ], + "title": "WorkflowParameter" + }, + "WorkflowParameterType": { + "type": "string", + "enum": [ + "string", + "integer", + "float", + "boolean", + "json", + "file_url", + "credential_id" + ], + "title": "WorkflowParameterType" + }, + "WorkflowParameterYAML": { + "properties": { + "parameter_type": { + "type": "string", + "enum": [ + "workflow" + ], + "title": "Parameter Type", + "default": "workflow" + }, + "key": { + "type": "string", + "title": "Key" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "workflow_parameter_type": { + "$ref": "#/components/schemas/WorkflowParameterType" + }, + "default_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + } + ], + "title": "Default Value", + "nullable": true + } + }, + "type": "object", + "required": [ + "key", + "workflow_parameter_type" + ], + "title": "WorkflowParameterYAML" + }, + "WorkflowRequest": { + "properties": { + "json_definition": { + "$ref": "#/components/schemas/WorkflowCreateYAMLRequest", + "nullable": true, + "description": "Workflow definition in JSON format" + }, + "yaml_definition": { + "type": "string", + "nullable": true, + "title": "Yaml Definition", + "description": "Workflow definition in YAML format" + } + }, + "type": "object", + "title": "WorkflowRequest" + }, + "WorkflowRunBlock": { + "properties": { + "workflow_run_block_id": { + "type": "string", + "title": "Workflow Run Block Id" + }, + "block_workflow_run_id": { + "type": "string", + "nullable": true, + "title": "Block Workflow Run Id" + }, + "workflow_run_id": { + "type": "string", + "title": "Workflow Run Id" + }, + "organization_id": { + "type": "string", + "title": "Organization Id" + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description" + }, + "parent_workflow_run_block_id": { + "type": "string", + "nullable": true, + "title": "Parent Workflow Run Block Id" + }, + "block_type": { + "$ref": "#/components/schemas/BlockType" + }, + "label": { + "type": "string", + "nullable": true, + "title": "Label" + }, + "status": { + "type": "string", + "nullable": true, + "title": "Status" + }, + "output": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Output", + "nullable": true + }, + "continue_on_failure": { + "type": "boolean", + "title": "Continue On Failure", + "default": false + }, + "failure_reason": { + "type": "string", + "nullable": true, + "title": "Failure Reason" + }, + "engine": { + "$ref": "#/components/schemas/RunEngine", + "nullable": true + }, + "task_id": { + "type": "string", + "nullable": true, + "title": "Task Id" + }, + "url": { + "type": "string", + "nullable": true, + "title": "Url" + }, + "navigation_goal": { + "type": "string", + "nullable": true, + "title": "Navigation Goal" + }, + "navigation_payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Navigation Payload", + "nullable": true + }, + "data_extraction_goal": { + "type": "string", + "nullable": true, + "title": "Data Extraction Goal" + }, + "data_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Data Schema", + "nullable": true + }, + "terminate_criterion": { + "type": "string", + "nullable": true, + "title": "Terminate Criterion" + }, + "complete_criterion": { + "type": "string", + "nullable": true, + "title": "Complete Criterion" + }, + "actions": { + "items": { + "$ref": "#/components/schemas/Action" + }, + "type": "array", + "title": "Actions", + "default": [] + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + }, + "include_action_history_in_verification": { + "type": "boolean", + "nullable": true, + "title": "Include Action History In Verification", + "default": false + }, + "duration": { + "type": "number", + "nullable": true, + "title": "Duration" + }, + "loop_values": { + "items": {}, + "type": "array", + "nullable": true, + "title": "Loop Values" + }, + "current_value": { + "type": "string", + "nullable": true, + "title": "Current Value" + }, + "current_index": { + "type": "integer", + "nullable": true, + "title": "Current Index" + }, + "recipients": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Recipients" + }, + "attachments": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Attachments" + }, + "subject": { + "type": "string", + "nullable": true, + "title": "Subject" + }, + "body": { + "type": "string", + "nullable": true, + "title": "Body" + }, + "instructions": { + "type": "string", + "nullable": true, + "title": "Instructions" + }, + "positive_descriptor": { + "type": "string", + "nullable": true, + "title": "Positive Descriptor" + }, + "negative_descriptor": { + "type": "string", + "nullable": true, + "title": "Negative Descriptor" + }, + "executed_branch_id": { + "type": "string", + "nullable": true, + "title": "Executed Branch Id" + }, + "executed_branch_expression": { + "type": "string", + "nullable": true, + "title": "Executed Branch Expression" + }, + "executed_branch_result": { + "type": "boolean", + "nullable": true, + "title": "Executed Branch Result" + }, + "executed_branch_next_block": { + "type": "string", + "nullable": true, + "title": "Executed Branch Next Block" + } + }, + "type": "object", + "required": [ + "workflow_run_block_id", + "workflow_run_id", + "organization_id", + "block_type", + "created_at", + "modified_at" + ], + "title": "WorkflowRunBlock" + }, + "WorkflowRunRequest": { + "properties": { + "workflow_id": { + "type": "string", + "title": "Workflow Id", + "description": "ID of the workflow to run. Workflow ID starts with `wpid_`.", + "example": "wpid_123" + }, + "parameters": { + "additionalProperties": true, + "type": "object", + "nullable": true, + "title": "Parameters", + "description": "Parameters to pass to the workflow" + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title", + "description": "The title for this workflow run" + }, + "proxy_location": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProxyLocation" + }, + { + "$ref": "#/components/schemas/GeoTarget" + }, + { + "additionalProperties": true, + "type": "object" + } + ], + "title": "Proxy Location", + "description": "\nGeographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud.\n\nAvailable geotargeting options:\n- RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy.\n- RESIDENTIAL_ES: Spain\n- RESIDENTIAL_IE: Ireland\n- RESIDENTIAL_GB: United Kingdom\n- RESIDENTIAL_IN: India\n- RESIDENTIAL_JP: Japan\n- RESIDENTIAL_FR: France\n- RESIDENTIAL_DE: Germany\n- RESIDENTIAL_NZ: New Zealand\n- RESIDENTIAL_PH: Philippines\n- RESIDENTIAL_ZA: South Africa\n- RESIDENTIAL_AR: Argentina\n- RESIDENTIAL_AU: Australia\n- RESIDENTIAL_ISP: ISP proxy\n- US-CA: California (deprecated, routes through RESIDENTIAL_ISP)\n- US-NY: New York (deprecated, routes through RESIDENTIAL_ISP)\n- US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP)\n- US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP)\n- US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP)\n- NONE: No proxy\n Can also be a GeoTarget object for granular city/state targeting: {\"country\": \"US\", \"subdivision\": \"CA\", \"city\": \"San Francisco\"}", + "default": "RESIDENTIAL", + "nullable": true + }, + "webhook_url": { + "type": "string", + "nullable": true, + "title": "Webhook Url", + "description": "URL to send workflow status updates to after a run is finished. Refer to https://www.skyvern.com/docs/running-tasks/webhooks-faq for webhook questions." + }, + "totp_url": { + "type": "string", + "nullable": true, + "title": "Totp Url", + "description": "\nURL that serves TOTP/2FA/MFA codes for Skyvern to use during the workflow run. Refer to https://www.skyvern.com/docs/credentials/totp#option-2-get-code-from-your-endpoint for more details.\n", + "example": "https://my-totp-service.com/totp" + }, + "totp_identifier": { + "type": "string", + "nullable": true, + "title": "Totp Identifier", + "description": "\nIdentifier for the TOTP/2FA/MFA code when the code is pushed to Skyvern. Refer to https://www.skyvern.com/docs/credentials/totp#option-3-push-code-to-skyvern for more details.\n", + "example": "john.doe@example.com" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "ID of a Skyvern browser session to reuse, having it continue from the current screen state" + }, + "browser_profile_id": { + "type": "string", + "nullable": true, + "title": "Browser Profile Id", + "description": "ID of a browser profile to reuse for this workflow run" + }, + "max_screenshot_scrolls": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolls", + "description": "The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot." + }, + "extra_http_headers": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "nullable": true, + "title": "Extra Http Headers", + "description": "The extra HTTP headers for the requests in browser." + }, + "browser_address": { + "type": "string", + "nullable": true, + "title": "Browser Address", + "description": "The CDP address for the workflow run.", + "example": "http://127.0.0.1:9222" + }, + "ai_fallback": { + "type": "boolean", + "nullable": true, + "title": "Ai Fallback", + "description": "Whether to fallback to AI if the workflow run fails." + }, + "run_with": { + "type": "string", + "nullable": true, + "title": "Run With", + "description": "Whether to run the workflow with agent or code." + } + }, + "type": "object", + "required": [ + "workflow_id" + ], + "title": "WorkflowRunRequest" + }, + "WorkflowRunResponse": { + "properties": { + "run_id": { + "type": "string", + "title": "Run Id", + "description": "Unique identifier for this run. Run ID starts with `tsk_` for task runs and `wr_` for workflow runs.", + "example": "tsk_123" + }, + "status": { + "$ref": "#/components/schemas/RunStatus", + "description": "Current status of the run", + "example": "created" + }, + "output": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": {}, + "type": "array" + }, + { + "type": "string" + } + ], + "title": "Output", + "description": "Output data from the run, if any. Format/schema depends on the data extracted by the run.", + "nullable": true + }, + "downloaded_files": { + "items": { + "$ref": "#/components/schemas/FileInfo" + }, + "type": "array", + "nullable": true, + "title": "Downloaded Files", + "description": "List of files downloaded during the run" + }, + "recording_url": { + "type": "string", + "nullable": true, + "title": "Recording Url", + "description": "URL to the recording of the run" + }, + "screenshot_urls": { + "items": { + "type": "string" + }, + "type": "array", + "nullable": true, + "title": "Screenshot Urls", + "description": "List of last n screenshot URLs in reverse chronological order - the first one the list is the latest screenshot." + }, + "failure_reason": { + "type": "string", + "nullable": true, + "title": "Failure Reason", + "description": "Reason for failure if the run failed or terminated" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Timestamp when this run was created", + "example": "2025-01-01T00:00:00Z" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At", + "description": "Timestamp when this run was last modified", + "example": "2025-01-01T00:05:00Z" + }, + "queued_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Queued At", + "description": "Timestamp when this run was queued" + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Started At", + "description": "Timestamp when this run started execution" + }, + "finished_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Finished At", + "description": "Timestamp when this run finished" + }, + "app_url": { + "type": "string", + "nullable": true, + "title": "App Url", + "description": "URL to the application UI where the run can be viewed", + "example": "https://app.skyvern.com/tasks/tsk_123" + }, + "browser_session_id": { + "type": "string", + "nullable": true, + "title": "Browser Session Id", + "description": "ID of the Skyvern persistent browser session used for this run", + "example": "pbs_123" + }, + "browser_profile_id": { + "type": "string", + "nullable": true, + "title": "Browser Profile Id", + "description": "ID of the browser profile used for this run", + "example": "bp_123" + }, + "max_screenshot_scrolls": { + "type": "integer", + "nullable": true, + "title": "Max Screenshot Scrolls", + "description": "The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot" + }, + "script_run": { + "$ref": "#/components/schemas/ScriptRunResponse", + "nullable": true, + "description": "The script run result" + }, + "errors": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "nullable": true, + "title": "Errors", + "description": "The errors for the run" + }, + "step_count": { + "type": "integer", + "nullable": true, + "title": "Step Count", + "description": "Total number of steps executed in this run" + }, + "run_type": { + "type": "string", + "enum": [ + "workflow_run" + ], + "title": "Run Type", + "description": "Type of run - always workflow_run for workflow runs" + }, + "run_with": { + "type": "string", + "nullable": true, + "title": "Run With", + "description": "Whether the workflow run was executed with agent or code", + "example": "agent" + }, + "ai_fallback": { + "type": "boolean", + "nullable": true, + "title": "Ai Fallback", + "description": "Whether to fallback to AI if code run fails." + }, + "run_request": { + "$ref": "#/components/schemas/WorkflowRunRequest", + "nullable": true, + "description": "The original request parameters used to start this workflow run" + } + }, + "type": "object", + "required": [ + "run_id", + "status", + "created_at", + "modified_at", + "run_type" + ], + "title": "WorkflowRunResponse" + }, + "WorkflowRunTimeline": { + "properties": { + "type": { + "$ref": "#/components/schemas/WorkflowRunTimelineType" + }, + "block": { + "$ref": "#/components/schemas/WorkflowRunBlock", + "nullable": true + }, + "thought": { + "$ref": "#/components/schemas/Thought", + "nullable": true + }, + "children": { + "items": { + "$ref": "#/components/schemas/WorkflowRunTimeline" + }, + "type": "array", + "title": "Children", + "default": [] + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "modified_at": { + "type": "string", + "format": "date-time", + "title": "Modified At" + } + }, + "type": "object", + "required": [ + "type", + "created_at", + "modified_at" + ], + "title": "WorkflowRunTimeline" + }, + "WorkflowRunTimelineType": { + "type": "string", + "enum": [ + "thought", + "block" + ], + "title": "WorkflowRunTimelineType" + }, + "WorkflowStatus": { + "type": "string", + "enum": [ + "published", + "draft", + "auto_generated", + "importing", + "import_failed" + ], + "title": "WorkflowStatus" + }, + "skyvern__forge__sdk__schemas__credentials__CredentialType": { + "type": "string", + "enum": [ + "password", + "credit_card", + "secret" + ], + "title": "CredentialType", + "description": "Type of credential stored in the system." + }, + "skyvern__schemas__run_blocks__CredentialType": { + "type": "string", + "enum": [ + "skyvern", + "bitwarden", + "1password", + "azure_vault" + ], + "title": "CredentialType" + } + } + }, + "servers": [ + { + "url": "https://api.skyvern.com" + }, + { + "url": "https://api-staging.skyvern.com" + }, + { + "url": "http://localhost:8000" + } + ] +} \ No newline at end of file diff --git a/docs/cloud/getting-started.mdx b/docs/cloud/getting-started.mdx index 07234258..8ddd6724 100644 --- a/docs/cloud/getting-started.mdx +++ b/docs/cloud/getting-started.mdx @@ -9,7 +9,7 @@ Run browser automations without writing code. This guide walks you through runni Prefer to integrate via code? Check out the [SDK Quickstart](/getting-started/quickstart) instead. -## Opening Skyvern Cloud +## Open Skyvern Cloud Visit [app.skyvern.com](https://app.skyvern.com) and sign-up or sign-in to your account. @@ -17,7 +17,7 @@ You'll land on the **Discover** page—your starting point for running automatio discover page in skyvern -## Understanding the Interface +## Understand the Interface The left sidebar organizes everything you need: diff --git a/docs/cloud/running-tasks.mdx b/docs/cloud/running-tasks.mdx new file mode 100644 index 00000000..af446118 --- /dev/null +++ b/docs/cloud/running-tasks.mdx @@ -0,0 +1,359 @@ +--- +title: Running Tasks +subtitle: Go deeper with task configuration in the Cloud UI +slug: cloud/running-tasks +--- + +You've run your first task. Now let's explore what else you can do—access websites as if you're in another country, extract structured data into JSON, watch the AI work in real-time, and turn successful tasks into reusable workflows. + + +New to Skyvern? Start with [Getting Started](/cloud/getting-started) to run your first task. + + +--- + +## The Discover page + +The **Discover** page is where you run ad-hoc tasks. Open [app.skyvern.com](https://app.skyvern.com) and you'll land here. + + + The Discover page with annotations + + +You'll see two main areas: + +**The Prompt Box** — Enter a URL and describe what you want Skyvern to do. Click the gear icon to access advanced settings before running. + +**Workflow Templates** — A carousel of pre-built automations for common tasks. Click any template to see how it's built, or use it as a starting point for your own. + +Tasks are flexible. You can: +- Extract data from any website without writing scrapers +- Fill out forms with data you provide +- Navigate multi-page flows (search → filter → extract) +- Download files like invoices and reports +- Monitor prices, inventory, or content changes + +The power comes from combining a clear prompt with the right settings. Let's walk through the key configurations. + +--- + +## Access geo-restricted content + +You're trying to scrape product prices from a UK retailer. But when you run the task, you see USD prices—the site detected you're in the US and redirected you. + +This is where **Proxy Location** changes everything. + + + Selecting UK proxy and seeing GBP prices + + +Skyvern routes your browser through residential IP addresses worldwide. The site sees a real UK visitor, shows GBP prices, and doesn't block you. + +**To set it up:** + +1. Click the gear icon to open settings +2. Find **Proxy Location** in the dropdown +3. Select the country you need + + + Proxy location dropdown showing available countries + + +Available locations include United States (default), United Kingdom, Germany, France, Japan, Australia, Canada, Brazil, and more. Select **None** if you're accessing internal tools that don't need a proxy. + +The browser's timezone adjusts automatically to match the proxy location. Sites that check for mismatches between IP and timezone won't flag you. + +--- + +## Extract structured data + +By default, Skyvern returns whatever data makes sense for your prompt. For consistent output you can process programmatically, define a **Data Schema**. + +Say you're extracting product information. Without a schema, you might get: + +```json +{"info": "The product costs $79.99 and is in stock"} +``` + +With a schema, you get predictable fields: + +```json +{ + "product_name": "Wireless Headphones", + "price": 79.99, + "in_stock": true +} +``` + +**To set it up:** + +1. Click the gear icon to open settings +2. Scroll to **Data Schema** +3. Enter a JSON Schema defining your fields + + + Data schema JSON editor + + +```json +{ + "type": "object", + "properties": { + "product_name": { + "type": "string", + "description": "The full product name" + }, + "price": { + "type": "number", + "description": "Current price in USD, without currency symbol" + }, + "in_stock": { + "type": "boolean", + "description": "Whether the product is currently available" + } + } +} +``` + +The `description` field is crucial—it tells the AI exactly what to look for. "Price in USD without currency symbol" works better than just "the price." + +**Extracting lists:** + +Need multiple items? Wrap your fields in an array: + +```json +{ + "type": "object", + "properties": { + "products": { + "type": "array", + "description": "Top 5 search results", + "items": { + "type": "object", + "properties": { + "name": { "type": "string", "description": "Product name" }, + "price": { "type": "number", "description": "Price in USD" } + } + } + } + } +} +``` + + +A schema doesn't guarantee all fields are populated. If the data isn't on the page, fields return `null`. + + +--- + +## Configure your task + +Click the gear icon to access all task settings. Here's what each one does: + + + Task settings panel + + +### Core settings + +| Setting | What it does | +|---------|--------------| +| **Navigation Goal** | Your main prompt—what should Skyvern do? | +| **Navigation Payload** | JSON data to use in form fields (names, addresses, etc.) | +| **Data Extraction Goal** | Describe what data you want extracted | +| **Data Schema** | JSON Schema for structured output | + +### Cost and limits + +| Setting | What it does | +|---------|--------------| +| **Max Steps Override** | Limit how many actions the AI can take. You're billed per step, so this caps costs. If the task hits this limit, it stops with a `timed_out` status. | + + +Always set a max steps limit during development. A task that gets stuck in a loop will keep consuming steps until it hits this limit. + + +### Advanced settings + +| Setting | What it does | +|---------|--------------| +| **Proxy Location** | Route traffic through a specific country | +| **Webhook Callback URL** | Receive a POST request when the task completes (instead of polling) | +| **2FA Identifier** | Handle two-factor authentication during login | +| **Browser Address** | Connect to your own browser for local development | +| **Extra HTTP Headers** | Add custom headers (e.g., Authorization tokens) | +| **Max Screenshot Scrolls** | How many times to scroll for lazy-loaded content | +| **Include Action History** | Include past actions when verifying completion | + +--- + +## Watch the live browser + +Once you click run, Skyvern opens a cloud browser and starts executing. You can watch it work in real-time via a live VNC stream. + + + Live browser view during task execution + + +The execution screen shows: + +| Area | What you see | +|------|--------------| +| **Left panel** | Task configuration—URL, prompt, current status badge | +| **Center** | Live browser stream. Watch pages load, forms fill, buttons click. | +| **Right panel** | Action list showing what the AI has done, with step count and cost | + +### Take control of the browser + +See the **Take Control** button? Click it to pause the AI and control the browser yourself. + + + Taking control of the browser to solve a CAPTCHA + + +Use this when: +- A CAPTCHA appears that the AI can't solve +- The site requires an unusual login flow +- You need to manually navigate past an unexpected popup + +Click **Stop Controlling** to hand control back to the AI. + +### Stop a running task + +Changed your mind? Click the **Cancel** button in the header. You'll be billed for steps already taken, but no further steps will run. + +--- + +## Review your results + +After the task completes, you'll see the results page. You can also find all past runs in **Runs** in the sidebar. + + + Task results page header + + +The header shows: +- **Task ID** — Unique identifier (click to copy) +- **Status badge** — `completed`, `failed`, `terminated`, `timed_out`, or `canceled` +- **Rerun button** — Run the same task again +- **API & Webhooks** — Copy the API command or test webhook delivery + +### Extracted data + +If the task completed successfully, the **Extracted Information** section shows your output: + + + Extracted data JSON display + + +```json +{ + "product_name": "Wireless Bluetooth Headphones", + "price": 79.99, + "in_stock": true +} +``` + +If something went wrong, you'll see **Failure Reason** with details about what happened. + +### Results tabs + +Four tabs let you dig deeper: + + + Results tabs showing Actions, Recording, Parameters, Diagnostics + + +**Actions** — Step-by-step breakdown of everything the AI did. Each action shows a screenshot, what was done, and why. The right side shows total steps, actions, and cost. + + + Actions tab with step-by-step screenshots + + +**Recording** — Full video replay of the browser session. Scrub through to see exactly what happened. + + + Recording tab with video player + + +**Parameters** — The configuration you submitted: URL, navigation goal, payload, schema, proxy, and all other settings. Useful for debugging or recreating the task. + +**Diagnostics** — Debug information including LLM prompts and responses, element trees, and annotated screenshots. Use this when you need to understand why the AI made a specific decision. + +### Understanding failures + +If your task failed or terminated, check these in order: + +1. **Recording** — Watch what happened. Did the AI get stuck? Click the wrong thing? +2. **Actions tab** — Read the AI's reasoning for each step. Where did it go wrong? +3. **Diagnostics** — See the full LLM prompt and response to understand the decision + +Common fixes: +- **Completed too early** → Add clearer completion criteria: "COMPLETE when you see the confirmation page with order number" +- **Wrong element clicked** → Add visual descriptions: "Click the blue Submit button at the bottom of the form" +- **Timed out** → Increase max steps, or simplify the task into smaller pieces + +--- + +## Turn a task into a workflow + +Found a task that works well? Save it as a reusable **Workflow** so you can run it again with different inputs. + +Before running your task, expand Advanced Settings and toggle **Publish Workflow** on. + + + Publish workflow toggle in settings + + +After the task completes successfully, Skyvern creates a workflow you can find in the **Workflows** section. From there you can: + +- Run it again with different data +- Edit the steps in the visual workflow builder +- Schedule it to run automatically +- Share it with your team + +--- + +## Tips for better results + +### Start simple, then iterate + +1. Run with just URL and prompt first—no advanced settings +2. Watch the live browser to understand what the AI does +3. Add constraints based on what you observe + +### Write better prompts + +The prompt drives everything. A good prompt includes: + +- **Clear goal** — "Get the price of the first product" not "Get product info" +- **Completion criteria** — "COMPLETE when you see the order confirmation page" +- **Visual hints** — "Click the blue Add to Cart button below the price" +- **What to extract** — "Extract the price as a number without the currency symbol" + +### Control costs + +- Set **Max Steps** to a reasonable limit for your task +- Watch the **Actions tab** to see if steps are being wasted +- Use **Data Schema** to get exactly the fields you need—nothing extra + +--- + +## What's next? + + + + Create multi-step automations with the visual workflow builder + + + Pull structured data from websites into JSON format + + diff --git a/docs/docs.json b/docs/docs.json index fbf66976..f1ebf65e 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -32,19 +32,38 @@ "running-automations/task-parameters", "running-automations/extract-structured-data" ] + }, + { + "group": "Multi-Step Automations", + "pages": [ + "multi-step-automations/build-a-workflow", + "multi-step-automations/workflow-blocks-reference", + "multi-step-automations/file-operations", + "multi-step-automations/workflow-parameters" + ] + }, + { + "group": "Going to Production", + "pages": [ + "going-to-production/webhooks", + "going-to-production/proxy-geolocation", + "going-to-production/error-handling", + "going-to-production/reliability-tips", + "going-to-production/captcha-bot-detection" + ] } ] }, { "tab": "Cloud UI", - "groups": [ - { - "group": "Cloud UI", - "pages": [ - "cloud/getting-started" - ] - } + "pages": [ + "cloud/getting-started", + "cloud/running-tasks" ] + }, + { + "tab": "API Reference", + "openapi": "api-reference/openapi.json" } ] }, @@ -69,6 +88,11 @@ } }, "api": { + "baseUrl": "https://api.skyvern.com", + "auth": { + "method": "key", + "name": "x-api-key" + }, "playground": { "display": "interactive" } diff --git a/docs/going-to-production/captcha-bot-detection.mdx b/docs/going-to-production/captcha-bot-detection.mdx new file mode 100644 index 00000000..649fec98 --- /dev/null +++ b/docs/going-to-production/captcha-bot-detection.mdx @@ -0,0 +1,209 @@ +--- +title: CAPTCHA & Bot Detection +subtitle: How Skyvern detects, solves, and avoids CAPTCHAs and anti-bot systems +slug: going-to-production/captcha-bot-detection +--- + +Websites use CAPTCHAs and bot detection to block automated traffic. Skyvern handles both — it detects CAPTCHAs using vision, solves them automatically on Skyvern Cloud, and configures browsers to avoid triggering anti-bot systems in the first place. + +--- + +## CAPTCHA detection + +Skyvern detects CAPTCHAs using its LLM vision model. During each step, the AI analyzes the page screenshot and identifies whether a CAPTCHA is present and what type it is. + +**Supported CAPTCHA types:** + +| Type | Examples | +|------|----------| +| `RECAPTCHA` | Google reCAPTCHA v2, v3 | +| `HCAPTCHA` | hCaptcha checkbox, image challenges | +| `CLOUDFLARE` | Cloudflare Turnstile, Challenge pages | +| `FUNCAPTCHA` | FunCaptcha / ArkoseLabs | +| `MTCAPTCHA` | MTCaptcha | +| `TEXT_CAPTCHA` | Distorted text/number images with an input field | +| `OTHER` | Unrecognized CAPTCHA types | + +When the AI detects a CAPTCHA, it emits a `SOLVE_CAPTCHA` action with the identified `captcha_type`. What happens next depends on your deployment. + +--- + +## CAPTCHA solving + +### Skyvern Cloud (automatic) + +On [Skyvern Cloud](https://app.skyvern.com), CAPTCHAs are solved automatically. When the AI detects a CAPTCHA, Skyvern's solver service handles it in the background. No configuration needed — it works out of the box for all supported CAPTCHA types. + +If the solver cannot resolve the CAPTCHA (rare edge cases or novel CAPTCHA types), the task continues with a `SOLVE_CAPTCHA` action failure. Handle this with [error code mapping](/going-to-production/error-handling): + + +```python Python +result = await client.run_task( + prompt="Submit the application form. COMPLETE when you see confirmation.", + url="https://example.com/apply", + error_code_mapping={ + "captcha_failed": "Return this if a CAPTCHA blocks progress after multiple attempts", + }, +) +``` + +```typescript TypeScript +const result = await client.runTask({ + body: { + prompt: "Submit the application form. COMPLETE when you see confirmation.", + url: "https://example.com/apply", + error_code_mapping: { + captcha_failed: "Return this if a CAPTCHA blocks progress after multiple attempts", + }, + }, +}); +``` + +```bash cURL +curl -X POST "https://api.skyvern.com/v1/run/tasks" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "prompt": "Submit the application form. COMPLETE when you see confirmation.", + "url": "https://example.com/apply", + "error_code_mapping": { + "captcha_failed": "Return this if a CAPTCHA blocks progress after multiple attempts" + } + }' +``` + + +### Human Interaction block (workflows) + +For workflows where you want a human to solve the CAPTCHA manually, use the **Human Interaction** block. The workflow pauses and notifies you, then resumes after you solve it. + +```yaml +blocks: + - block_type: navigation + label: fill_form + url: https://example.com/form + navigation_goal: Fill out the registration form + + - block_type: human_interaction + label: solve_captcha + message: "Please solve the CAPTCHA and click Continue" + + - block_type: navigation + label: submit_form + navigation_goal: Click the submit button +``` + +--- + +## Bot detection avoidance + +Skyvern automatically configures the browser to reduce bot detection triggers. These protections apply to every run — no configuration needed. + +### Browser fingerprinting + +Skyvern launches Chromium with settings that remove common automation signals: + +- **`AutomationControlled` disabled** — Removes the Blink feature flag that marks the browser as automated +- **`navigator.webdriver` hidden** — The `enable-automation` flag is suppressed so JavaScript detection scripts don't see a webdriver +- **Viewport and user agent** — Set to match real consumer browsers +- **Locale and timezone** — Automatically matched to the proxy location (see [Proxy & Geolocation](/going-to-production/proxy-geolocation)) + +### Reducing detection risk + +Beyond fingerprinting, how you structure your automation affects detection. Three patterns that help: + +**1. Use residential proxies for sensitive sites.** Datacenter IPs are the most common bot signal. Residential proxies route through real ISP addresses. See [Proxy & Geolocation](/going-to-production/proxy-geolocation). + +**2. Reuse browser sessions for multi-step flows.** Creating a fresh browser for every step looks suspicious. A persistent session maintains cookies, cache, and history — appearing as a returning user. See [Browser Sessions](/optimization/browser-sessions). + +**3. Use browser profiles for repeat visits.** Profiles save browser state from a previous session. Starting with an existing profile means the site sees a known browser with familiar cookies, not a blank slate. See [Browser Profiles](/optimization/browser-profiles). + +--- + +## Self-hosted deployment + + +The sections above apply to Skyvern Cloud. If you're running Skyvern locally, the following differences apply. + + +### CAPTCHA solving + +The open-source version does **not** include automatic CAPTCHA solving. When a CAPTCHA is detected, the agent pauses for 30 seconds to allow manual intervention (e.g., solving it in the browser window yourself), then continues. + +To handle CAPTCHAs in self-hosted workflows, use the Human Interaction block as described above. + +### Browser extensions + +Self-hosted deployments can load Chrome extensions for additional stealth or functionality: + +```bash +# .env +EXTENSIONS=extension1,extension2 +EXTENSIONS_BASE_PATH=/path/to/extensions +``` + +Extensions are loaded automatically when the browser launches. + +### Proxies + +Self-hosted deployments need their own proxy infrastructure. The `proxy_location` parameter is not available — configure proxies at the network level or via environment variables. + +--- + +## Troubleshooting + +### CAPTCHA blocks the run + +**On Skyvern Cloud:** This is rare. If it happens, the CAPTCHA type may be unsupported or the site changed its challenge. Add an `error_code_mapping` entry to detect the failure, and contact [support@skyvern.com](mailto:support@skyvern.com). + +**Self-hosted:** Use a Human Interaction block, or solve it manually within the 30-second window. + +### Bot detection triggered (access denied) + +1. Switch to a residential proxy — `proxy_location="RESIDENTIAL"` or `RESIDENTIAL_ISP` for static IPs +2. Reuse a browser session instead of creating fresh browsers +3. Use a browser profile with existing cookies +4. Add `wait` blocks between rapid actions to reduce behavioral signals + +### Cloudflare challenge page loops + +Cloudflare sometimes loops through multiple challenges. If a task gets stuck: + +- Increase `max_steps` to give the solver more attempts +- Use `RESIDENTIAL_ISP` for a static IP that Cloudflare is more likely to trust +- Use a browser profile that has previously passed the Cloudflare challenge on that domain + +--- + +## Next steps + + + + Route traffic through residential proxies in 19 countries + + + Configure TOTP, email, and SMS verification codes + + + Persist browser state across multiple runs + + + Map CAPTCHA and bot failures to custom error codes + + diff --git a/docs/going-to-production/error-handling.mdx b/docs/going-to-production/error-handling.mdx new file mode 100644 index 00000000..1d53ca6d --- /dev/null +++ b/docs/going-to-production/error-handling.mdx @@ -0,0 +1,694 @@ +--- +title: Error Handling +subtitle: Build systems that detect, classify, and recover from failures +slug: going-to-production/error-handling +--- + +Skyvern lets you make your workflows and tasks handle errors gracefully instead of failing silently. + +Every run returns a `status`. When it's not `completed`, you need to know what went wrong and respond programmatically. The flow is: + +1. **Check `status`** to detect failure states +2. **Read `failure_reason`** to get the raw error description +3. **Set up `error_code_mapping`** to map failures to your own error codes +4. **Respond in code** to branch your logic based on the error code + +This page covers each step with exact field locations and full code examples. + +--- + +## Step 1: Check `status` + +Every run transitions through these states: + +| Status | What it means | +|--------|---------------| +| `created` | Run initialized, not yet queued | +| `queued` | Waiting for an available browser | +| `running` | AI is navigating and executing | +| `completed` | Success—check `output` for results | +| `failed` | System error (browser crash, network failure, exception) | +| `terminated` | AI determined the goal is unachievable (login blocked, page unavailable) | +| `timed_out` | Exceeded `max_steps` or time limit | +| `canceled` | Manually stopped | + +**Terminal states:** `completed`, `failed`, `terminated`, `timed_out`, `canceled` + +You can detect failures in two ways: + +1. by polling `get_run` +2. by checking the webhook payload + +Both contain the same `status` field. + + +```json Polling Response +{ + "run_id": "tsk_v2_486305187432193504", + "status": "failed", // <-- Check this field + "output": null, + "failure_reason": "Login failed: Invalid credentials", + ... +} +``` + +```json Webhook Payload +{ + "run_id": "tsk_v2_486306851394503256", + "status": "completed", // <-- Check this field + "output": { + "top_post_title": "Linux kernel framework for PCIe device emulation, in userspace" + }, + "failure_reason": null, + "errors": [], + "webhook_callback_url": "https://your-server.com/webhook", + "created_at": "2026-01-20T11:58:57.414123", + "finished_at": "2026-01-20T12:00:31.512692", + ... +} +``` + + +The `status` field is at the top level of both responses. + +### For tasks + +Poll `get_run` until the status is terminal: + + +```python Python +run_id = result.run_id + +while True: + run = await client.get_run(run_id) + + if run.status in ["completed", "failed", "terminated", "timed_out", "canceled"]: + break + + await asyncio.sleep(5) + +if run.status == "completed": + process_output(run.output) +else: + handle_failure(run) +``` + +```typescript TypeScript +const runId = result.run_id; + +while (true) { + const run = await client.getRun(runId); + + if (["completed", "failed", "terminated", "timed_out", "canceled"].includes(run.status)) { + break; + } + + await new Promise((resolve) => setTimeout(resolve, 5000)); +} + +if (run.status === "completed") { + processOutput(run.output); +} else { + handleFailure(run); +} +``` + +```bash cURL +# Poll until terminal state +while true; do + RESPONSE=$(curl -s -X GET "https://api.skyvern.com/v1/runs/$RUN_ID" \ + -H "x-api-key: $SKYVERN_API_KEY") + + STATUS=$(echo $RESPONSE | jq -r '.status') + + if [[ "$STATUS" == "completed" ]] || [[ "$STATUS" == "failed" ]] || \ + [[ "$STATUS" == "terminated" ]] || [[ "$STATUS" == "timed_out" ]] || \ + [[ "$STATUS" == "canceled" ]]; then + echo $RESPONSE | jq + break + fi + + sleep 5 +done +``` + + +### For workflows + +Same polling pattern works for workflow runs: + + +```python Python +run_id = result.run_id + +while True: + run = await client.get_run(run_id) + + if run.status in ["completed", "failed", "terminated", "timed_out", "canceled"]: + break + + await asyncio.sleep(5) + +if run.status == "completed": + process_output(run.output) +else: + handle_failure(run) +``` + +```typescript TypeScript +const runId = result.run_id; + +while (true) { + const run = await client.getRun(runId); + + if (["completed", "failed", "terminated", "timed_out", "canceled"].includes(run.status)) { + break; + } + + await new Promise((resolve) => setTimeout(resolve, 5000)); +} + +if (run.status === "completed") { + processOutput(run.output); +} else { + handleFailure(run); +} +``` + +```bash cURL +# Poll workflow run until terminal state +while true; do + RESPONSE=$(curl -s -X GET "https://api.skyvern.com/v1/workflow_runs/$WORKFLOW_RUN_ID" \ + -H "x-api-key: $SKYVERN_API_KEY") + + STATUS=$(echo $RESPONSE | jq -r '.status') + + if [[ "$STATUS" == "completed" ]] || [[ "$STATUS" == "failed" ]] || \ + [[ "$STATUS" == "terminated" ]] || [[ "$STATUS" == "timed_out" ]] || \ + [[ "$STATUS" == "canceled" ]]; then + echo $RESPONSE | jq + break + fi + + sleep 5 +done +``` + + +**`failed` vs `terminated`:** A `failed` run hit infrastructure problems—retry might work. A `terminated` run means the AI recognized the goal is unachievable with current conditions. Retrying without changes (new credentials, different URL) will produce the same result. + +--- + +## Step 2: Read `failure_reason` + +When a run fails or terminates, the `failure_reason` field contains a description of what went wrong. This is a free-text string—useful for logging but hard to branch on programmatically. + +The field is available in both the polling response and webhook payload: + +```json +{ + "run_id": "tsk_v2_486305187432193504", + "status": "terminated", + "output": null, + "failure_reason": "Login failed: The page displayed 'Invalid username or password' after submitting credentials", // <-- Raw error text + ... +} +``` + +### For tasks + + +```python Python +run = await client.get_run(run_id) + +if run.status in ["failed", "terminated"]: + print(f"Run failed: {run.failure_reason}") + + # Fragile: parsing free text + if "login" in run.failure_reason.lower(): + refresh_credentials() +``` + +```typescript TypeScript +const run = await client.getRun(runId); + +if (["failed", "terminated"].includes(run.status)) { + console.log(`Run failed: ${run.failure_reason}`); + + // Fragile: parsing free text + if (run.failure_reason?.toLowerCase().includes("login")) { + refreshCredentials(); + } +} +``` + +```bash cURL +RESPONSE=$(curl -s -X GET "https://api.skyvern.com/v1/runs/$RUN_ID" \ + -H "x-api-key: $SKYVERN_API_KEY") + +STATUS=$(echo $RESPONSE | jq -r '.status') +FAILURE_REASON=$(echo $RESPONSE | jq -r '.failure_reason') + +if [[ "$STATUS" == "failed" ]] || [[ "$STATUS" == "terminated" ]]; then + echo "Run failed: $FAILURE_REASON" + + # Fragile: parsing free text + if echo "$FAILURE_REASON" | grep -qi "login"; then + # refresh_credentials + echo "Login error detected" + fi +fi +``` + + +### For workflows + + +```python Python +run = await client.get_run(workflow_run_id) + +if run.status in ["failed", "terminated"]: + print(f"Workflow failed: {run.failure_reason}") + + # Fragile: parsing free text + if "login" in run.failure_reason.lower(): + refresh_credentials() +``` + +```typescript TypeScript +const run = await client.getRun(workflowRunId); + +if (["failed", "terminated"].includes(run.status)) { + console.log(`Workflow failed: ${run.failure_reason}`); + + // Fragile: parsing free text + if (run.failure_reason?.toLowerCase().includes("login")) { + refreshCredentials(); + } +} +``` + +```bash cURL +RESPONSE=$(curl -s -X GET "https://api.skyvern.com/v1/workflow_runs/$WORKFLOW_RUN_ID" \ + -H "x-api-key: $SKYVERN_API_KEY") + +STATUS=$(echo $RESPONSE | jq -r '.status') +FAILURE_REASON=$(echo $RESPONSE | jq -r '.failure_reason') + +if [[ "$STATUS" == "failed" ]] || [[ "$STATUS" == "terminated" ]]; then + echo "Workflow failed: $FAILURE_REASON" + + # Fragile: parsing free text + if echo "$FAILURE_REASON" | grep -qi "login"; then + # refresh_credentials + echo "Login error detected" + fi +fi +``` + + +--- + +## Step 3: Use `error_code_mapping` + +`failure_reason` contains an AI-generated description of what went wrong. Define custom error codes to get consistent, actionable error messages. + +When the run fails, Skyvern evaluates your natural language error descriptions against the page state and returns the matching code. + +**How it works:** The `error_code_mapping` values are LLM-evaluated descriptions—you don't need exact string matches. For example, `"The login credentials are incorrect"` will match pages showing "Invalid password", "Wrong username", "Authentication failed", etc. + +### In tasks + +Pass `error_code_mapping` as a parameter to `run_task`: + + +```python Python +result = await client.run_task( + prompt="Log in and download the invoice for January 2024", + url="https://vendor-portal.example.com", + error_code_mapping={ + "login_failed": "The login credentials are incorrect, account is locked, or MFA is required", + "invoice_not_found": "No invoice exists for the requested date range", + "maintenance": "The website is down for maintenance or unavailable", + "access_denied": "User does not have permission to view invoices" + } +) +``` + +```typescript TypeScript +const result = await client.runTask({ + body: { + prompt: "Log in and download the invoice for January 2024", + url: "https://vendor-portal.example.com", + error_code_mapping: { + login_failed: "The login credentials are incorrect, account is locked, or MFA is required", + invoice_not_found: "No invoice exists for the requested date range", + maintenance: "The website is down for maintenance or unavailable", + access_denied: "User does not have permission to view invoices", + }, + }, +}); +``` + +```bash cURL +curl -X POST "https://api.skyvern.com/v1/run/tasks" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "prompt": "Log in and download the invoice for January 2024", + "url": "https://vendor-portal.example.com", + "error_code_mapping": { + "login_failed": "The login credentials are incorrect, account is locked, or MFA is required", + "invoice_not_found": "No invoice exists for the requested date range", + "maintenance": "The website is down for maintenance or unavailable", + "access_denied": "User does not have permission to view invoices" + } + }' +``` + + +### In workflows + +Add `error_code_mapping` to individual blocks (navigation, task, validation): + + +The JSON examples below include comments (`//`) for clarity. Remove comments before using in actual workflow definitions—JSON does not support comments. + + + +```json JSON +{ + "blocks": [ + { + "block_type": "navigation", + "label": "login_step", + "url": "https://vendor-portal.example.com/login", + "navigation_goal": "Log in using the stored credentials", + "error_code_mapping": { + "login_failed": "Login credentials are incorrect or account is locked", + "mfa_required": "Two-factor authentication is being requested", + "captcha_blocked": "CAPTCHA is displayed and cannot be bypassed" + } + }, + { + "block_type": "navigation", + "label": "download_invoice", + "navigation_goal": "Download the invoice for {{invoice_date}}", + "error_code_mapping": { + "invoice_not_found": "No invoice found for the specified date", + "download_failed": "Invoice exists but download button is broken or missing" + } + } + ] +} +``` + +```yaml YAML +- block_type: navigation + label: login_step + url: "https://vendor-portal.example.com/login" + navigation_goal: "Log in using the stored credentials" + error_code_mapping: + login_failed: "Login credentials are incorrect or account is locked" + mfa_required: "Two-factor authentication is being requested" + captcha_blocked: "CAPTCHA is displayed and cannot be bypassed" + +- block_type: navigation + label: download_invoice + navigation_goal: "Download the invoice for {{invoice_date}}" + error_code_mapping: + invoice_not_found: "No invoice found for the specified date" + download_failed: "Invoice exists but download button is broken or missing" +``` + + +### Where the error code appears + +When a mapped error occurs, your code appears in `output.error`. This field is available in both polling responses and webhook payloads: + + +```json Polling Response +{ + "run_id": "tsk_v2_486305187432193504", + "status": "terminated", + "output": { + "error": "login_failed" // <-- Your custom code + }, + "failure_reason": "Login failed: The page displayed 'Invalid username or password'" +} +``` + +```json Webhook Payload +{ + "run_id": "tsk_v2_486305187432193504", + "status": "terminated", + "output": { + "error": "login_failed" // <-- Your custom code + }, + "failure_reason": "Login failed: The page displayed 'Invalid username or password'", + "webhook_callback_url": "https://your-server.com/webhook", + "created_at": "2026-01-20T11:58:57.414123", + "finished_at": "2026-01-20T12:00:31.512692" +} +``` + + +Both `output.error` (your code) and `failure_reason` (raw text) are present. Use `output.error` for branching, `failure_reason` for logging. + +**Quick reference:** Where error codes appear + +| Context | Field | Example | +|---------|-------|---------| +| Polling response | `run.output.error` | `run.output.get("error")` in Python | +| Webhook payload | `output.error` | Same structure as polling | +| Successful run | `output` contains your extracted data | No `error` key present | + +--- + +## Step 4: Respond in code + +Now you can write clean switch/match logic: + + +```python Python +import asyncio +from skyvern import Skyvern + +client = Skyvern(api_key="your-api-key") + +async def run_with_error_handling(retries=1): + result = await client.run_task( + prompt="Log in and download the invoice", + url="https://vendor-portal.example.com", + error_code_mapping={ + "login_failed": "Login credentials are incorrect or account is locked", + "invoice_not_found": "No invoice for the requested date", + "maintenance": "Site is down for maintenance" + } + ) + + run_id = result.run_id + + # Poll until terminal state + while True: + run = await client.get_run(run_id) + if run.status in ["completed", "failed", "terminated", "timed_out", "canceled"]: + break + await asyncio.sleep(5) + + # Handle based on status and error code + if run.status == "completed": + return {"success": True, "data": run.output} + + error_code = run.output.get("error") if run.output else None + + if error_code == "login_failed": + if retries > 0: + await refresh_credentials("vendor-portal") + return await run_with_error_handling(retries=retries - 1) + return {"success": False, "reason": "login_failed", "details": "Retry limit reached"} + + elif error_code == "invoice_not_found": + # Expected condition—no invoice for this period + return {"success": False, "reason": "no_invoice", "date": invoice_date} + + elif error_code == "maintenance": + # Schedule retry for later + await schedule_retry(run_id, delay_minutes=60) + return {"success": False, "reason": "scheduled_retry"} + + else: + # Unknown error—log and alert + log_error(run_id, run.failure_reason) + return {"success": False, "reason": "unknown", "details": run.failure_reason} +``` + +```typescript TypeScript +async function runWithErrorHandling(retries = 1) { + const result = await client.runTask({ + body: { + prompt: "Log in and download the invoice", + url: "https://vendor-portal.example.com", + error_code_mapping: { + login_failed: "Login credentials are incorrect or account is locked", + invoice_not_found: "No invoice for the requested date", + maintenance: "Site is down for maintenance", + }, + }, + }); + + const runId = result.run_id; + + // Poll until terminal state + let run; + while (true) { + run = await client.getRun(runId); + if (["completed", "failed", "terminated", "timed_out", "canceled"].includes(run.status)) { + break; + } + await new Promise((r) => setTimeout(r, 5000)); + } + + // Handle based on status and error code + if (run.status === "completed") { + return { success: true, data: run.output }; + } + + const errorCode = run.output?.error; + + switch (errorCode) { + case "login_failed": + if (retries > 0) { + await refreshCredentials("vendor-portal"); + return runWithErrorHandling(retries - 1); + } + return { success: false, reason: "login_failed", details: "Retry limit reached" }; + + case "invoice_not_found": + return { success: false, reason: "no_invoice", date: invoiceDate }; + + case "maintenance": + await scheduleRetry(runId, { delayMinutes: 60 }); + return { success: false, reason: "scheduled_retry" }; + + default: + logError(runId, run.failure_reason); + return { success: false, reason: "unknown", details: run.failure_reason }; + } +} +``` + + +--- + +## Validation blocks as assertions + +Validation blocks are assertions that check conditions at critical points—like unit test assertions. If validation fails, the workflow terminates immediately with your error code instead of continuing and failing later with a confusing error. + +Use validation blocks after steps where you need to confirm success before proceeding: + + +```json JSON +{ + "blocks": [ + { + // First, attempt to log in + "block_type": "navigation", + "label": "login", + "url": "https://vendor-portal.example.com/login", + "navigation_goal": "Log in using stored credentials" + }, + { + // Then verify login succeeded before continuing + "block_type": "validation", + "label": "verify_login", + "complete_criterion": "Dashboard or account overview page is visible", + "terminate_criterion": "Login error message, CAPTCHA, or still on login page", + "error_code_mapping": { + "login_failed": "Login error message is displayed", + "captcha_required": "CAPTCHA verification is shown", + "session_expired": "Session timeout message appeared" + } + }, + { + // Only runs if validation passed + "block_type": "navigation", + "label": "download_invoice", + "navigation_goal": "Navigate to invoices and download {{invoice_date}}", + "error_code_mapping": { + "invoice_not_found": "No invoice for the specified date" + } + } + ] +} +``` + +```yaml YAML +blocks: + # First, attempt to log in + - block_type: navigation + label: login + url: "https://vendor-portal.example.com/login" + navigation_goal: "Log in using stored credentials" + + # Then verify login succeeded before continuing + - block_type: validation + label: verify_login + complete_criterion: "Dashboard or account overview page is visible" + terminate_criterion: "Login error message, CAPTCHA, or still on login page" + error_code_mapping: + login_failed: "Login error message is displayed" + captcha_required: "CAPTCHA verification is shown" + session_expired: "Session timeout message appeared" + + # Only runs if validation passed + - block_type: navigation + label: download_invoice + navigation_goal: "Navigate to invoices and download {{invoice_date}}" + error_code_mapping: + invoice_not_found: "No invoice for the specified date" +``` + + +| Parameter | Purpose | +|-----------|---------| +| `complete_criterion` | Condition that must be true to continue to the next block | +| `terminate_criterion` | Condition that stops the workflow immediately | +| `error_code_mapping` | Maps termination conditions to your error codes | + +If `verify_login` sees a login error, the workflow terminates with `output.error = "login_failed"`. Your Step 4 code handles it the same way as any other error code. + +--- + +## Common error patterns + +| Error Code | Description | Typical Response | +|------------|-------------|------------------| +| `login_failed` | Credentials wrong, account locked, or MFA | Refresh credentials, retry | +| `captcha_required` | CAPTCHA blocking automation | Use `human_interaction` block or browser profile | +| `not_found` | Target data doesn't exist | Return empty result, don't retry | +| `maintenance` | Site temporarily down | Schedule retry with backoff | +| `rate_limited` | Too many requests | Add delays, use different proxy | +| `access_denied` | Permission issue | Check account permissions | +| `timeout` | Task took too long | Increase `max_steps`, simplify task | + +--- + +## Next steps + + + + Write prompts that fail less often + + + Get notified when runs complete or fail + + diff --git a/docs/going-to-production/proxy-geolocation.mdx b/docs/going-to-production/proxy-geolocation.mdx new file mode 100644 index 00000000..9d7592c3 --- /dev/null +++ b/docs/going-to-production/proxy-geolocation.mdx @@ -0,0 +1,728 @@ +--- +title: Proxy & Geolocation +subtitle: Route browser traffic through residential proxies worldwide +slug: going-to-production/proxy-geolocation +--- + +export const COUNTRY_PATHS = { + "AD": "m 985.4,301.7 0.1,-0.2 0.1,-0.2 0,-0.1 -0.2,-0.1 -0.7,-0.2 -0.3,-0.1 -0.2,0.1 -0.2,0.2 -0.1,0.3 0.1,0.1 0,0.2 0,0.2 0.1,0.2 0.2,0 0.2,0 0.3,-0.1 0.5,-0.3 0.1,0 z", + "AE": "m 1283.9,408.6 -1.3,-2.2 -3,3.9 -3.7,4.1 -3.3,4.3 -3.3,-0.2 -4.6,-0.2 -4.2,1 -0.3,-1.7 -1,0.3 0.4,1.5 2.6,6.4 16.8,3.2 1,-1.3 -0.1,-2.6 1.4,-2.6 -0.3,-2.6 2.4,-1.3 -1.1,-0.8 0.1,-4.2 2.8,0 -1.3,-5 z", + "AF": "m 1369.9,333.8 -5.4,0 -3.8,-0.5 -2.5,2.9 -2.1,0.7 -1.5,1.3 -2.6,-2.1 -1,-5.4 -1.6,-0.3 0,-2 -3.2,-1.5 -1.7,2.3 0.2,2.6 -0.6,0.9 -3.2,-0.1 -0.9,3 -2.1,-1.3 -3.3,2.1 -1.8,-0.8 -4.3,-1.4 -2.9,0 -1.6,-0.2 -2.9,-1.7 -0.3,2.3 -4.1,1.2 0.1,5.2 -2.5,2 -4,0.9 -0.4,3 -3.9,0.8 -5.9,-2.4 -0.5,8 -0.5,4.7 2.5,0.9 -1.6,3.5 2.7,5.1 1.1,4 4.3,1.1 1.1,4 -3.9,5.8 9.6,3.2 5.3,-0.9 3.3,0.8 0.9,-1.4 3.8,0.5 6.6,-2.6 -0.8,-5.4 2.3,-3.6 4,0 0.2,-1.7 4,-0.9 2.1,0.6 1.7,-1.8 -1.1,-3.8 1.5,-3.8 3,-1.6 -3,-4.2 5.1,0.2 0.9,-2.3 -0.8,-2.5 2,-2.7 -1.4,-3.2 -1.9,-2.8 2.4,-2.8 5.3,-1.3 5.8,-0.8 2.4,-1.2 2.8,-0.7 -1.4,-1.9 z", + "AG": "m 634.3,463.8 0.2,-0.1 0,-0.1 0,-0.2 -0.1,-0.1 -0.1,-0.2 -0.4,-0.2 -0.5,0.5 0,0.2 0.1,0.3 0.6,0.1 0.2,-0.2 z m 0.2,-3.5 0,-0.5 -0.1,-0.2 -0.3,0 -0.1,-0.1 -0.1,0 -0.1,0.1 0.1,0.6 0.5,0.3 0.1,-0.2 z", + "AI": "m 627.9,456.2 0.1,-0.2 -0.2,-0.1 -0.8,0.5 0,0.1 0.9,-0.3 z", + "AL": "m 1077.5,300.5 -2,3.1 0.5,1.9 0,0 1,1 -0.5,1.9 -0.1,4.3 0.7,3 3,2.1 0.2,1.4 1,0.4 2.1,-3 0.1,-2.1 1.6,-0.9 0,-1.6 -2.3,-1.6 -0.9,-2.6 0.4,-2.1 0,0 -0.5,-2.3 -1.3,-0.6 -1.3,-1.6 -1.3,0.5 -0.4,-1.2 z", + "AM": "m 1219,325.1 -0.9,-4.4 -2.5,-1.1 -2.5,-1.7 1,-2 -3.1,-2.2 0.7,-1.5 -2.2,-1.1 -1.4,-1.7 -6.9,1 1.3,2.2 0,3.1 4.2,1.5 2.4,1.9 1,-0.2 1.8,1.7 2.3,0 0.2,1 2.8,3.7 1.8,-0.2 z", + "AO": "m 1068.3,609.6 -16.6,-0.1 -1.9,0.7 -1.7,-0.1 -2.3,0.9 -0.5,1.2 2.8,4 1.1,4.3 1.6,6.1 -1.7,2.6 -0.3,1.3 1.3,3.8 1.5,3.9 1.6,2.2 0.3,3.6 -0.7,4.8 -1.8,2.8 -3.3,4.2 -1.3,2.6 -1.9,5.7 -0.3,2.7 -2,5.9 -0.9,5.5 0.5,4 2.7,-1.2 3.3,-1 3.6,0.1 3.2,2.9 0.9,-0.4 22.5,-0.3 3.7,3 13.4,0.9 10.3,-2.5 -3.5,-4 -3.6,-5.2 0.8,-20.3 11.6,0.1 -0.5,-2.2 0.9,-2.4 -0.9,-3 0.7,-3 -0.5,-2 -2.6,-0.4 -3.5,1 -2.4,-0.2 -1.4,0.6 0.5,-7.6 -1.9,-2.3 -0.3,-4 0.9,-3.8 -1.2,-2.4 0,-4 -6.8,0 0.5,-2.3 -2.9,0 -0.3,1.1 -3.4,0.3 -1.5,3.7 -0.9,1.6 -3,-0.9 -1.9,0.9 -3.7,0.5 -2.1,-3.3 -1.3,-2.1 -1.6,-3.8 -1.3,-4.7 z m -21.8,-1.3 0.2,-2.7 0.9,-1.7 2,-1.3 -2,-2.2 -1.8,1.1 -2.2,2.7 1.4,4.8 1.5,-0.7 z", + "AR": "m 669.8,920.7 0.9,-3 -7.3,-1.5 -7.7,-3.6 -4.3,-4.6 -3,-2.8 5.9,13.5 5,0 2.9,0.2 3.3,2.1 4.3,-0.3 z m -50.4,-208.1 -7.4,-1.5 -4,5.7 0.9,1.6 -1.1,6.6 -5.6,3.2 1.6,10.6 -0.9,2 2,2.5 -3.2,4 -2.6,5.9 -0.9,5.8 1.7,6.2 -2.1,6.5 4.9,10.9 1.6,1.2 1.3,5.9 -1.6,6.2 1.4,5.4 -2.9,4.3 1.5,5.9 3.3,6.3 -2.5,2.4 0.3,5.7 0.7,6.4 3.3,7.6 -1.6,1.2 3.6,7.1 3.1,2.3 -0.8,2.6 2.8,1.3 1.3,2.3 -1.8,1.1 1.8,3.7 1.1,8.2 -0.7,5.3 1.8,3.2 -0.1,3.9 -2.7,2.7 3.1,6.6 2.6,2.2 3.1,-0.4 1.8,4.6 3.5,3.6 12,0.8 4.8,0.9 2.2,0.4 -4.7,-3.6 -4.1,-6.3 0.9,-2.9 3.5,-2.5 0.5,-7.2 4.7,-3.5 -0.2,-5.6 -5.2,-1.3 -6.4,-4.5 -0.1,-4.7 2.9,-3.1 4.7,-0.1 0.2,-3.3 -1.2,-6.1 2.9,-3.9 4.1,-1.9 -2.5,-3.2 -2.2,2 -4,-1.9 -2.5,-6.2 1.5,-1.6 5.6,2.3 5,-0.9 2.5,-2.2 -1.8,-3.1 -0.1,-4.8 -2,-3.8 5.8,0.6 10.2,-1.3 6.9,-3.4 3.3,-8.3 -0.3,-3.2 -3.9,-2.8 -0.1,-4.5 -7.8,-5.5 -0.3,-3.3 -0.4,-4.2 0.9,-1.4 -1.1,-6.3 0.3,-6.5 0.5,-5.1 5.9,-8.6 5.3,-6.2 3.3,-2.6 4.2,-3.5 -0.5,-5.1 -3.1,-3.7 -2.6,1.2 -0.3,5.7 -4.3,4.8 -4.2,1.1 -6.2,-1 -5.7,-1.8 4.2,-9.6 -1.1,-2.8 -5.9,-2.5 -7.2,-4.7 -4.6,-1 -11.2,-10.4 -1,-1.3 -6.3,-0.3 -1.6,5.1 -3.7,-4.6 z", + "AT": "m 1060.2,264 -2.3,-1.2 -2.3,0.3 -4,-1.9 -1.7,0.5 -2.6,2.5 -3.8,-2 -1.5,2.9 -1.7,0.8 1,4 -0.4,1.1 -1.7,-1.3 -2.4,-0.2 -3.4,1.2 -4.4,-0.3 -0.6,1.6 -2.6,-1.7 -1.5,0.3 0.2,1.1 -0.7,1.6 2.3,1.1 2.6,0.2 3.1,0.9 0.5,-1.2 4.8,-1.1 1.3,2.2 7.2,1.6 4.2,0.4 2.4,-1.4 4.3,-0.1 0.9,-1.1 1.3,-4 -1.1,-1.3 2.8,0 0.2,-2.6 -0.7,-2.1 0.3,-0.8 z", + "AU": "m 1726.7,832 -3,-0.5 -1.9,2.9 -0.6,5.4 -2.1,4 -0.5,5.3 3,0.2 0.8,0.3 6.6,-4.3 0.6,1.7 4,-4.9 3.2,-2.2 4.5,-7.3 -2.8,-0.5 -4.8,1.2 -3.4,0.9 -3.6,-2.2 z m 50.1,-172.3 0.5,-2.3 0.1,-3.6 -1.6,-3.2 0.1,-2.7 -1.3,-0.8 0.1,-3.9 -1.2,-3.2 -2.3,2.4 -0.4,1.8 -1.5,3.5 -1.8,3.4 0.6,2.1 -1.2,1.3 -1.5,4.8 0.1,3.7 -0.7,1.8 0.3,3.1 -2.6,5 -1.3,3.5 -1.7,2.9 -1.7,3.4 -4.1,2.1 -4.9,-2.1 -0.5,-2 -2.5,-1.6 -1.6,0 -3.3,-3.8 -2.5,-2.2 -3.9,-2 -3.9,-3.5 -0.1,-1.8 2.5,-3.1 2.1,-3.2 -0.3,-2.6 1.9,-0.2 2.5,-2.5 2,-3.4 -2.2,-3.2 -1.5,1.2 -2,-0.5 -3.5,1.8 -3.2,-2 -1.7,0.7 -4.5,-1.6 -2.7,-2.7 -3.5,-1.5 -3.1,0.9 3.9,2.1 -0.3,3.2 -4.8,1.2 -2.8,-0.7 -3.6,2.2 -2.9,3.7 0.6,1.5 -2.7,1.7 -3.4,5.1 0.6,3.5 -3.4,-0.6 -3.5,0 -2.5,-3.8 -3.7,-2.9 -2.8,0.8 -2.6,0.9 -0.3,1.6 -2.4,-0.7 -0.3,1.8 -3,1.1 -1.7,2.5 -3.5,3.1 -1.4,4.8 -2.3,-1.3 -2.2,3.1 1.5,3 -2.6,1.2 -1.4,-5.5 -4.8,5.4 -0.8,3.5 -0.7,2.5 -3.8,3.3 -2,3.4 -3.5,2.8 -6.1,1.9 -3.1,-0.2 -1.5,0.6 -1.1,1.4 -3.5,0.7 -4.7,2.4 -1.4,-0.8 -2.6,0.5 -4.6,2.3 -3.2,2.7 -4.8,2.1 -3.1,4.4 0.4,-4.8 -3.1,4.6 -0.1,3.7 -1.3,3.2 -1.5,1.5 -1.3,3.7 0.9,1.9 0.1,2 1.6,5 -0.7,3.3 -1,-2.5 -2.3,-1.8 0.4,5.9 -1.7,-2.8 0.1,2.8 1.8,5 -0.6,5 1.7,2.5 -0.4,1.9 0.9,4.1 -1.3,3.6 -0.3,3.6 0.7,6.5 -0.7,3.7 -2.2,4.4 -0.6,2.3 -1.5,1.5 -2.9,0.8 -1.5,3.7 2.4,1.2 4,4.1 3.6,0 3.8,0.3 3.3,-2.1 3.4,-1.8 1.4,0.3 4.5,-3.4 3.8,-0.3 4.1,-0.7 4.2,1.2 3.6,-0.6 4.6,-0.2 3,-2.6 2.3,-3.3 5.2,-1.5 6.9,-3.2 5,0.4 6.9,-2.1 7.8,-2.3 9.8,-0.6 4,3.1 3.7,0.2 5.3,3.8 -1.6,1.5 1.8,2.4 1.3,4.6 -1.6,3.4 2.9,2.6 4.3,-5.1 4.3,-2.1 6.7,-5.5 -1.6,4.7 -3.4,3.2 -2.5,3.7 -4.4,3.5 5.2,-1.2 4.7,-4.4 -0.9,4.8 -3.2,3.1 4.7,0.8 1.3,2.6 -0.4,3.3 -1.5,4.9 1.4,4 4,1.9 2.8,0.4 2.4,1 3.5,1.8 7.2,-4.7 3.5,-1.2 -2.7,3.4 2.6,1.1 2.7,2.8 4.7,-2.7 3.8,-2.5 6.3,-2.7 6,-0.2 4.2,-2.3 0.9,-2 3,-4.5 3.9,-4.8 3.6,-3.2 4.4,-5.6 3.3,-3.1 4.4,-5 5.4,-3.1 5,-5.8 3.1,-4.5 1.4,-3.6 3.8,-5.7 2.1,-2.9 2.5,-5.7 -0.7,-5.4 1.7,-3.9 1.1,-3.7 0,-5.1 -2.8,-5.1 -1.9,-2.5 -2.9,-3.9 0.7,-6.7 -1.5,1 -1.6,-2.8 -2.5,1.4 -0.6,-6.9 -2.2,-4 1,-1.5 -3.1,-2.8 -3.2,-3 -5.3,-3.3 -0.9,-4.3 1.3,-3.3 -0.4,-5.5 -1.3,-0.7 -0.2,-3.2 -0.2,-5.5 1.1,-2.8 -2.3,-2.5 -1.4,-2.7 -3.9,2.4 -1.2,-5 z", + "AW": "m 586.6,492.9 -0.1,-0.1 -0.3,-0.6 -0.3,-0.3 -0.1,0.1 -0.1,0.3 0.3,0.3 0.3,0.4 0.3,0.1 0,-0.2 z", + "AZ": "m 1210.1,318.9 -1,0.2 1.2,2.4 3.2,2.9 3.7,0.9 -2.8,-3.7 -0.2,-1 -2.3,0 -1.8,-1.7 z m 10.4,-9.3 -4.3,-3.8 -1.5,-0.2 -1.1,0.9 3.2,3.4 -0.6,0.7 -2.8,-0.4 -4.2,-1.8 -1.1,1 1.4,1.7 2.2,1.1 -0.7,1.5 3.1,2.2 -1,2 2.5,1.7 2.5,1.1 0.9,4.4 5.3,-4.7 1.9,-0.5 1.9,1.9 -1.2,3.1 3.8,3.4 1.3,-0.3 -0.8,-3.2 1.7,-1.5 0.4,-2.2 -0.1,-5 4.2,-0.5 -2,-1.7 -2.5,-0.2 -3.5,-4.5 -3.4,-3.2 0,0 -2.6,2.5 -0.5,1.5 -2.4,-0.4 z", + "BA": "m 1062.2,284.9 -2.3,0.1 -1,1.3 -1.9,-1.4 -0.9,2.5 2.7,2.9 1.3,1.9 2.5,2.3 2,1.4 2.2,2.5 4.7,2.4 0.4,-3.4 1.5,-1.4 0.9,-0.6 1.2,-0.3 0.5,-2.9 -2.7,-2.3 1,-2.7 -1.8,0 0,0 -2.4,-1.4 -3.5,0.1 -4.4,-1 z", + "BB": "m 644.9,488.9 0.4,-0.4 -0.3,-0.3 -0.6,-0.8 -0.3,0.1 0,1 0.1,0.3 0.5,0.3 0.2,-0.2 z", + "BD": "m 1486.5,431.9 -4.5,-10.1 -1.5,0.1 -0.2,4 -3.5,-3.3 1.1,-3.6 2.4,-0.4 1.6,-5.3 -3.4,-1.1 -5,0.1 -5.4,-0.9 -1.2,-4.4 -2.7,-0.4 -4.8,-2.7 -1.2,4.3 4.6,3.4 -3.1,2.4 -0.8,2.3 3.7,1.7 -0.4,3.8 2.6,4.8 1.6,5.2 2.2,0.6 1.7,0.7 0.6,-1.2 2.5,1.3 1.3,-3.5 -0.9,-2.6 5.1,0.2 2.8,3.7 1.5,3.1 0.8,3.2 2,3.3 -1.1,-5.1 2.1,1 -0.5,-4.6 z", + "BE": "m 1000.7,246.2 -4.4,1.3 -3.6,-0.5 0,0 -3.8,1.2 0.7,2.2 2.2,0.1 2.4,2.4 3.4,2.9 2.5,-0.4 4.4,2.8 0.4,-3.5 1.3,-0.2 0.4,-4.2 -2.8,-1.4 -3.1,-2.7 z", + "BF": "m 978.8,477.2 -3.6,0 -1.4,-1.2 -3,0.9 -5.2,2.6 -1.1,2 -4.3,2.9 -0.8,1.6 -2.3,1.3 -2.7,-0.9 -1.6,1.6 -0.8,4.4 -4.5,5.2 0.2,2.2 -1.6,2.7 0.4,3.7 2.5,1.4 1,2.1 2.5,1.3 1.9,-1.6 2.7,-0.2 3.8,1.6 -0.8,-4.8 0.2,-3.6 9.7,-0.3 2.4,0.5 1.8,-1 2.6,0.5 4.9,0.1 1.9,-0.7 1.2,-2.8 2.7,-0.6 1.2,-1.9 0.1,-4.4 -6.4,-1.4 -0.2,-3.1 -3.1,-4.1 -0.8,-2.9 0.5,-3.1 z", + "BG": "m 1121.6,294.3 -3,-0.7 -4,-2.2 -5.8,1.4 -2.3,1.6 -7.5,-0.3 -4,-1 -1.9,0.5 -1.8,-2.6 -1.1,1.4 0.7,2.3 2.8,2.6 -1.7,1.9 -0.7,2 0.6,0.7 -0.7,0.9 2.8,2 0.8,4.1 3.8,0.2 3.9,-1.7 3.9,2.1 4.6,-0.6 -0.3,-3 5,-2 4.5,0.8 -2.1,-3.5 1.3,-4.4 2.2,-2.5 z", + "BI": "m 1148.2,590 -0.3,-2.5 0,0 -3,-0.4 -1.7,3.6 -3.5,-0.5 1.4,2.9 0.1,1.1 2,6.1 -0.1,0.3 0.6,-0.1 2.1,-2.3 2.2,-3.3 1.4,-1.4 0,-2 -1.2,-1.5 z", + "BJ": "m 996.9,498 -4.3,-3.7 -2,0 -1.9,1.9 -1.2,1.9 -2.7,0.6 -1.2,2.8 -1.9,0.7 -0.7,3.3 1.7,1.9 2,2.3 0.2,3.1 1.1,1.3 -0.2,14.6 1.4,4.4 4.6,-0.8 0.3,-10.2 -0.1,-4.1 1,-4 1.7,-1.9 2.7,-4 -0.6,-1.7 1.1,-2.5 -1.2,-3.8 0.2,-2.1 z", + "BM": "m 630.2,366.8 0.4,-0.6 -0.1,0 -0.5,0.5 -0.6,0.2 0.1,0.1 0.1,0 0.6,-0.2 z", + "BN": "m 1617.8,543.4 2.7,3.3 1.1,-2.2 2.7,0.2 0.1,-4.1 0.1,-3.1 -4.6,3.5 -2.1,2.4 z", + "BO": "m 655.7,700.5 1.6,-1.3 -0.8,-3.6 1.3,-2.8 0.5,-5 -1.6,-4 -3.2,-1.7 -0.8,-2.6 0.6,-3.6 -10.7,-0.3 -2.7,-7.4 1.6,-0.1 -0.3,-2.8 -1.2,-1.8 -0.5,-3.7 -3.3,-1.9 -3.5,0.1 -2.5,-1.9 -3.8,-1.2 -2.4,-2.4 -6.3,-1 -6.4,-5.7 0.3,-4.3 -0.9,-2.5 0.4,-4.7 -7.3,1.1 -2.8,2.3 -4.8,2.6 -1.1,1.9 -2.9,0.2 -4.2,-0.6 5.5,10.3 -1.1,2.1 0.1,4.5 0.3,5.4 -1.9,3.2 1.2,2.4 -1.1,2.1 2.8,5.3 -2.8,6.9 3.1,4.3 1.2,4.6 3.2,2.7 -1.1,6.2 3.7,7.1 3.1,8.8 3.8,-0.9 4,-5.7 7.4,1.5 3.7,4.6 1.6,-5.1 6.3,0.3 1,1.3 1.5,-7.6 -0.2,-3.4 2.1,-5.6 9.5,-1.9 5.1,0.1 5.4,3.3 0.3,1.9 z", + "BR": "m 659,560.1 -1.4,0.2 -3.1,-0.5 -1.8,1.7 -2.6,1.1 -1.7,0.2 -0.7,1.3 -2.7,-0.3 -3.5,-3 -0.3,-2.9 -1.4,-3.3 1,-5.4 1.6,-2.2 -1.2,-3 -1.9,-0.9 0.8,-2.8 -1.3,-1.5 -2.9,0.3 0.7,1.8 -2.1,2.4 -6.4,2.4 -4,1 -1.7,1.5 -4.4,-1.6 -4.2,-0.8 -1,0.6 2.4,1.6 -0.3,4.3 0.7,4 4.8,0.5 0.3,1.4 -4.1,1.8 -0.7,2.7 -2.3,1 -4.2,1.5 -1.1,1.9 -4.4,0.5 -3,-3.4 -1.1,0.8 -1,-3.8 -1.6,-2 -1.9,2.2 -10.9,-0.1 0,3.9 3.3,0.7 -0.2,2.4 -1.1,-0.6 -3.2,1 0,4.6 2.5,2.4 0.9,3.6 -0.1,2.8 -2.2,17.4 -5.1,-0.3 -0.7,1 -4.6,1.2 -6.2,4.3 -0.4,3 -1.3,2.2 0.7,3.4 -3.3,1.9 0.1,2.7 -1.5,1.1 2.6,5.8 3.3,3.8 -1,2.8 3.7,0.3 2.3,3.4 4.9,0.2 4.4,-3.8 0.2,9.7 2.6,0.7 3,-1.1 4.2,0.6 2.9,-0.2 1.1,-1.9 4.8,-2.6 2.8,-2.3 7.3,-1.1 -0.4,4.7 0.9,2.5 -0.3,4.3 6.4,5.7 6.3,1 2.4,2.4 3.8,1.2 2.5,1.9 3.5,-0.1 3.3,1.9 0.5,3.7 1.2,1.8 0.3,2.8 -1.6,0.1 2.7,7.4 10.7,0.3 -0.6,3.6 0.8,2.6 3.2,1.7 1.6,4 -0.5,5 -1.3,2.8 0.8,3.6 -1.6,1.3 1.9,3.6 0.4,8.6 6,1.2 2.1,-1.2 3.9,1.7 1.2,1.9 1,5.8 0.9,2.5 2,0.3 2,-1.1 2.1,1.2 0.3,3.5 -0.3,3.8 -0.7,3.6 2.6,-1.2 3.1,3.7 0.5,5.1 -4.2,3.5 -3.3,2.6 -5.3,6.2 -5.9,8.6 3.4,-0.7 6.2,4.9 1.9,-0.2 6.2,4.1 4.8,3.5 3.8,4.3 -1.9,3 2.1,3.7 2.9,-3.7 1.5,-6 3.2,-3 3.9,-5 4.5,-11.2 3.4,-3.5 0.8,-3.1 0.3,-6.4 -1.3,-3.5 0.3,-4.8 4.1,-6.3 6,-5.1 6,-1.8 3.6,-2.9 8.5,-2.4 5.9,0 1.1,-3.8 4.2,-2.8 0.6,-6.5 5.1,-8.3 0.5,-8.5 1.6,-2.6 0.3,-4.1 1.1,-9.9 -1,-11.9 1.4,-4.7 1.4,-0.1 3.9,-5.5 3.3,-7.2 7.7,-8.8 2.7,-4.2 2,-10.5 -1,-3.9 -2,-8.1 -2.1,-2 -4.8,-0.2 -4.3,-1.9 -7.3,-7.1 -8.4,-5.3 -8.4,0.3 -10.9,-3.4 -6.5,2 0.8,-3.5 -2.7,-3.8 -9.4,-3.8 -7.1,-2.3 -4.2,4.1 -0.3,-6.3 -9.9,-1 -1.7,-2 4.2,-5.2 -0.1,-4.4 -3,-1 -3,-11.2 -1.3,-3.5 -1.9,0.3 -3.5,5.8 -1.8,4.7 -2.1,2.4 -2.7,0.5 -0.8,-1.8 -1.2,-0.3 -1.8,1.8 -2.4,-1.3 -3.2,-1.4 -2.7,0.7 -2.3,-0.6 -0.5,1.8 0.9,1.3 -0.5,1.3 -3.1,-0.5 z", + "BS": "m 574.4,437.3 0.2,-0.6 -0.3,-0.1 -0.5,0.7 -0.6,0.3 -0.3,0 -0.7,-0.3 -0.5,0 -0.4,0.5 -0.6,0.1 0.1,0.1 0,0.2 -0.2,0.3 0,0.2 0.1,0.3 1.5,-0.1 1.3,-0.2 0.7,-0.9 0.2,-0.5 z m 0.8,-2 -0.4,-0.3 -0.4,0.3 0.1,0.3 0.7,-0.3 z m 0,-5.8 -0.4,-0.2 -0.3,0.5 0.3,0.1 0.7,-0.1 0.5,0.1 0.5,0.4 0.3,-0.2 -0.1,-0.1 -0.4,-0.3 -0.6,-0.1 -0.2,0 -0.3,-0.1 z m -6.6,1.3 0.7,-0.6 0.7,-0.3 0.9,-1.1 -0.1,-0.9 0.2,-0.4 -0.6,0.1 -0.1,0.3 -0.1,0.3 0.3,0.4 0,0.2 -0.2,0.4 -0.3,0.1 -0.1,0.2 -0.3,0.1 -0.4,0.5 -0.8,0.6 -0.2,0.3 0.4,-0.2 z m 1.2,-3.2 -0.6,-0.2 -0.2,-0.4 -0.4,-0.1 -0.1,0.2 0,0.2 0.1,0.4 0.2,-0.1 0.8,0.4 0.4,-0.3 -0.2,-0.1 z m -4.1,-1.1 0,-0.7 -0.4,-0.5 -0.6,-0.4 -0.1,-1.2 -0.3,-0.7 -0.2,-0.6 -0.4,-0.8 0,0.5 0.1,0.1 0.1,0.6 0.4,0.9 0.1,0.4 -0.1,0.4 -0.4,0.1 -0.1,0.2 0.5,0.3 0.8,0.3 0.5,1.3 0.1,-0.2 z m -4.1,-3.5 -0.5,-0.3 -0.2,-0.3 -0.7,-0.7 -0.3,-0.1 -0.2,0.4 0.4,0.1 0.9,0.7 0.4,0.2 0.2,0 z m 7.3,-4 -0.1,-0.3 -0.1,0 -0.3,0.1 -0.3,0.9 0.3,0 0.5,-0.7 z m -17.6,-1.1 -0.2,-0.3 -0.3,0.2 -0.5,0 -0.2,0.1 -0.4,0 -0.3,0.2 0.4,0.8 0.3,0.3 0.1,1 0.2,0.1 -0.1,0.7 1.1,0.1 0.4,-0.8 0,-0.3 0,-0.1 0,-0.2 0,-0.2 0,-0.9 -0.3,-0.5 -0.4,0.6 -0.4,-0.3 0.6,-0.4 0,-0.1 z m 12.9,0.3 -1,-1.4 0,-0.2 -0.5,-1.5 -0.3,-0.1 -0.1,0.1 -0.1,0.2 0.4,0.4 0,0.4 0.3,0.2 0.4,1.1 0.4,0.4 -0.1,0.3 -0.4,0.3 -0.1,0.2 0.1,0 0.6,-0.1 0.4,0 0,-0.3 z m -10.5,-5.2 0.5,-0.2 0,0 -0.3,-0.2 -0.7,0 -0.4,0.1 -0.2,0.2 0.1,0.1 0.4,0.1 0.6,-0.1 z m -2.4,2 -0.5,-0.6 -0.3,-0.9 -0.2,-0.4 0.1,-0.5 -0.3,-0.4 -0.6,-0.4 -0.3,0.1 0.1,1.1 -0.2,0.6 -0.8,1.1 0.1,0.4 0,0 0.1,0.2 -0.5,0.4 0,-0.3 -0.6,0.1 0.3,0.5 0.6,0.4 0.3,0.1 0.3,-0.2 0,0.5 0.3,0.4 0.1,0.4 0.3,-0.3 0.6,-0.2 0.2,-0.2 0.7,-0.4 0,-0.2 0.1,-0.6 0.1,-0.7 z m 6.7,-5 -0.3,-0.5 -0.1,0.1 -0.1,0.4 -0.3,0.4 0.5,-0.1 0.4,0.1 0.6,0.5 0.7,0.2 0.3,0.6 0.6,0.6 0,0.6 -0.4,0.6 -0.1,0.7 -0.6,0.1 0.1,0.1 0.3,0.3 0.1,0.4 0.2,0.2 0,-0.7 0.3,-0.8 0.4,-1.3 -0.1,-0.3 -0.3,-0.3 -0.7,-0.9 -0.7,-0.3 -0.8,-0.7 z m -8.8,-7.9 -0.5,-0.4 -0.2,0.4 0,0.1 -0.1,0.3 -0.5,0.4 -0.5,0.1 -0.7,-0.6 -0.2,-0.1 0.8,1.1 0.3,0.1 0.4,0 0.9,-0.3 1.6,-0.5 1.7,-0.2 0.1,-0.2 -0.1,-0.3 -0.8,0.2 -1,-0.1 -0.2,0.2 -0.4,0 -0.6,-0.2 z m 6.1,5.2 0.2,-0.3 0.4,-1.8 0.8,-0.6 0.1,-1.2 -0.5,-0.5 -0.4,-0.2 -0.1,-0.2 0.1,-0.2 -0.2,-0.1 -0.3,-0.2 -0.4,-0.6 -0.4,-0.4 -0.7,-0.1 -0.6,-0.1 -0.4,-0.1 -0.5,0.3 0.8,0 1.5,0.3 0.7,1.5 0.5,0.4 0.1,0.4 -0.2,0.4 0,0.4 -0.3,0.5 -0.1,0.8 -0.3,0.4 -0.7,0.5 0.4,0.2 0.3,0.6 0.2,-0.1 z", + "BT": "m 1474.7,395.5 -2.7,-1.8 -2.9,-0.1 -4.2,-1.5 -2.6,1.6 -2.6,4.8 0.3,1.2 5.5,2.5 3.2,-1 4.7,0.4 4.4,-0.2 -0.4,-3.9 -2.7,-2 z", + "BW": "m 1116.7,685 -1,-0.5 -3.2,1.5 -1.6,0 -3.7,2.5 -2,-2.6 -8.6,2.2 -4.1,0.2 -0.9,22.7 -5.4,0.2 -0.6,18.5 1.4,1 3,6.1 -0.7,3.8 1.1,2.3 4,-0.7 2.8,-2.8 2.7,-1.9 1.5,-3.1 2.7,-1.5 2.3,0.8 2.5,1.8 4.4,0.3 3.6,-1.5 0.6,-2 1.2,-3 3,-0.5 1.7,-2.4 2,-4.3 5.2,-4.7 8,-4.7 -3.4,-2.9 -4.2,-0.9 -1.5,-4.1 0.1,-2.2 -2.3,-0.7 -6,-7 -1.6,-3.7 -1.1,-1.1 -1.9,-5.1 z", + "BY": "m 1112.8,219.4 -5.2,-1.5 -4.6,2.3 -2.6,1 0.9,2.6 -3.5,2 -0.5,3.4 -4.8,2.2 -4.6,0 0.6,2.7 1.7,2.3 0.3,2.4 -2.7,1.2 1.9,2.9 0.5,2.7 2.2,-0.3 2.4,-1.6 3.7,-0.2 5,0.5 5.6,1.5 3.8,0.1 2,0.9 1.6,-1.1 1.5,1.5 4.3,-0.3 2,0.6 -0.2,-3.1 1.2,-1.4 4.1,-0.3 0,0 -2,-3.9 -1.5,-2 0.8,-0.6 3.9,0.2 1.6,-1.3 -1.7,-1.6 -3.4,-1.1 0.1,-1.1 -2.2,-1.1 -3.7,-3.9 0.6,-1.6 -1,-2.9 -4.8,-1.4 -2.3,0.7 -1,-1.4 z", + "BZ": "m 482.5,471.1 1.4,-2.2 1,-0.2 1.3,-1.7 1,-3.2 -0.3,-0.6 0.9,-2.3 -0.4,-1 1.3,-2.7 0.3,-1.8 -1.1,0 0.1,-0.9 -1,0 -2.5,3.9 -0.9,-0.8 -0.7,0.3 -0.1,1 -0.7,5 -1.2,7.2 1.6,0 z", + "CA": "m 659,276.7 -0.7,-3 -2.5,1.9 0.5,2.1 5.6,2.6 1.9,-0.4 3.3,-2.5 -4.7,0.1 -3.4,-0.8 z m 14.4,-15.9 0.2,-1.1 -4.1,-2.6 -5.9,-1.6 -1.9,0.6 3.5,2.9 5.7,1.9 2.5,-0.1 z m -305.3,3.7 0.2,-3.4 -3.2,-2.6 -0.4,-2.9 -0.1,-2.1 -4.1,-0.7 -2.4,-0.9 -4.1,-1.4 -1.4,1.5 -0.6,3.3 4.3,1.1 -0.4,1.8 2.9,2.2 0,2.2 6.3,2.8 3,-0.9 z m 336.1,-13.5 3.9,-3.8 1.4,-1.7 -2.1,-0.3 -4.9,2.2 -4.2,3.5 -8.1,9.8 -5.3,3.7 1.6,1.7 -3.8,2.2 0.2,1.9 9.6,0.1 5.4,-0.3 4.4,1.5 -4.4,2.9 2.9,0.2 7.3,-5.4 1.2,0.8 -2.5,5.1 3,1.2 2.3,-0.2 3.5,-5.5 -0.5,-3.9 0.3,-3.3 -3.7,1.1 2.8,-4.6 -4.3,-1.9 -2.7,1.5 -3.9,-1.7 2.4,-2.1 -2.9,-1.3 -3.8,2 4.9,-5.4 z m -356.8,-21.2 -1.9,2 -1.4,2.6 0.9,1.9 -0.6,2.8 0.7,2.8 1.9,0 -0.2,-4.9 7.1,-6.9 -4.9,0.5 -1.6,-0.8 z m 280.9,-47 -0.4,-1.2 -1.7,-0.1 -2.8,1.7 -0.4,0.4 0.1,1.7 1.7,0.5 3.5,-3 z m -9.6,-3.2 0.8,-1.1 -6,-0.1 -4.9,2.7 0,1.5 3,0.2 7.1,-3.2 z m -3.1,-16.6 -2.7,-0.5 -5,5.2 -3.6,4.4 -5.7,2.8 6.3,-0.6 -0.8,3.4 8.2,-3 6.2,-3 0.8,2.6 5.9,1.3 4.9,-1.8 -1.9,-1.8 -3.4,0.4 1.3,-2.7 -3.7,-1.7 -3.4,-1.9 -1.5,-1.5 -2.8,0.9 0.9,-2.5 z m 44.6,-8.2 3.7,-1.7 1,-0.7 1.4,-2.3 -2.3,-1.5 -4.2,0.7 -3.8,3.1 -0.7,2.6 4.9,-0.2 z m -73.8,-10.7 -0.8,-2 -0.3,-1 -1.6,-1 -3,-1.5 -4.9,2.3 -5,1.7 3.5,2.4 3.8,-0.6 4.1,1.6 4.2,-1.9 z m 22.4,-2.1 -6.6,-1 5.7,-2.6 -0.4,-6 -1.9,-2.3 -4.5,-0.8 -8.1,3.8 -5.5,5.8 2.9,2.1 1.6,3.3 -6.3,5.5 -3.2,-0.2 -6.2,4.4 4.2,-5.2 -4.8,-1.8 -4.5,0.9 -2.4,3.4 -5.9,-0.1 -7.2,0.8 -5.1,-2.4 -5,0.4 -1.5,-2.9 -2.1,-1.3 -3.8,0.5 -5.2,0.3 -4.4,1.8 2,2.3 -7,2.8 -1.4,-3.3 -4.4,1 -11.8,0.6 -6.4,-1.2 8.5,-2.6 -2.8,-2.8 -4.4,0.4 -4.7,-1 -7.5,-1.9 -3.8,-2.3 -4.5,-0.3 -3.3,1.6 -5.9,0.9 3.9,-4.1 -9.4,3.6 -1.4,-4.7 -2.1,-0.6 -3.8,2.5 -4.5,1.2 -0.2,-2.2 -8.2,1.4 -8.8,2.3 -5.2,-0.6 -7,1.6 -6.2,2.3 -3.7,-0.5 -3.3,-2.6 -5.9,-1.3 0,0 -24.3,20.2 -35.4,32.4 4.2,0.1 2.7,1.6 0.6,2.6 0.2,3.9 7.6,-3.3 6.4,-1.9 -0.5,3 0.7,2.4 1.7,2.7 -1.1,4.2 -1.5,6.8 4.6,3.8 -3.1,3.7 -5.1,2.9 0,0 -2.5,3.1 2.1,4.4 -3.1,4.9 4.1,2.6 -3.6,3.7 -1.3,5.5 6.9,2.5 1.6,2.7 5.4,6.1 0.7,0 13.9,0 14.6,0 4.8,0 15,0 14.5,0 14.7,0 14.8,0 16.7,0 16.8,0 10.1,0 1.3,-2.4 1.6,0 -0.8,3.4 1,1 3.2,0.4 4.6,1 3.8,1.9 4.4,-0.8 5.3,1.6 0,0 3.2,-2.4 3.2,-1 1.8,-1.5 1.5,-0.8 4,1.2 3.3,0.2 0.8,0.8 0.1,3.5 5.2,1 -1.7,1.7 1.2,1.9 -1.9,2.3 1.8,0.8 -1.9,2.1 0,0 1.2,0.2 1.3,-0.9 0.5,1.4 3.4,0.7 3.8,0.1 3.8,0.6 4,1.2 0.8,2 1.4,4.7 -2.4,2 -3.8,-0.8 -1,-3.8 -0.9,3.9 -3.8,3.4 -0.8,2.9 -1.1,1.7 -4.1,2 0,0 -3.7,3.4 -2,2.2 2.7,0.4 4.5,-2 2.9,-1.7 1.6,-0.3 2.6,0.6 1.7,-0.9 2.8,-0.8 4.7,-0.8 0,0 0,0 0.3,-1.8 -0.3,0.1 -1.7,0.3 -1.8,-0.6 2.3,-2.1 1.9,-0.7 3.9,-0.9 4.6,-0.9 1.8,1.2 1.9,-1.4 1.9,-0.8 0.9,0.4 0.1,0.1 6.7,-4.2 2.7,-1.2 7.7,0 9.3,0 1,-1.6 1.7,-0.3 2.5,-0.9 2.7,-2.8 3.2,-4.9 5.5,-4.7 1.1,1.7 3.7,-1.1 1.5,1.8 -2.8,8.5 2.1,3.5 5.9,-0.8 8.1,-0.2 -10.4,5.1 -1.5,5.2 3.7,0.5 7.1,-4.5 5.8,-2.4 12.2,-3.7 7.5,-4.1 -2.6,-2.2 1,-4.5 -7.1,7 -8.6,0.8 -5.5,-3.1 -0.1,-4.6 0.6,-6.8 6.1,-4.1 -3.3,-3.1 -7.6,0.6 -12.1,5.2 -10.9,8.2 -4.6,1 7.8,-5.7 10.1,-8.3 7.2,-2.7 5.7,-4.4 5.2,-0.5 7.3,0.1 10,1.3 8.6,-1 7.8,-5.1 8.7,-2.2 4.2,-2.1 4.2,-2.3 2,-6.8 -1.1,-2.3 -3.4,-0.8 0,-5.1 -2.3,-1.9 -6.9,-1.6 -2.8,-3.4 -4.8,-3.4 3.4,-3.7 -2,-7.1 -2.6,-7.5 -1,-5.2 -4.3,2.7 -7.4,6.5 -8.1,3.2 -1.6,-3.4 -3.7,-1 2.2,-7.3 2.6,-4.9 -7.7,-0.5 -0.1,-2.2 -3.6,-3.3 -3,-2 -4.5,1.5 -4.2,-0.5 -6.6,-1.6 -3.9,1.3 -3.8,9 -1,5.3 -8.8,6.1 3.1,4.5 0.5,5 -1.7,4 -4.7,4.1 -7.5,4.2 -9,2.8 1.7,3.2 -2.2,9.6 -5.6,6.3 -4.6,1.9 -4.4,-5.8 -0.1,-6.8 1.7,-6 3.6,-5.2 -4.8,-0.6 -7.5,-0.4 -3.6,-2.5 -4.8,-1.6 -1.7,-2.9 -3.3,-2.2 -7,-2.6 -7.1,1.2 0.7,-4.5 1.5,-5.5 -6,-1 4.9,-6.8 4.9,-4.6 9.4,-6.5 8.6,-4.6 5.6,-0.7 2.9,-3.7 5.1,-2.4 6.4,-0.4 7.7,-3.8 2.9,-2.4 7.4,-4.7 3.2,-2.8 3.2,1.7 6.5,-0.9 10.8,-3.8 2.3,-2.7 -0.8,-2.9 5,-2.9 1.7,-2.7 -3.5,-2.6 -5.4,-0.8 -5.5,-0.4 -4.6,5.9 -6.5,4.6 -7.2,4 -1.3,-3.7 4.2,-4 -2.2,-3.5 -8.7,4.2 4.3,-5.5 z m -75.5,-18.9 -2.8,-1 -14.1,3.2 -5.1,2 -7.8,3.9 5.4,1.4 6.2,-0.1 -11.5,2.1 0,1.9 5.6,0.1 9,-0.4 6.5,1.2 -6.2,1 -5.5,-0.3 -7.1,0.9 -3.3,0.6 0.6,4.2 4.2,-0.6 4.1,1.5 -0.3,2.5 7.8,-0.5 11.2,-0.8 9.4,-1.8 5,-0.4 5.7,1.5 6.7,0.8 3.1,-1.9 -0.7,-2.1 7,-0.4 2.6,-2.4 -5,-2.5 -4.2,-2.6 2.4,-3.6 2.7,-5.1 -2.2,-2 -3,-0.9 -4.2,0.8 -2.8,5.3 -4.3,2.1 2.2,-5.1 -1.7,-1.7 -7.3,2.7 -2.6,-2.6 -10.4,1.5 4.7,-2.4 z m 39.1,-1.5 -1.7,-1.1 -5.4,0.2 -2.1,0.7 2.2,3.6 7,-3.4 z m 107.7,1.6 -4.4,-2.8 -8.4,-0.5 -2.1,0.3 -1.7,1.8 2,2.8 0.9,0.3 4.8,-0.7 4.1,0.1 4.1,0.1 0.7,-1.4 z m -39.4,-0.3 5.7,-3.2 -11.2,1.3 -5.8,2.1 -7.1,4.6 -3.3,5.2 5.6,0.1 -6.1,2.3 1.8,1.9 5.9,0.8 7.3,1.5 13.8,1.2 7.9,-0.6 3.2,-1.6 2,1.8 3.3,0.3 2,3.3 -3.5,1.4 7.1,1.8 4.6,2.6 0.5,1.9 -0.4,2.4 -8.6,5.4 -3.2,2.7 0.2,2 -9.2,0.7 -8,0.1 -5.4,4.2 2.4,1.9 13,-0.9 0.9,-1.6 4.7,2.7 4.7,2.9 -2.4,1.6 3.8,2.8 7.6,3.3 10.7,2.3 0.3,-2 -2.8,-3.5 -3.5,-4.9 8.5,4.6 4.7,1.5 3.6,-4.1 0,-5.6 -1,-1.5 -4.4,-2.5 -2.7,-3.3 2.3,-3.2 5.8,-0.7 3.8,5.4 4,2.4 10.7,-6.5 3.3,-3.9 -6.4,-0.3 -3.2,-5.1 -5.9,-1.2 -7.7,-3.5 9,-2.5 -0.8,-5 -2.2,-2.1 -8.3,-2.1 -1.9,-3.3 -8.2,1.2 1.1,-2.3 -3.6,-2.5 -6.8,-2.6 -5.2,2.1 -9,1.5 3.3,-3.4 -2.3,-5.3 -11.6,2.1 -7.1,4.1 -0.3,-3.2 z m -50,-3.4 -7.1,2.4 0.9,3.4 -7.4,-0.7 -1.7,1.7 5.8,3.9 0.9,2 3.4,0.5 8.4,-2 5.1,-4.7 -3.8,-2.2 6,-2.4 0.5,-1.5 -7.5,0.6 -3.5,-1 z m 22.3,5.4 5.6,-1 10,-4.5 -6.1,-1.2 -7.8,-0.2 -5.2,1.4 -4.2,2.1 -2.5,2.6 -1.8,4.5 4.3,0.2 7.7,-3.9 z m -114.7,7.2 2.6,-2.3 9.1,-3.6 13.8,-3.6 6.4,-1.3 -1.6,-2.1 -1.9,-1.5 -9.4,-0.2 -4.1,-1.1 -14,0.8 -0.3,3.1 -7.6,3.3 -7.4,3.8 -4.3,2.2 5.9,2.7 -0.6,2.3 13.4,-2.5 z m 124.1,-18.3 0.3,-1.6 -1.4,-1.7 -6.9,1.3 -4.4,2.2 3.2,1.3 5.1,0.4 4.1,-1.9 z m -8.7,-8.6 -1.1,0.7 -4.8,-0.3 -7.6,1.6 -3.8,-0.1 -4.3,3.8 6.6,-0.4 -3.4,2.9 3.2,0.8 6.8,-0.5 5.8,-3.7 2.8,-2.5 -0.2,-2.3 z m -39.1,2.5 1.8,-2.3 -3.1,-0.5 -5.7,1.7 -0.7,4.7 -6.1,-0.4 -2.8,-2.9 -8.2,-1.6 -5.4,1.4 -11.6,4.8 4.1,0.8 17.8,-0.5 -10.6,2.2 -1.5,1.6 5.9,-0.1 12.2,-2.2 13.8,-0.8 5.1,-2.3 2.3,-2.4 -3.7,-0.2 -4.3,0.8 0.7,-1.8 z m 55.2,-4.3 -7.1,-0.3 -3.8,2 2.6,1.5 7,0.6 1.4,2.1 -2.2,2.4 -1.5,2.8 8.5,1.6 5.5,0.6 8,-0.1 11.6,-0.8 4.3,0.6 6.7,-1 3.5,-1.4 1,-2 -2.3,-1.9 -5.8,-0.3 -8,0.4 -7,1.1 -5.1,-0.4 -4.8,-0.3 -1.2,-1.1 -3.1,-1.1 2.8,-1.9 -1.4,-1.6 -7.3,0.1 -2.3,-1.6 z m -75,-2.6 -6,0.7 -5.5,-0.1 -12.1,3.1 -11.6,3.7 0,0 3.6,1 7,-0.7 9.8,-2.1 3.8,-0.3 5.2,-1.6 5.8,-3.7 z m 80.5,0.6 1,-0.5 -1.5,-0.9 -7.2,-0.1 -0.6,1.3 6.4,0.3 1.9,-0.1 z m -58.4,-0.8 3.2,-1.4 -4.1,-0.8 -5.9,0.5 -5.1,1.5 3.3,1.5 8.6,-1.3 z m 7.8,-4.2 -3.3,-0.9 -1.6,-0.2 -5.7,1.3 -1,0.7 6,0 5.6,-0.9 z m 46.4,2.5 3,-1.7 -2.3,-1.6 -1.7,-0.3 -4.4,-0.1 -2.1,1.8 -0.7,1.8 1.6,1.1 6.6,-1 z m -13.7,-1.2 0.1,-2.2 -7.4,-1.7 -6.1,-0.6 -2.1,1.7 2.8,1.1 -5.3,1.4 7.7,0.2 4,1.5 5.2,0.5 1.1,-1.9 z m 53.7,-6.1 0.6,-2.8 -4.7,-0.8 -4.7,-0.9 -1.6,-2.2 -8.2,0.2 0.3,0.9 -3.9,0.3 -4.1,1.3 -4.9,1.9 -0.3,1.9 2,1.5 6.5,0 -4.3,1.2 -2.1,1.6 1.6,1.9 6.7,0.6 6.8,-0.4 10.5,-3.4 6.4,-1.3 -2.6,-1.5 z m 78.5,-13.8 -7,-0.2 -6.9,-0.3 -10.2,0.6 -1.4,-0.4 -10.3,0.2 -6.4,0.4 -5.1,0.6 -5,2 -2.3,-1 -3.9,-0.2 -6.7,1.4 -7.4,0.6 -4.1,0.1 -6,0.8 -1.1,1.3 2.5,1.2 0.8,1.6 4.4,1.5 12.4,-0.3 7.2,0.5 -7.2,1.5 -2.2,-0.4 -9.3,-0.2 -1.1,2.2 3,1.7 -2.8,1.6 -7.5,1.1 -4.9,1.7 4.8,0.9 1.7,3 -7.5,-2 -2.5,0.3 -2,3.4 -8,1.1 -2,2.3 6.7,0.3 4.9,0.6 11.7,-0.8 8.4,1.4 12.6,-3 1,-1.1 -6.4,0.2 0.5,-1.1 6.5,-1.4 3.6,-1.9 6.8,-1.3 5,-1.6 -0.8,-2.2 3.3,-0.8 -4.3,-0.6 11.1,-0.4 3.2,-0.9 7.9,-0.8 9.3,-3.5 6.8,-1.1 10.3,-2.5 -7.4,0 3.9,-0.9 9,-0.8 9.7,-1.6 1.1,-1.1 -5.2,-1 -6.7,-0.4 -8.5,-0.3 z", + "CD": "m 1124.9,539.4 -4.3,-0.7 -2,0.6 -0.9,1.5 -1.8,0.2 -2.2,-1.3 -6.2,3.1 -2.6,-0.6 -0.8,0.5 -1.6,3.8 -4.2,-1.2 -4.1,-0.6 -3.6,-2.4 -4.6,-2.1 -3,2 -2.2,3.2 -0.5,4.5 -0.3,3.8 -1.6,3.4 -1.1,4 -0.7,5.6 0.3,3.6 -0.9,2.2 -0.2,2.4 -0.6,2 -3.7,3.1 -2.6,3.2 -2.5,6.2 0.2,5.3 -1.4,2 -3.3,3.1 -3.4,4 -2,-1.1 -0.4,-1.8 -3.1,-0.1 -1.9,2.4 -1.5,-0.6 -2,1.3 -0.9,1.7 -0.2,2.7 -1.5,0.7 0.8,2 2.3,-0.9 1.7,0.1 1.9,-0.7 16.6,0.1 1.3,4.7 1.6,3.8 1.3,2.1 2.1,3.3 3.7,-0.5 1.9,-0.9 3,0.9 0.9,-1.6 1.5,-3.7 3.4,-0.3 0.3,-1.1 2.9,0 -0.5,2.3 6.8,0 0,4 1.2,2.4 -0.9,3.8 0.3,4 1.9,2.3 -0.5,7.6 1.4,-0.6 2.4,0.2 3.5,-1 2.6,0.4 1.9,0.1 0.3,2 2.6,-0.1 3.5,0.6 1.8,2.8 4.5,0.9 3.4,-2 1.2,3.4 4.3,0.8 2,2.8 2.1,3.5 4.3,0 -0.3,-6.9 -1.5,1.2 -3.9,-2.5 -1.4,-1.1 0.8,-6.4 1.2,-7.5 -1.2,-2.8 1.6,-4.1 1.6,-0.7 7.5,-1.1 1,0.3 0.2,-1.1 -1.5,-1.7 -0.7,-3.5 -3.4,-3.5 -1.8,-4.5 1,-2.7 -1.5,-3.6 1.1,-10.2 0.1,0.1 -0.1,-1.1 -1.4,-2.9 0.6,-3.5 0.8,-0.4 0.2,-3.8 1.6,-1.8 0.1,-4.8 1.3,-2.4 0.3,-5.1 1.2,-3 2.1,-3.3 2.2,-1.7 1.8,-2.3 -2.3,-0.8 0.3,-7.5 0,0 -5,-4.2 -1.4,-2.7 -3.1,1.3 -2.6,-0.4 -1.5,1.1 -2.5,-0.8 -3.5,-5.2 -1.8,0.6 -3.6,-0.1 z", + "CF": "m 1110.5,517.3 -0.5,-0.3 -2,-1.8 -0.3,-2 0.8,-2.6 0,-2.6 -3.3,-4 -0.7,-2.7 -3.5,1.1 -2.8,2.5 -4,7 -5.2,2.9 -5.4,-0.4 -1.6,0.6 0.6,2.3 -2.9,2.2 -2.3,2.5 -7.1,2.4 -1.4,-1.4 -0.9,-0.2 -1,1.7 -4.7,0.4 -2.7,6.5 -1.4,1.1 -0.4,5 0.6,2.7 -0.4,1.9 2.6,3.3 0.5,2.3 2.1,3.2 2.6,2.1 0.3,2.9 0.6,1.8 2.9,-5.9 3.3,-3.4 3.8,1.1 3.6,0.4 0.5,-4.5 2.2,-3.2 3,-2 4.6,2.1 3.6,2.4 4.1,0.6 4.2,1.2 1.6,-3.8 0.8,-0.5 2.6,0.6 6.2,-3.1 2.2,1.3 1.8,-0.2 0.9,-1.5 2,-0.6 4.3,0.7 3.6,0.1 1.8,-0.6 -0.9,-2.1 -4.2,-2.5 -1.5,-3.8 -2.4,-2.7 -3.8,-3.4 -0.1,-2 -3.1,-2.6 -3.8,-2.5 z", + "CG": "m 1080.3,549.9 -3.6,-0.4 -3.8,-1.1 -3.3,3.4 -2.9,5.9 -0.4,3.5 -4.5,-1.5 -4.5,-1.7 -7.1,-0.3 -0.4,2.8 1.5,3.3 4.2,-0.5 1.4,1.2 -2.4,7.4 2.7,3.8 0.6,4.9 -0.8,4.3 -1.7,3 -4.9,-0.3 -3,-3 -0.5,2.8 -3.8,0.8 -1.9,1.6 2.1,4.2 -4.3,3.5 4.6,6.7 2.2,-2.7 1.8,-1.1 2,2.2 1.5,0.6 1.9,-2.4 3.1,0.1 0.4,1.8 2,1.1 3.4,-4 3.3,-3.1 1.4,-2 -0.2,-5.3 2.5,-6.2 2.6,-3.2 3.7,-3.1 0.6,-2 0.2,-2.4 0.9,-2.2 -0.3,-3.6 0.7,-5.6 1.1,-4 1.6,-3.4 0.3,-3.8 z", + "CH": "m 1024.3,270.6 -5.4,-1.9 -1,1.4 -4.2,0 -1.3,1 -2.3,-0.6 0.2,1.6 -3.5,3.5 0,2.8 2.4,-0.9 1.8,2.7 2.2,1.3 2.4,-0.3 2.7,-2.1 0.9,1 2.4,-0.2 0.9,-2.5 3.8,0.8 2.1,-1.1 0.3,-2.5 -2.6,-0.2 -2.3,-1.1 0.7,-1.6 -0.2,-1.1 z", + "CI": "m 946.5,506.2 -2.3,0.9 -1.3,0.8 -0.9,-2.7 -1.6,0.7 -1,-0.1 -1,1.9 -4.3,-0.1 -1.6,-1 -0.7,0.6 -1.1,0.5 -0.5,2.2 1.3,2.6 1.3,5.1 -2,0.8 -0.6,0.9 0.4,1.2 -0.3,2.8 -0.9,0 -0.3,1.8 0.6,3.1 -1.2,2.8 1.6,1.8 1.8,0.4 2.3,2.7 0.2,2.5 -0.5,0.8 -0.5,5.2 1.1,0.2 5.6,-2.4 3.9,-1.8 6.6,-1.1 3.6,-0.1 3.9,1.3 2.6,-0.1 0.2,-2.5 -2.4,-5.5 1.5,-7.2 2.3,-5.3 -1.4,-9.1 -3.8,-1.6 -2.7,0.2 -1.9,1.6 -2.5,-1.3 -1,-2.1 -2.5,-1.4 z", + "CL": "m 648.4,905.2 -3.7,-0.7 -3.3,2.5 0.2,4.1 -1.2,2.8 -7.2,-2.2 -8.6,-4 -4.5,-1.3 9.7,6.8 6.3,3.2 7.5,3.4 5.3,0.9 4.3,1.8 3,0.5 2.3,0.1 3.2,-1.8 0.5,-2.4 -2.9,-0.2 -5,0 -5.9,-13.5 z m -47.3,-196.3 -3.7,-7.1 1.1,-6.2 -3.2,-2.7 -1.2,-4.6 -3.1,-4.3 -1.2,3.3 -2.7,1.6 2.1,9 1.5,10.4 -0.1,14.2 0,13.2 0.9,12.3 -1.9,7.8 2.1,7.8 -0.5,5.3 3.2,9.5 -0.1,9.5 -1.2,10.2 -0.6,10.5 -2.1,0.2 2.4,7.3 3.3,6.3 -1.1,4.3 1.9,11.6 1.5,8.8 3.5,0.9 -1.1,-7.7 4,1.6 1.8,12.7 -6.4,-2.1 2,10.2 -2.7,5.5 8.2,1.8 -3.4,4.8 0.2,6 5,10.6 4.2,4.1 0.2,3.6 3.3,3.8 7.5,3.5 0,0 7.4,4.2 6.2,2 2,-0.1 -1.8,-5.7 3.4,-2.2 1.7,-1.5 4.2,0 -4.8,-0.9 -12,-0.8 -3.5,-3.6 -1.8,-4.6 -3.1,0.4 -2.6,-2.2 -3.1,-6.6 2.7,-2.7 0.1,-3.9 -1.8,-3.2 0.7,-5.3 -1.1,-8.2 -1.8,-3.7 1.8,-1.1 -1.3,-2.3 -2.8,-1.3 0.8,-2.6 -3.1,-2.3 -3.6,-7.1 1.6,-1.2 -3.3,-7.6 -0.7,-6.4 -0.3,-5.7 2.5,-2.4 -3.3,-6.3 -1.5,-5.9 2.9,-4.3 -1.4,-5.4 1.6,-6.2 -1.3,-5.9 -1.6,-1.2 -4.9,-10.9 2.1,-6.5 -1.7,-6.2 0.9,-5.8 2.6,-5.9 3.2,-4 -2,-2.5 0.9,-2 -1.6,-10.6 5.6,-3.2 1.1,-6.6 -0.9,-1.6 -3.8,0.9 -3.1,-8.8 z", + "CM": "m 1060.1,502.9 0.2,-4.3 -0.5,-4.2 -2.2,-4.1 -1.6,0.4 -0.2,2 2.3,2.6 -0.6,1.1 -0.3,2.1 -4.6,5 -1.5,4 -0.7,3.3 -1.2,1.4 -1.1,4.5 -3,2.6 -0.8,3.2 -1.2,2.6 -0.5,2.6 -3.9,2.2 -3.2,-2.6 -2.1,0.1 -3.3,3.7 -1.6,0.1 -2.7,6.1 -1.4,4.5 0,1.8 1.4,0.9 1.1,2.8 2.6,1.1 2.2,4.2 -0.8,5 9.2,0.2 2.6,-0.4 3.4,0.8 3.4,-0.8 0.7,0.3 7.1,0.3 4.5,1.7 4.5,1.5 0.4,-3.5 -0.6,-1.8 -0.3,-2.9 -2.6,-2.1 -2.1,-3.2 -0.5,-2.3 -2.6,-3.3 0.4,-1.9 -0.6,-2.7 0.4,-5 1.4,-1.1 2.7,-6.5 0.9,-1.7 -1.8,-4.4 -0.8,-2.6 -2.5,-1.1 -3.3,-3.7 1.2,-3 2.5,0.6 1.6,-0.4 3.1,0.1 -3.1,-5.8 z", + "CN": "m 1587.2,453.3 0.6,-3.6 2,-2.8 -1.6,-2.5 -3.2,-0.1 -5.8,1.8 -2.2,2.8 1,5.5 4.9,2 4.3,-3.1 z m 13.2,-196.5 -6.1,-6.1 -4.4,-3.7 -3.8,-2.7 -7.7,-6.1 -5.9,-2.3 -8.5,-1.8 -6.2,0.2 -5.1,1.1 -1.7,3 3.7,1.5 2.5,3.3 -1.2,2 0.1,6.5 1.9,2.7 -4.4,3.9 -7.3,-2.3 0.6,4.6 0.3,6.2 2.7,2.6 2.4,-0.8 5.4,1 2.5,-2.3 5.1,2 7.2,4.3 0.7,2.2 -4.3,-0.7 -6.8,0.8 -2.4,1.8 -1.4,4.1 -6.3,2.4 -3.1,3.3 -5.9,-1.3 -3.2,-0.5 -0.4,4 2.9,2.3 1.9,2.1 -2.5,2 -1.9,3.3 -4.9,2.2 -7.5,0.2 -7.2,2.2 -4.4,3.3 -3.2,-2 -6.2,0.1 -9.3,-3.8 -5.5,-0.9 -6.4,0.8 -11.2,-1.3 -5.5,0.1 -4.7,-3.6 -4.9,-5.7 -3.4,-0.7 -7.9,-3.8 -7.2,-0.9 -6.4,-1 -3,-2.7 -1.3,-7.3 -5.8,-5 -8.1,-2.3 -5.7,-3.3 -3.3,-4.4 -1.7,0.5 -1.8,4.2 -3.8,0.6 2.5,6.2 -1.6,2.8 -10.7,-2 1,11.1 -2,1.4 -9,2.4 8.7,10.7 -2.9,1.6 1.7,3.5 -0.2,1.4 -6.8,3.4 -1,2.4 -6.4,0.8 -0.6,4 -5.7,-0.9 -3.2,1.2 -4,3 1.1,1.5 -1,1.5 3,5.9 1.6,-0.6 3.5,1.4 0.6,2.5 1.8,3.7 1.4,1.9 4.7,3 2.9,5 9.4,2.6 7.6,7.5 0.8,5.2 3,3.3 0.6,3.3 -4.1,-0.9 3.2,7 6.2,4 8.5,4.4 1.9,-1.5 4.7,2 6.4,4.1 3.2,0.9 2.5,3.1 4.5,1.2 5,2.8 6.4,1.5 6.5,0.6 3,-1.4 1.5,5.1 2.6,-4.8 2.6,-1.6 4.2,1.5 2.9,0.1 2.7,1.8 4.2,-0.8 3.9,-4.8 5.3,-4 4.9,1.5 3.2,-2.6 3.5,3.9 -1.2,2.7 6.1,0.9 3,-0.4 2.7,3.7 2.7,1.5 1.3,4.9 0.8,5.3 -4.1,5.3 0.7,7.5 5.6,-1 2.3,5.8 3.7,1.3 -0.8,5.2 4.5,2.4 2.5,1.2 3.8,-1.8 0.6,2.6 0.7,1.5 2.9,0.1 -1.9,-7.2 2.7,-1 2.7,-1.5 4.3,0 5.3,-0.7 4.1,-3.4 3,2.4 5.2,1.1 -0.2,3.7 3,2.6 5.9,1.6 2.4,-1 7.7,2 -0.9,2.5 2.2,4.6 3,-0.4 0.8,-6.7 5.6,-0.9 7.2,-3.2 2.5,-3.2 2.3,2.1 2.8,-2.9 6.1,-0.7 6.6,-5.3 6.3,-5.9 3.3,-7.6 2.3,-8.4 2.1,-6.9 2.8,-0.5 -0.1,-5.1 -0.8,-5.1 -3.8,-2 -2.5,-3.4 2.8,-1.7 -1.6,-4.7 -5.4,-4.9 -5.4,-5.8 -4.6,-6.3 -7.1,-3.5 0.9,-4.6 3.8,-3.2 1,-3.5 6.7,-1.8 -2.4,-3.4 -3.4,-0.2 -5.8,-2.5 -3.9,4.6 -4.9,-1.9 -1.5,-2.9 -4.7,-1 -4.7,-4.4 1.2,-3 5,-0.3 1.2,-4.1 3.6,-4.4 3.4,-2.2 4.4,3.3 -1.9,4.2 2.3,2.5 -1.4,3 4.8,-1.8 2.4,-2.9 6.3,-1.9 2.1,-4 3.8,-3.4 1,-4.4 3.6,2 4.6,0.2 -2.7,-3.3 6.3,-2.6 -0.1,-3.5 5.5,3.6 0,0 -1.9,-3.1 2.5,-0.1 -3.8,-7.3 -4.7,-5.3 2.9,-2.2 6.8,1.1 -0.6,-6 -2.8,-6.8 0.4,-2.3 -1.3,-5.6 -6.9,1.8 -2.6,2.5 -7.5,0 -6,-5.8 -8.9,-4.5 -9.9,-1.9 z", + "CO": "m 578.3,497.2 1.2,-2.1 -1.3,-1.7 -2,-0.4 -2.9,3.1 -2.3,1.4 -4.6,3.2 -4.3,-0.5 -0.5,1.3 -3.6,0.1 -3.3,3 -1.4,5.4 -0.1,2.1 -2.4,0.7 -4.4,4.4 -2.9,-0.2 -0.7,0.9 1.1,3.8 -1.1,1.9 -1.8,-0.5 -0.9,3.1 2.2,3.4 0.6,5.4 -1.2,1.6 1.1,5.9 -1.2,3.7 2,1.5 -2.2,3.3 -2.5,4 -2.8,0.4 -1.4,2.3 0.2,3.2 -2.1,0.5 0.8,2 5.6,3.6 1,-0.1 1.4,2.7 4.7,0.9 1.6,-1 2.8,2.1 2.4,1.5 1.5,-0.6 3.7,3 1.8,3 2.7,1.7 3.4,6.7 4.2,0.8 3,-1.7 2.1,1.1 3.3,-0.6 4.4,3 -3.5,6.5 1.7,0.1 2.9,3.4 2.2,-17.4 0.1,-2.8 -0.9,-3.6 -2.5,-2.4 0,-4.6 3.2,-1 1.1,0.6 0.2,-2.4 -3.3,-0.7 0,-3.9 10.9,0.1 1.9,-2.2 1.6,2 1,3.8 1.1,-0.8 -1.7,-6.4 -1.4,-2.2 -2,-1.4 2.9,-3.1 -0.2,-1.5 -1.5,-1.9 -1,-4.2 0.5,-4.6 1.3,-2.1 1.2,-3.4 -2,-1.1 -3.2,0.7 -4,-0.3 -2.3,0.7 -3.8,-5.5 -3.2,-0.8 -7.2,0.6 -1.3,-2.2 -1.3,-0.6 -0.2,-1.3 0.8,-2.4 -0.4,-2.5 -1.1,-1.4 -0.6,-2.9 -2.9,-0.5 1.8,-3.7 0.9,-4.5 1.8,-2.4 2.2,-1.8 1.6,-3.2 3.7,-1.1 z", + "CR": "m 509.1,502.6 -1.4,1.3 -1.7,-0.4 -0.8,-1.3 -1.7,-0.5 -1.4,0.8 -3.5,-1.7 -0.9,0.8 -1.4,1.2 1.5,0.9 -0.9,2 -0.1,2 0.7,1.3 1.7,0.6 1.2,1.8 1.2,-1.6 -0.3,-1.8 1.4,1.1 0.3,1.9 1.9,0.8 2.1,1.3 1.5,1.5 0.1,1.4 -0.7,1.1 1.1,1.3 2.9,1.4 0.4,-1.2 0.5,-1.3 -0.1,-1.2 0.8,-0.7 -1.1,-1 0.1,-2.5 2.2,-0.6 -2.4,-2.7 -2,-2.6 -1.2,-3.4 z", + "CU": "m 539,427.3 -4.9,-2.1 -4.3,-0.1 -4.7,-0.5 -1.4,0.7 -4.2,0.6 -3,1.3 -2.7,1.4 -1.5,2.3 -3.1,2 2.2,0.6 2.9,-0.7 0.9,-1.6 2.3,-0.1 4.4,-3.3 5.4,0.3 -2.3,1.6 1.8,1.3 7,1 1.5,1.3 4.9,1.7 3.2,-0.2 0.8,3.6 1.7,1.8 3.5,0.4 2.1,1.7 -4.1,3.5 7.9,-0.6 3.8,0.5 3.7,-0.3 3.8,-0.8 0.8,-1.5 -3.9,-2.6 -4,-0.3 0.6,-1.7 -3.1,-1.3 -1.9,0 -3,-2.8 -4.2,-4 -1.8,-1.5 -5.2,0.8 -1.9,-2.4 z", + "CV": "m 841.4,477.6 0.1,-0.4 -0.2,-0.6 -0.3,-0.1 -0.6,0.4 -0.1,0.3 0.1,0.3 0.3,0.3 0.3,0.1 0.4,-0.3 z m 6.3,-1.7 0.4,-0.2 0,-0.7 -0.1,-0.3 -0.4,0 -0.2,0.4 0,0.1 0,0.4 0.2,0.3 0.1,0 z m -1.4,0.8 -0.5,-0.9 -0.3,-0.1 -0.6,-0.7 0,-0.3 -0.3,-0.1 0,0.2 0,0.4 -0.2,0.5 0,0.5 0.4,0.8 0.4,0.2 0.7,0.1 0.4,-0.6 z m 3.1,-7.8 0,0.5 -0.3,0.7 0.5,0.3 0.3,0.1 0.6,-0.4 0.2,-0.5 -0.1,-0.3 -0.3,-0.3 -0.3,-0.1 -0.1,0.1 -0.5,-0.1 z m -6.4,-2.5 -1,-0.1 -0.6,-0.2 -0.1,0 0,0.3 0.4,0.8 0.2,-0.5 0.2,-0.1 0.8,0.2 0.4,-0.1 -0.1,-0.1 -0.2,-0.2 z m 6.7,-0.2 -0.1,-0.5 0,-0.7 -0.2,0 -0.3,0.2 0.1,0.7 0.1,0.1 0.2,0.5 0.2,-0.3 z m -11.1,-1 0,-0.2 -0.3,-0.5 -0.3,0.1 -0.4,0.2 -0.1,0.3 0.4,0.2 0.2,0 0.5,-0.1 z m -1.5,-0.9 0.8,-0.6 0.2,-0.3 -0.2,-0.5 -0.5,-0.1 -1.2,0.6 -0.1,0.2 0.1,0.3 0.1,0.5 0.2,0.1 0.6,-0.2 z", + "CW": "m 595.9,494.9 0,-0.6 -0.9,-0.4 0,0.3 0.1,0.2 0.3,0.1 0.1,0.2 -0.1,0.6 0.2,0.3 0.3,-0.7 z", + "CY": "m 1149.9,348.4 -0.3,-0.1 -0.5,0.2 -0.4,0.4 -0.4,0.3 -0.5,-0.3 0.2,0.9 0.6,1.1 0.2,0.3 0.3,0.2 1.1,0.3 0.3,0 0.6,0 0.2,0.1 0.2,0.4 0.4,0 0,-0.1 0,-0.3 0.2,-0.2 0.3,-0.2 0.3,0 0.6,-0.1 0.6,-0.2 0.5,-0.4 0.9,-1 0.3,0 0.3,0 0.6,0 0.6,-0.1 -0.2,-0.4 -0.1,-0.1 -0.4,-0.5 -0.2,-0.4 0.1,-0.6 2.5,-1.9 0.5,-0.5 -0.8,0.2 -0.6,0.4 -0.4,0.2 -0.7,0.4 -2.3,0.8 -0.8,0.1 -0.8,0 -1,-0.1 -0.9,-0.2 0,0.7 -0.2,0.6 -0.6,0.2 -0.3,-0.1 z", + "CZ": "m 1049.4,248.5 -2.1,0.6 -1.4,-0.7 -1.1,1.2 -3.4,1.2 -1.7,1.5 -3.4,1.3 1,1.9 0.7,2.6 2.6,1.5 2.9,2.6 3.8,2 2.6,-2.5 1.7,-0.5 4,1.9 2.3,-0.3 2.3,1.2 0.6,-1.4 2.2,0.1 1.6,-0.6 0.1,-0.6 0.9,-0.3 0.2,-1.4 1.1,-0.3 0.6,-1.1 1.5,0 -2.6,-3.1 -3.6,-0.3 -0.7,-2 -3.4,-0.6 -0.6,1.5 -2.7,-1.2 0.1,-1.7 -3.7,-0.6 -2.4,-1.9 z", + "DE": "m 1043.6,232.3 -2.4,-1.9 -5.5,-2.4 -2.5,1.7 -4.7,1.1 -0.1,-2.1 -4.9,-1.4 -0.2,-2.3 -3,0.9 -3.6,-0.8 0.4,3.4 1.2,2.2 -3,3 -1,-1.3 -3.9,0.3 -0.9,1.3 1,2 -1,5.6 -1.1,2.3 -2.9,0 1.1,6.4 -0.4,4.2 1,1.4 -0.2,2.7 2.4,1.6 7.1,1.2 -2.3,4.2 -0.5,4.5 4.2,0 1,-1.4 5.4,1.9 1.5,-0.3 2.6,1.7 0.6,-1.6 4.4,0.3 3.4,-1.2 2.4,0.2 1.7,1.3 0.4,-1.1 -1,-4 1.7,-0.8 1.5,-2.9 -2.9,-2.6 -2.6,-1.5 -0.7,-2.6 -1,-1.9 3.4,-1.3 1.7,-1.5 3.4,-1.2 1.1,-1.2 1.4,0.7 2.1,-0.6 -2.3,-3.9 0.1,-2.1 -1.4,-3.3 -2,-2.2 1.2,-1.6 -1.4,-3.1 z", + "DJ": "m 1217.8,499.2 -2.5,-1.7 3.1,-1.5 0.1,-2.7 -1.4,-1.9 -1.6,1.5 -2.4,-0.5 -1.9,2.8 -1.8,3 0.5,1.7 0.2,2 3.1,0.1 1.3,-0.5 1.3,1.1 2,-3.4 z", + "DK": "m 1035.9,221.2 -1.7,-3 -6.7,2 0.9,2.5 5.1,3.4 2.4,-4.9 z m -8.6,-5.1 -2.6,-0.9 -0.7,-1.6 1.3,-2 -0.1,-3 -3.6,1.6 -1.5,1.7 -4,0.4 -1.2,1.7 -0.7,1.6 0.4,6.1 2.1,3.4 3.6,0.8 3,-0.9 -1.5,-3 3.1,-4.3 1.4,0.7 1,-2.3 z", + "DM": "m 635.8,475.1 0.3,-0.7 -0.1,-1 -0.2,-0.4 -0.8,-0.3 0,0.2 -0.1,0.5 0.3,0.8 0.1,1.1 0.5,-0.2 z", + "DO": "m 579.6,457.4 0,1.8 1.4,1 2.6,-4.4 2,-0.9 0.6,1.6 2.2,-0.4 1.1,-1.2 1.8,0.3 2.6,-0.2 2.5,1.3 2.3,-2.6 -2.5,-2.3 -2.4,-0.2 0.3,-1.9 -3,0.1 -0.8,-2.2 -1.4,0.1 -3.1,-1.6 -4.4,-0.1 -0.8,1.1 0.2,3.5 -0.7,2.4 -1.5,1.1 1.2,1.9 -0.2,1.8 z", + "DZ": "m 1021,336.9 -3.6,0.4 -2.2,-1.5 -5.6,0 -4.9,2.6 -2.7,-1 -8.7,0.5 -8.9,1.2 -5,2 -3.4,2.6 -5.7,1.2 -5.1,3.5 2,4.1 0.3,3.9 1.8,6.7 1.4,1.4 -1,2.5 -7,1 -2.5,2.4 -3.1,0.5 -0.3,4.7 -6.3,2.5 -2.1,3.2 -4.4,1.7 -5.4,1 -8.9,4.7 -0.1,7.5 0,0.4 -0.1,1.2 20.3,15.5 18.4,13.9 18.6,13.8 1.3,3 3.4,1.8 2.6,1.1 0.1,4 6.1,-0.6 7.8,-2.8 15.8,-12.5 18.6,-12.2 -2.5,-4 -4.3,-2.9 -2.6,1.2 -2,-3.6 -0.2,-2.7 -3.4,-4.7 2.1,-2.6 -0.5,-4 0.6,-3.5 -0.5,-2.9 0.9,-5.2 -0.4,-3 -1.9,-5.6 -2.6,-11.3 -3.4,-2.6 0,-1.5 -4.5,-3.8 -0.6,-4.8 3.2,-3.6 1.1,-5.3 -1,-6.2 1,-3.3 z", + "EC": "m 553.1,573.1 -2.4,-1.5 -2.8,-2.1 -1.6,1 -4.7,-0.9 -1.4,-2.7 -1,0.1 -5.6,-3.6 -3.9,2.5 -3.1,1.4 0.4,2.6 -2.2,4.1 -1,3.9 -1.9,1 1,5.8 -1.1,1.8 3.4,2.7 2.1,-2.9 1.3,2.8 -2.9,4.7 0.7,2.7 -1.5,1.5 0.2,2.3 2.3,-0.5 2.3,0.7 2.5,3.2 3.1,-2.6 0.9,-4.3 3.3,-5.5 6.7,-2.5 6,-6.7 1.7,-4.1 -0.8,-4.9 z", + "EE": "m 1093.2,197.5 -5.5,0.9 -5.4,1.6 0.9,3.4 3.3,2.1 1.5,-0.8 0.1,3.5 3.7,-1 2.1,0.7 4.4,2.2 3.8,0 1.6,-1.9 -2.5,-5.5 2.6,-3.4 -0.9,-1 0,0 -4.6,0.2 -5.1,-1 z", + "EG": "m 1129.7,374.8 -5.5,-1.9 -5.3,-1.7 -7.1,0.2 -1.8,3 1.1,2.7 -1.2,3.9 2,5.1 1.3,22.7 1,23.4 22.1,0 21.4,0 21.8,0 -1,-1.3 -6.8,-5.7 -0.4,-4.2 1,-1.1 -5.3,-7 -2,-3.6 -2.3,-3.5 -4.8,-9.9 -3.9,-6.4 -2.8,-6.7 0.5,-0.6 4.6,9.1 2.7,2.9 2,2 1.2,-1.1 1.2,-3.3 0.7,-4.8 1.3,-2.5 -0.7,-1.7 -3.9,-9.2 0,0 -2.5,1.6 -4.2,-0.4 -4.4,-1.5 -1.1,2.1 -1.7,-3.2 -3.9,-0.8 -4.7,0.6 -2.1,1.8 -3.9,2 -2.6,-1 z", + "EH": "m 929.6,396.2 -0.8,0 0,0 0.1,3.4 -3.4,0.2 -1.8,1.5 -2.5,0 -1.9,-0.9 -4.6,0.7 -1.9,5 -1.7,0.4 -2.8,8.1 -7.8,6.8 -2,8.8 -2.3,2.9 -0.7,2.3 -12.4,0.5 -0.1,0 -0.3,2.7 1.2,-2.2 21.6,0.1 -0.9,-9.2 1.4,-3.3 5.2,-0.5 0.2,-16.3 17.9,0.3 0.2,-9.7 0.1,-1.2 0,-0.4 z", + "ER": "m 1198.1,474 -3.2,-3.1 -1.8,-5.9 -3.7,-7.3 -2.6,3.6 -4,1 -1.6,2 -0.4,4.2 -1.9,9.4 0.7,2.5 6.5,1.3 1.5,-4.7 3.5,2.9 3.2,-1.5 1.4,1.3 3.9,0.1 4.9,2.5 1.6,2.2 2.5,2.1 2.5,3.7 2,2.1 2.4,0.5 1.6,-1.5 -2.8,-1.9 -1.9,-2.2 -3.2,-3.7 -3.2,-3.6 -7.9,-6 z", + "ES": "m 985,325.7 0,-0.2 -0.5,0 -0.3,-0.4 -0.1,0.2 -0.1,0.2 0,0.2 0.5,0 0.4,0.1 0.1,-0.1 z m -0.8,-1.6 0.3,0 0.6,-0.7 0,-0.3 -0.3,-0.2 -1.1,0.2 -0.2,0.3 0,0.3 -0.3,0.1 -0.1,0.4 0.1,0.2 0.8,0.1 0.2,-0.4 z M 967,296 l -8.2,-0.2 -4.2,0.3 -5.4,-1 -6.8,0 -6.2,-1.1 -7.4,4.5 2,2.6 -0.4,4.4 1.9,-1.6 2.1,-0.9 1.2,3.1 3,0 0.9,-0.8 3,0.2 1.3,3.1 -2.4,1.7 -0.2,4.9 -0.9,0.9 -0.3,3 -2.2,0.5 2,3.8 -1.6,4.3 1.8,1.9 -0.8,1.7 -2,2.5 0.4,2.1 4.8,1 1.4,3.7 2,2.2 2.5,0.6 2.1,-2.5 3.3,-2.3 5,0.1 6.7,0 3.8,-5 3.9,-1.3 1.2,-4.2 3,-2.9 -2,-3.7 2,-5.1 3.1,-3.5 0.5,-2.1 6.6,-1.3 4.8,-4.2 -0.3,-3.5 -6,0.8 -5.7,-2.8 -1.9,1.3 -9.4,-2.8 -2,-2.4 z m 26,22.6 0.1,-0.3 0.1,-0.2 0.1,-0.1 -0.2,-0.2 0,-0.1 0.2,-0.2 -0.2,-0.1 -1.3,0.4 -0.7,0.4 -2.1,1.5 0,0.3 0.1,0.2 0.4,0 0.2,0.4 0.4,-0.4 0.3,-0.1 0.3,0.1 0.3,0.2 0.1,0.6 0.1,0.2 0.6,0.1 0.9,0.4 0.4,-0.2 0.5,-0.3 0.2,-0.6 0.3,-0.5 0.3,-0.5 0.3,-0.4 -0.1,-0.4 -0.3,-0.1 -0.3,-0.1 -0.5,0.2 -0.5,-0.2 z m 6,-0.3 0.1,-0.4 0,-0.1 -0.5,-0.7 -0.9,-0.3 -1,0.1 -0.1,0.1 0,0.4 0.1,0.1 0.6,0.1 1.6,0.7 0.1,0 z", + "ET": "m 1187.6,477 -1.5,4.7 -6.5,-1.3 -0.7,5.5 -2.1,6.2 -3.2,3.2 -2.3,4.8 -0.5,2.6 -2.6,1.8 -1.4,6.7 0,0.7 0.2,5 -0.8,2 -3,0.1 -1.8,3.6 3.4,0.5 2.9,3.1 1,2.5 2.6,1.5 3.5,6.9 2.9,1.1 0,3.6 2,2.1 3.9,0 7.2,5.4 1.8,0 1.3,-0.1 1.2,0.7 3.8,0.5 1.6,-2.7 5.1,-2.6 2.3,2.1 3.8,0 1.5,-2 3.6,-0.1 4.9,-4.5 7.4,-0.3 15.4,-19.1 -4.8,0.1 -18.5,-7.6 -2.2,-2.2 -2.1,-3.1 -2.2,-3.5 1.1,-2.3 -1.3,-1.1 -1.3,0.5 -3.1,-0.1 -0.2,-2 -0.5,-1.7 1.8,-3 1.9,-2.8 -2,-2.1 -2.5,-3.7 -2.5,-2.1 -1.6,-2.2 -4.9,-2.5 -3.9,-0.1 -1.4,-1.3 -3.2,1.5 -3.5,-2.9 z", + "FI": "m 1093.4,144.4 0.8,-3.8 -5.7,-2.1 -5.8,1.8 -1.1,3.9 -3.4,2.4 -4.7,-1.3 -5.3,0.3 -5.1,-2.9 -2.1,1.4 5.9,2.7 7.2,3.7 1.7,8.4 1.9,2.2 6.4,2.6 0.9,2.3 -2.6,1.2 -8.7,6.1 -3.3,3.6 -1.5,3.3 2.9,5.2 -0.1,5.7 4.7,1.9 3.1,3.1 7.1,-1.2 7.5,-2.1 8,-0.5 0,0 7.9,-7.4 3.3,-3.3 0.9,-2.9 -7.3,-3.9 0.9,-3.7 -4.9,-4.1 1.7,-4.8 -6.4,-6.3 2.8,-4.1 -7.2,-3.7 -0.4,-3.7 z", + "FJ": "m 1976.7,674.4 -3.7,2 -1.9,0.3 -3.1,1.3 0.2,2.4 3.9,-1.3 3.9,-1.6 0.7,-3.1 z m -11,8.1 -1.6,1 -2.3,-0.8 -2.7,2.2 -0.2,2.8 2.9,0.8 3.6,-0.9 1.8,-3.3 -1.5,-1.8 z", + "FK": "m 690.3,902.7 -0.1,-0.3 -0.4,-0.2 -0.2,-0.1 0.1,0.2 0.1,0.3 0.1,0.2 0.2,0.1 0.2,-0.2 z m 5.5,-1.3 -0.1,-0.1 -0.2,0 -0.1,0.2 0.2,0.3 0.4,0.1 -0.2,-0.5 z m -12.9,-1.4 -0.1,0.2 -0.4,0.1 0.2,0.3 0.6,0.4 0.4,0 0.1,-0.3 -0.1,-0.6 -0.3,0 -0.4,-0.1 z m 2.8,-2 -0.9,-0.3 -0.4,-0.3 -0.3,0 0.4,0.4 0.1,0.2 0.1,0.2 0.6,0.3 0.6,0.3 0.4,0.3 -0.1,0.1 -0.8,0.3 -0.3,0 -0.2,0.1 0.4,0.2 0.6,-0.1 0.2,-0.1 0.2,0 0.3,0.1 0,0.2 -0.1,0.2 -0.2,0.2 -0.4,0.3 -0.6,0.4 -0.8,0 -0.7,0.7 0.9,0.5 0.7,0.3 0.9,0 0,-0.1 0.2,-0.1 0.3,0 0.1,-0.1 0.2,-0.4 0,-0.6 0.2,0 0.3,0.1 0.7,-0.1 0.3,-0.1 0.6,-0.9 0.4,-0.8 0.2,-0.4 0.3,-0.2 0.1,-0.2 0.1,-0.3 0.3,-0.2 0,-0.3 -0.4,-0.2 -0.3,-0.2 -0.3,0.3 -0.2,-0.1 -0.9,0.3 -0.4,0 -0.3,-0.2 -0.4,-0.1 -0.4,0.1 -0.5,0.5 -0.8,-0.2 z m 0.7,-0.4 0.1,-0.3 -0.1,-0.2 -0.5,-0.2 -0.5,0 0.2,0.5 0.2,0.2 0.6,0 z m 5.9,-0.7 -0.4,0 0.4,0.5 -0.8,0.8 0.2,0.6 0.3,0.4 0.1,0.2 -0.1,0.1 -0.4,0.1 -0.3,0.1 -0.2,0.3 -0.9,0.9 0.2,0.2 -0.3,0.7 0.2,0.3 0.8,0.7 0.8,0.4 0,-0.7 0.4,-0.1 0.4,0.2 0.4,-0.2 -0.9,-1 0.3,0 2.5,0.5 -0.1,-0.4 -0.1,-0.2 -0.3,-0.4 1.5,-0.4 0.5,-0.3 0.2,-0.3 0.6,-0.1 0.8,-0.3 -0.1,-0.1 0.1,-0.3 -0.4,-0.2 -0.5,-0.1 0.1,-0.3 0.5,-0.1 -0.8,-0.7 -0.3,-0.1 -1,0.1 -0.3,0.1 0,0.2 0.1,0.3 0.3,0.3 0.1,0.2 -0.2,-0.1 -1.1,-0.4 -0.2,-0.1 -0.2,-0.4 0.2,-0.1 0.3,0.1 0.1,-0.3 -0.4,-0.3 -0.4,-0.1 -0.9,0.1 -0.8,-0.3 z", + "FO": "m 947,186.9 0,-0.3 -0.1,-0.3 0,-0.2 -0.1,0 -0.5,-0.1 -0.1,-0.2 -0.1,0 0,0.2 0.1,0.4 0.5,0.4 0.3,0.2 0.1,0 -0.1,-0.1 z m 0.5,-2.1 0,-0.1 -0.2,-0.2 -0.5,-0.2 -0.2,-0.1 -0.2,0.1 0,0.2 0.1,0.1 0.4,0.1 0.4,0.3 0.1,0 0.1,-0.2 z m -2.4,-1.9 -0.2,-0.1 -0.5,0.1 -0.3,0 0.1,0.3 0.6,0.2 0.3,0 0.3,0 0.2,-0.1 -0.1,-0.2 -0.4,-0.2 z m 2.5,-0.5 -0.8,-0.2 -0.6,-0.3 -1,0.1 0.7,1.1 0.8,0.7 0.4,0.2 0,-0.1 0,-0.2 -0.4,-0.5 -0.1,-0.1 0,-0.1 0.1,-0.1 0.2,0 0.3,0.2 0.2,0 0.2,-0.7 z m 1,-0.2 -0.3,-0.2 -0.4,-0.4 0,0.5 0,0.3 0,0.1 0.1,0 0.3,0.1 0.3,-0.4 z", + "FR": "m 1025.7,303.8 -1.1,-5.2 -3.2,2.3 -1,2.3 1.4,4.2 2.4,1.2 1.5,-4.8 z m -31.5,-50.9 -2.4,-2.4 -2.2,-0.1 -0.7,-2.2 -4.3,1.2 -1.4,5.1 -11.3,4.8 -4.6,-2.6 1.4,7 -8.2,-1.6 -6.4,1.3 0.4,4.6 7.5,2.4 3.6,3.1 5.1,6.5 -1,12.3 -2.7,3.7 2,2.4 9.4,2.8 1.9,-1.3 5.7,2.8 6,-0.8 0.5,-3.7 7.4,-2 10,1.6 4.5,-3.4 0.5,-2.7 -2.7,-0.8 -1.5,-4.8 1.7,-1.8 -1.6,-2.4 0.2,-1.7 -1.8,-2.7 -2.4,0.9 0,-2.8 3.5,-3.5 -0.2,-1.6 2.3,0.6 1.3,-1 0.5,-4.5 2.3,-4.2 -7.1,-1.2 -2.4,-1.6 -1.4,0.1 -1.1,-0.5 -4.4,-2.8 -2.5,0.4 -3.4,-2.9 z", + "GA": "m 1050.2,557.7 -0.7,-0.3 -3.4,0.8 -3.4,-0.8 -2.6,0.4 0,7.6 -8.2,0 -1.9,0.3 -1.1,4.8 -1.3,4.6 -1.3,2 -0.2,2.1 3.4,6.6 3.7,5.3 5.8,6.4 4.3,-3.5 -2.1,-4.2 1.9,-1.6 3.8,-0.8 0.5,-2.8 3,3 4.9,0.3 1.7,-3 0.8,-4.3 -0.6,-4.9 -2.7,-3.8 2.4,-7.4 -1.4,-1.2 -4.2,0.5 -1.5,-3.3 0.4,-2.8 z", + "GB": "m 950,227.5 -4.9,-3.7 -3.9,0.3 0.8,3.2 -1.1,3.2 2.9,-0.1 3.5,1.3 2.7,-4.2 z m 13,-24.3 -5.5,0.5 -3.6,-0.4 -3.7,4.8 -1.9,6.1 2.2,3 0.1,5.8 2.6,-2.8 1.4,1.6 -1.7,2.7 1,1.6 5.7,1.1 0.1,0 3.1,3.8 -0.8,3.5 0,0 -7.1,-0.6 -1,4 2.6,3.3 -5.1,1.9 1.3,2.4 7.5,1 0,0 -4.3,1.3 -7.3,6.5 2.5,1.2 3.5,-2.3 4.5,0.7 3.3,-2.9 2.2,1.2 8.3,-1.7 6.5,0.1 4.3,-3.3 -1.9,-3.1 2.4,-1.8 0.5,-3.9 -5.8,-1.2 -1.3,-2.3 -2.9,-6.9 -3.2,-1 -4.1,-7.1 -0.4,-0.6 -4.8,-0.4 4.2,-5.3 1.3,-4.9 -5,0 -4.7,0.8 5,-6.4 z", + "GD": "m 632.1,495.7 0.5,-0.2 0.2,-1.1 -0.3,-0.1 -0.3,0.3 -0.3,0.5 0,0.4 -0.2,0.3 0.4,-0.1 z", + "GE": "m 1200,300.2 -7.5,-2.9 -7.7,-1 -4.5,-1.1 -0.5,0.7 2.2,1.9 3,0.7 3.4,2.3 2.1,4.2 -0.3,2.7 5.4,-0.3 5.6,3 6.9,-1 1.1,-1 4.2,1.8 2.8,0.4 0.6,-0.7 -3.2,-3.4 1.1,-0.9 -3.5,-1.4 -2.1,-2.5 -5.1,-1.3 -2.9,1 -1.1,-1.2 z", + "GF": "m 681.4,556.2 1.8,-4.7 3.5,-5.8 -0.9,-2.6 -5.8,-5.4 -4.1,-1.5 -1.9,-0.7 -3.1,5.5 0.4,4.4 2.1,3.7 -1,2.7 -0.6,2.9 -1.4,2.8 2.4,1.3 1.8,-1.8 1.2,0.3 0.8,1.8 2.7,-0.5 2.1,-2.4 z", + "GH": "m 976.8,502.1 -2.6,-0.5 -1.8,1 -2.4,-0.5 -9.7,0.3 -0.2,3.6 0.8,4.8 1.4,9.1 -2.3,5.3 -1.5,7.2 2.4,5.5 -0.2,2.5 5,1.8 5,-1.9 3.2,-2.1 8.7,-3.8 -1.2,-2.2 -1.5,-4 -0.4,-3.2 1.2,-5.7 -1.4,-2.3 -0.6,-5.1 0.1,-4.6 -2.4,-3.3 0.4,-1.9 z", + "GL": "m 887.4,76.3 -26,-0.4 -11.8,0.3 -5,1.3 -11.5,-0.1 -12.7,2.1 -1.6,1.7 6.7,2.1 -6.2,-1.3 -4.5,-0.3 -7,-1.4 -10.6,2.1 -2.7,-1.2 -10.4,0 -10.9,0.6 -8.9,1 -0.2,1.8 -5.3,0.5 -14.6,2.9 -4.6,1.7 8.1,1.5 -2.8,1.6 -14.9,2.2 -15.5,2.2 -2.2,1.7 6.4,2 14.5,1.2 -7.5,0.2 -10.9,1.5 3.8,3.1 3,1.5 9.4,-0.3 10.1,-0.2 7.6,0.3 8,2.9 -1.4,2.1 3.6,1.9 1.4,5.3 1,3.6 1.4,1.9 -7,4.8 2.6,1.3 4.4,-0.8 2.6,1.8 5.3,3.4 -7.5,-1.4 -3.8,0 -3,2.8 -1.5,3.6 4.2,1.8 4,-0.8 2.6,-0.8 5.5,-1.9 -2.8,4.2 -2.6,2.3 -7.1,2 -7,6.3 2,2 -3.4,4 3.7,5.2 -1.5,5 0.7,3.7 4.8,7.1 0.8,5.6 3.1,3.2 8.9,0 5,4.7 6.5,-0.3 4.1,-5.7 3.5,-4.8 -0.3,-4.4 8.6,-4.6 3.3,-3.7 1.4,-3.9 4.7,-3.5 6.5,-1.3 6.1,-1.4 3,-0.2 10.2,-3.9 7.4,-5.7 4.8,-2.1 4.6,-0.1 12.5,-1.8 12.1,-4.3 11.9,-4.6 -5.5,-0.3 -10.6,-0.2 5.3,-2.8 -0.5,-3.6 4.2,3 2.7,2.1 7.3,-1 -0.6,-4.3 -4.5,-3.1 -5,-1.3 2.4,-1.4 7.2,2.1 0.5,-2.3 -4.1,-3.4 5.4,0 5.6,-0.8 1.7,-1.8 -4,-2.1 8.6,-0.3 -4,-4.3 4.1,-0.5 0.1,-4.2 -6.2,-2.5 6.4,-1.6 5.8,-0.1 -3.6,-3.2 1.1,-5.1 3.6,-2.9 4.9,-3.2 -8,-0.2 11.3,-0.7 2.2,-1 14.6,-2.9 -1.6,-1.7 -10,-0.8 -16.9,1.5 -9.2,1.5 4.5,-2.3 -2.3,-1.4 -7,1.2 -9.7,-1.4 -12.1,0.5 -1.4,-0.7 18.3,-0.4 12.9,-0.2 6.6,-1.4 -19.7,-2.9 z", + "GM": "m 882.8,488.5 5,0.1 1.4,-0.9 1,0 2.1,-1.5 2.4,1.4 2.4,0.1 2.4,-1.5 -1.1,-1.8 -1.8,1.1 -1.8,-0.1 -2.1,-1.5 -1.8,0.1 -1.3,1.5 -6.1,0.2 -0.7,2.8 z", + "GN": "m 912.4,493 -0.8,0.4 -3,-0.5 -0.4,0.7 -1.3,0.1 -4,-1.5 -2.7,-0.1 -0.1,2.1 -0.6,0.7 0.4,2.1 -0.8,0.9 -1.3,0 -1.4,1 -1.7,-0.1 -2.6,3.1 1.6,1.1 0.8,1.4 0.7,2.8 1.3,1.2 1.5,0.9 2.1,2.5 2.4,3.7 3,-2.8 0.7,-1.7 1,-1.4 1.5,-0.2 1.3,-1.2 4.5,0 1.5,2.3 1.2,2.7 -0.2,1.8 0.9,1.7 0,2.3 1.5,-0.3 1.2,-0.2 1.5,-0.7 2.3,3.9 -0.4,2.6 1.1,1.3 1.6,0.1 1.1,-2.6 1.6,0.2 0.9,0 0.3,-2.8 -0.4,-1.2 0.6,-0.9 2,-0.8 -1.3,-5.1 -1.3,-2.6 0.5,-2.2 1.1,-0.5 -1.7,-1.8 0.3,-1.9 -0.7,-0.7 -1.2,0.6 0.2,-2.1 1.2,-1.6 -2.3,-2.7 -0.6,-1.7 -1.3,-1.4 -1.1,-0.2 -1.3,0.9 -1.8,0.8 -1.6,1.4 -2.4,-0.5 -1.5,-1.6 -0.9,-0.2 -1.5,0.8 -0.9,0 -0.3,-2.3 z", + "GP": "m 636.4,471.1 0.2,-0.2 0,-0.3 -0.2,-0.3 -0.2,0.1 -0.2,0.3 0,0.3 0.1,0.1 0.3,0 z m -1.9,-0.8 0.2,-0.2 0,-1.2 0.1,-0.3 -0.2,-0.1 -0.2,-0.2 -0.6,-0.2 -0.1,0.1 -0.2,0.3 0.1,1.5 0.2,0.5 0.2,0.1 0.5,-0.3 z m 1.6,-1.4 0.8,-0.2 -0.9,-0.6 -0.2,-0.4 0,-0.3 -0.4,-0.3 -0.2,0.2 -0.1,0.3 0.1,0.5 -0.3,0.4 0.1,0.4 0.4,0.1 0.7,-0.1 z", + "GQ": "m 1040.1,557.8 -9.2,-0.2 -1.9,7.2 1,0.9 1.9,-0.3 8.2,0 0,-7.6 z", + "GR": "m 1101.9,344.9 -0.8,2.8 6.6,1.2 0,1.1 7.6,-0.6 0.5,-1.9 -2.8,0.8 0,-1.1 -3.9,-0.5 -4.1,0.4 -3.1,-2.2 z m 11.5,-37.4 -2.7,-1.6 0.3,3 -4.6,0.6 -3.9,-2.1 -3.9,1.7 -3.8,-0.2 -1,0.2 -0.7,1.1 -2.8,-0.1 -1.9,1.3 -3.3,0.6 0,1.6 -1.6,0.9 -0.1,2.1 -2.1,3 0.5,1.9 2.9,3.6 2.3,3 1.3,4.3 2.3,5.1 4.6,2.9 3.4,-0.1 -2.4,-5.7 3.3,-0.7 -1.9,-3.3 5,1.7 -0.4,-3.7 -2.7,-1.8 -3.2,-3 1.8,-1.4 -2.8,-3 -1.6,-3.8 0.9,-1.3 3,3.2 2.9,0 2.5,-1 -3.9,-3.6 6.1,-1.6 2.7,0.6 3.2,0.2 1.1,-0.7 1.2,-3.9 z", + "GT": "m 482.8,458.9 -5.1,-0.1 -5.2,0 -0.4,3.6 -2.6,0 1.8,2.1 1.9,1.5 0.5,1.4 0.8,0.4 -0.4,2.1 -7.1,0 -3.3,5.2 0.7,1.2 -0.8,1.5 -0.4,1.9 2.7,2.6 2.5,1.3 3.4,0.1 2.8,1.1 0.2,-1 2.1,-1.6 1.1,-0.7 -0.2,-0.7 1.4,-0.4 1.3,-1.6 -0.3,-1.3 0.5,-1.2 2.8,-1.8 2.8,-2.4 -1.5,-0.8 -0.6,0.9 -1.7,-1.1 -1.6,0 1.2,-7.2 0.7,-5 z", + "GW": "m 900.2,492.1 -10.3,-0.3 -1.5,0.7 -1.8,-0.2 -3,1.1 0.3,1.3 1.7,1.4 0,0.9 1.2,1.8 2.4,0.5 2.9,2.6 2.6,-3.1 1.7,0.1 1.4,-1 1.3,0 0.8,-0.9 -0.4,-2.1 0.6,-0.7 0.1,-2.1 z", + "GY": "m 656.1,534.2 -2.1,-2.3 -2.9,-3.1 -2.1,-0.1 -0.1,-3.3 -3.3,-4.1 -3.6,-2.4 -4.6,3.8 -0.6,2.3 1.9,2.3 -1.5,1.2 -3.4,1.1 0,2.9 -1.6,1.8 3.7,4.8 2.9,-0.3 1.3,1.5 -0.8,2.8 1.9,0.9 1.2,3 -1.6,2.2 -1,5.4 1.4,3.3 0.3,2.9 3.5,3 2.7,0.3 0.7,-1.3 1.7,-0.2 2.6,-1.1 1.8,-1.7 3.1,0.5 1.4,-0.2 -3.3,-5.6 -0.7,-3.5 -1.8,-0.1 -2.4,-4.6 1.1,-3.3 -0.3,-1.5 3.5,-1.6 1,-5.7 z", + "HK": "m 1604.9,430.9 0,-0.2 0,-0.2 -0.4,-0.2 -0.3,0 0.1,0.2 0.4,0.5 0.2,-0.1 z m -1.3,0 -0.1,-0.5 0.2,-0.3 -0.9,0.3 -0.1,0.3 0,0.1 0.2,0.1 0.7,0 z m 1.6,-1.2 -0.1,-0.3 -0.2,-0.1 -0.1,-0.3 -0.1,-0.2 0,0 -0.3,-0.1 -0.2,-0.1 -0.4,0 -0.1,0.1 -0.2,0 -0.2,0.2 0,0 0,0.2 -0.5,0.4 0,0.2 0.3,0.2 0.5,-0.1 0.6,0.2 0.8,0.3 0,-0.2 0,-0.3 0.2,-0.1 z", + "HN": "m 514.1,476.8 -1.3,-1.8 -1.9,-1 -1.5,-1.4 -1.6,-1.2 -0.8,-0.1 -2.5,-0.9 -1.1,0.5 -1.5,0.2 -1.3,-0.4 -1.7,-0.4 -0.8,0.7 -1.8,0.7 -2.6,0.2 -2.5,-0.6 -0.9,0.4 -0.5,-0.6 -1.6,0.1 -1.3,1.1 -0.6,-0.2 -2.8,2.4 -2.8,1.8 -0.5,1.2 0.3,1.3 -1.3,1.6 1.5,0.5 1.1,1.3 1.6,1 0.1,0.9 2.5,-0.8 1.1,0.5 0.7,0.7 -0.6,2.5 1.7,0.6 0.7,2 1.8,-0.3 0.8,-1.5 0.8,0 0.2,-3.1 1.3,-0.2 1.2,0 1.4,-1.7 1.5,1.3 0.6,-0.8 1.1,-0.7 2.1,-1.8 0.3,-1.3 0.5,0.1 0.8,-1.5 0.6,-0.2 0.9,0.9 1.1,0.3 1.3,-0.8 1.4,0 2,-0.8 0.9,-0.9 1.9,0.2 z", + "HR": "m 1065,280.4 -4,-2.6 -1.6,-0.8 -3.9,1.7 -0.3,2.5 -1.7,0.6 0.2,1.7 -2,-0.1 -1.8,-1 -0.8,1 -3.5,-0.2 -0.2,0.1 0,2.2 1.7,2 1.3,-2.6 3.3,1 0.3,2 2.5,2.6 -1,0.5 4.6,4.5 4.8,1.8 3.1,2.2 5,2.3 0,0 0.5,-1 -4.7,-2.4 -2.2,-2.5 -2,-1.4 -2.5,-2.3 -1.3,-1.9 -2.7,-2.9 0.9,-2.5 1.9,1.4 1,-1.3 2.3,-0.1 4.4,1 3.5,-0.1 2.4,1.4 0,0 1.7,-2.3 -1.7,-1.8 -1.5,-2.4 0,0 -1.8,0.9 -4.2,-1.2 z", + "HT": "m 580.6,446.7 -4.6,-1 -3.4,-0.2 -1.4,1.7 3.4,1 -0.3,2.4 2.2,2.8 -2.1,1.4 -4.2,-0.5 -5,-0.9 -0.7,2.1 2.8,1.9 2.7,-1.1 3.3,0.4 2.7,-0.4 3.6,1.1 0.2,-1.8 -1.2,-1.9 1.5,-1.1 0.7,-2.4 -0.2,-3.5 z", + "HU": "m 1079.1,263.8 -1.6,0.4 -1,1.5 -2.2,0.7 -0.6,-0.4 -2.3,1 -1.9,0.2 -0.3,1.2 -4.1,0.8 -1.9,-0.7 -2.6,-1.6 -0.2,2.6 -2.8,0 1.1,1.3 -1.3,4 0.8,0.1 1.2,2.1 1.6,0.8 4,2.6 4.2,1.2 1.8,-0.9 0,0 3.7,-1.6 3.2,0.2 3.8,-1.1 2.6,-4.3 1.9,-4.2 2.9,-1.3 -0.6,-1.6 -2.9,-1.7 -1,0.6 -5.5,-1.9 z", + "IC": "m 879.6,395.2 -0.2,-0.2 -0.7,0.5 -0.6,0 0.1,0.2 0.1,0.2 0.7,0.4 0.6,-1.1 z m 13.5,-2.1 0,-0.1 -0.1,0 -0.1,0.1 -1.3,-0.1 -0.2,0.6 -0.5,0.4 0,0.7 0.5,0.7 0.3,0.1 0.5,0.1 0.7,-0.4 0.2,-0.4 0.1,-0.8 -0.1,-0.4 0,-0.5 z m -9.7,0.8 0.5,-0.4 0,-0.2 -0.1,-0.3 -0.5,-0.3 -0.2,0 -0.2,0.2 -0.2,0.4 0.3,0.5 0.2,0.1 0.2,0 z m 4.7,-2.3 1.2,-1 0,-0.3 -1,0.1 -1.1,1 -0.3,0.1 -1,0.1 -0.5,0 -0.4,0.2 0.2,0.3 0.4,1 0.7,0.9 0.6,-0.2 0.3,-0.2 0.4,-0.6 0.5,-1.4 z m 11.6,1.3 1.5,-0.5 0.3,-1 0.3,-1.1 0,-0.7 -0.2,-0.3 -0.1,0 -0.4,0 -0.3,0.2 -0.1,0.6 -0.7,1.3 -0.5,1.2 -0.7,0.6 -0.7,0.2 0.1,0.1 0.7,0.1 0.8,-0.7 z m -19.7,-2 0.5,-0.5 0.1,-0.3 -0.1,-0.5 0.2,-0.2 -0.1,-0.4 -0.3,-0.4 -0.7,0 -0.4,0.6 0.6,1.2 0.1,0.5 0.1,0 z m 22.4,-2.7 0.9,-0.3 0.5,-0.3 0.1,-0.9 0.2,-0.3 -0.2,-0.3 -0.2,0.2 -0.2,0.4 -0.6,0.2 -0.8,0.4 -0.2,0.3 -0.2,0.9 0.4,0.1 0.3,-0.4 z", + "ID": "m 1651.9,637.3 0.5,-1.7 -1.8,-1.9 -2.8,-2 -5.3,1.3 7,4.4 2.4,-0.1 z m 20.9,-0.6 4,-4.8 0.1,-1.9 -0.5,-1.3 -5.7,2.6 -2.8,3.9 -0.7,2.1 0.6,0.8 5,-1.4 z m -35.6,-13 -1.6,2.2 -3.1,0.1 -2.2,3.6 3,0.1 3.9,-0.9 6.6,-1.2 -1.2,-2.8 -3.5,0.6 -1.9,-1.7 z m 28.1,0 -5.2,2.3 -3.8,0.5 -3.4,-1.9 -4.5,1.3 -0.2,2.3 7.4,0.8 8.6,-1.8 1.1,-3.5 z m -79.5,-8.4 -0.7,-2.3 -2.3,-0.5 -4.4,-2.4 -6.8,-0.4 -4.1,6.1 5.1,0.4 0.8,2.8 10,2.6 2.4,-0.8 4.1,0.6 6.3,2.4 5.2,1.2 5.8,0.5 5.1,-0.2 5.9,2.5 6.6,-2.4 -6.6,-3.8 -8.3,-1.1 -1.8,-4.1 -10.3,-3.1 -1.3,2.6 -10.7,-0.6 z m 146.6,-3.6 0.2,-3 -1.2,-1.9 -1.3,2.2 -1.2,2.2 0.3,4.8 3.2,-4.3 z m -41,-17.5 -1.4,-2.1 -5.7,0.3 1,2.7 3.9,1.2 2.2,-2.1 z m 18.1,-2.4 -6.1,-1.8 -6.9,0.3 -1.5,3.5 3.9,0.2 3.2,-0.4 4.6,0.5 4.7,2.6 -1.9,-4.9 z m 21,-12.3 -0.8,-2.4 -9,-2.6 -2.9,2.1 -7.6,1.5 2.3,3.2 5,1.2 2.1,3.7 8.3,0.1 0.4,1.6 -4,-0.1 -6.2,2.3 4.2,3.1 -0.1,2.8 1.2,2.3 2.1,-0.5 1.8,-3.1 8.2,5.9 4.6,0.5 10.6,5.4 2.3,5.3 1,6.9 -3.7,1.8 -2.8,5.2 7.1,-0.2 1.6,-1.8 5.5,1.3 4.6,5.2 1.5,-20.8 1,-20.7 -6,-1.2 -4.1,-2.3 -4.7,-2.2 -5,0 -6.6,3.8 -4.9,6.8 -5.7,-3.8 -1.3,-10.3 z m -50,-16.4 -1,-1.4 -5.5,4.6 -6.5,0.3 -7.1,-0.9 -4.4,-1.9 -4.7,4.8 -1.2,2.6 -2.9,9.6 -0.9,5 -2.4,4.2 1.6,4.3 2.3,0.1 0.6,6.1 -1.9,5.9 2.3,1.9 3.6,-1 0.3,-9.1 -0.2,-7.4 3.8,-1.9 -0.7,6.2 3.9,3.7 -0.8,2.5 1.3,1.7 5.6,-2.4 -3,5.2 2.1,2.2 3.1,-1.9 0.3,-4.1 -4.7,-7.4 1.1,-2.2 -5.1,-8.1 5,-2.5 2.6,-3.7 2.4,0.9 0.5,-2.9 -10.5,2.1 -3.1,2.9 -5,-5.6 0.9,-4.8 4.9,-1 9.3,-0.3 5.4,1.3 4.3,-1.3 4.4,-6.3 z m 19.4,1.9 -0.6,-2.6 -3.3,-0.6 -0.5,-3.5 -1.8,2.3 -1,5.1 1.7,8.2 2.2,4 1.6,-0.8 -2.3,-3.3 0.9,-3.9 2.9,0.6 0.2,-5.5 z m -60.9,-4.5 0.9,-2.9 -4.3,-6 3,-5.8 -5,-1 -6.4,0 -1.7,7.2 -2,2.2 -2.7,8.9 -4.5,1.3 -5.4,-1.8 -2.7,0.6 -3.2,3.2 -3.6,-0.4 -3.6,1.2 -3.9,-3.5 -1,-4.3 -3.3,4.2 -0.6,5.9 0.8,5.6 2.6,5.4 2.8,1.8 0.7,8.5 4.6,0.8 3.6,-0.4 2,3.1 6.7,-2.3 2.8,2 4,0.4 2,3.9 6.5,-2.9 0.8,2.3 2.5,-9.7 0.3,-6.4 5.5,-4.3 -0.2,-5.8 1.8,-4.3 6.7,-0.8 -6.5,-5.9 z m -68.7,48.9 0.7,-9.8 1.7,-8 -2.6,-4 -4.1,-0.5 -1.9,-3.6 -0.9,-4.4 -2,-0.2 -3.2,-2.2 2.3,-5.2 -4.3,-2.9 -3.3,-5.3 -4.8,-4.4 -5.7,-0.1 -5.5,-6.8 -3.2,-2.7 -4.5,-4.3 -5.2,-6.2 -8.8,-1.2 -3.6,-0.3 0.6,3.2 6.1,7 4.4,3.6 3.1,5.5 5.1,4 2.2,4.9 1.7,5.5 4.9,5.3 4.1,8.9 2.7,4.8 4.1,5.2 2.2,3.8 7,5.2 4.5,5.3 6.2,-0.1 z", + "IE": "m 947.3,231.7 -3.5,-1.3 -2.9,0.1 1.1,-3.2 -0.8,-3.2 -3.7,2.8 -6.7,4.7 2.1,6.1 -4.2,6.4 6.7,0.9 8.7,-3.6 3.9,-5.4 -0.7,-4.3 z", + "IL": "m 1167.8,360.5 -1.4,0.1 -0.4,1.1 -1.8,0 -0.1,0.1 -0.6,1.6 -0.6,4.8 -1.1,2.9 0.4,0.4 -1.4,2.1 0,0 3.9,9.2 0.7,1.7 1.7,-10.2 -0.4,-2.4 -2.4,0.8 0.1,-1.7 1.2,-0.8 -1.4,-0.7 0.7,-4.3 2,0.9 0.7,-2 -0.1,0 0.6,-1 -0.3,-2.6 z", + "IN": "m 1414.1,380.1 -8.5,-4.4 -6.2,-4 -3.2,-7 4.1,0.9 -0.6,-3.3 -3,-3.3 -0.8,-5.2 -7.6,-7.5 -3.7,5.4 -5.7,1 -8.5,-1.6 -1.9,2.8 3.2,5.6 2.9,4.3 5,3.1 -3.7,3.7 1,4.5 -3.9,6.3 -2.1,6.5 -4.5,6.7 -6.4,-0.5 -4.9,6.6 4,2.9 1.3,4.9 3.5,3.2 1.8,5.5 -12,0 -3.2,4.2 7.1,5.4 1.9,2.5 -2.4,2.3 8,7.7 4,0.8 7.6,-3.8 1.7,5.9 0.8,7.8 2.5,8.1 3.6,12.3 5.8,8.8 1.3,3.9 2,8 3.4,6.1 2.2,3 2.5,6.4 3.1,8.9 5.5,6 2.2,-1.8 1.7,-4.4 5,-1.8 -1.8,-2.1 2.2,-4.8 2.9,-0.3 -0.7,-10.8 1.9,-6.1 -0.7,-5.3 -1.9,-8.2 1.2,-4.9 2.5,-0.3 4.8,-2.3 2.6,-1.6 -0.3,-2.9 5,-4.2 3.7,-4 5.3,-7.5 7.4,-4.2 2.4,-3.8 -0.9,-4.8 6.6,-1.3 3.7,0.1 0.5,-2.4 -1.6,-5.2 -2.6,-4.8 0.4,-3.8 -3.7,-1.7 0.8,-2.3 3.1,-2.4 -4.6,-3.4 1.2,-4.3 4.8,2.7 2.7,0.4 1.2,4.4 5.4,0.9 5,-0.1 3.4,1.1 -1.6,5.3 -2.4,0.4 -1.1,3.6 3.5,3.3 0.2,-4 1.5,-0.1 4.5,10.1 2.4,-1.5 -0.9,-2.7 0.9,-2.1 -0.9,-6.6 4.6,1.4 1.5,-5.2 -0.3,-3.1 2.1,-5.4 -0.9,-3.6 6.1,-4.4 4.1,1.1 -1.3,-3.9 1.6,-1.2 -0.9,-2.4 -6.1,-0.9 1.2,-2.7 -3.5,-3.9 -3.2,2.6 -4.9,-1.5 -5.3,4 -3.9,4.8 -4.2,0.8 2.7,2 0.4,3.9 -4.4,0.2 -4.7,-0.4 -3.2,1 -5.5,-2.5 -0.3,-1.2 -1.5,-5.1 -3,1.4 0.1,2.7 1.5,4.1 -0.1,2.5 -4.6,0.1 -6.8,-1.5 -4.3,-0.6 -3.8,-3.2 -7.6,-0.9 -7.7,-3.5 -5.8,-3.1 -5.7,-2.5 0.9,-5.9 2.8,-2.9 z", + "IQ": "m 1207.3,334.9 -6.2,-0.9 -2.1,1 -2.1,4.1 -2.7,1.6 1.2,4.7 -0.9,7.8 -11,6.7 3.1,7.7 6.7,1.7 8.5,4.5 16.7,12.7 10.2,0.5 3.2,-6.1 3.7,0.5 3.2,0.4 -3.4,-3.4 -0.5,-3.3 -1.7,0 0.2,-4.6 -3.5,-4.9 -7,-3.4 -4.6,-6.1 0.5,-5 2.3,-2.2 -1,-3.8 -3.7,-1.9 -4.7,-7.8 0,0 -2.3,1.1 -2.1,-1.6 z", + "IR": "m 1213.5,324.4 -3.2,-2.9 -1.2,-2.4 -3.3,1.8 2.9,7.3 -0.7,2 3.7,5.2 0,0 4.7,7.8 3.7,1.9 1,3.8 -2.3,2.2 -0.5,5 4.6,6.1 7,3.4 3.5,4.9 -0.2,4.6 1.7,0 0.5,3.3 3.4,3.4 1.7,-2.5 3.7,2.1 2.8,-1 5.1,8.4 4.3,6.1 5.5,1.8 6.1,4.9 6.9,2.1 5.1,-3.1 4,-1.1 2.8,1.1 3.2,7.8 6.3,0.8 6.1,1.5 10.5,1.9 1.2,-7.4 7.4,-3.3 -0.9,-2.9 -2.7,-1 -1,-5.7 -5.6,-2.7 -2.8,-3.9 -3.2,-3.3 3.9,-5.8 -1.1,-4 -4.3,-1.1 -1.1,-4 -2.7,-5.1 1.6,-3.5 -2.5,-0.9 0.5,-4.7 0.5,-8 -1.6,-5.5 -3.9,-0.2 -7.3,-5.7 -4.3,-0.7 -6.5,-3.3 -3.8,-0.6 -2.1,1.2 -3.5,-0.2 -3,3.7 -4.4,1.2 -0.2,1.6 -7.9,1.7 -7.6,-1.1 -4.3,-3.3 -5.2,-1.3 -2.5,-4.8 -1.3,0.3 -3.8,-3.4 1.2,-3.1 -1.9,-1.9 -1.9,0.5 -5.3,4.7 -1.8,0.2 -3.7,-0.9 z", + "IS": "m 915.7,158.6 -6.9,-0.4 -7.3,2.9 -5.1,-1.5 -6.9,3 -5.9,-3.8 -6.5,0.8 -3.6,3.7 8.7,1.3 -0.1,1.6 -7.8,1.1 8.8,2.7 -4.6,2.5 11.7,1.8 5.6,0.8 3.9,-1 12.9,-3.9 6.1,-4.2 -4.4,-3.8 1.4,-3.6 z", + "IT": "m 1057.8,328.6 -4,0.5 -5.2,0.7 -6.2,-0.6 -0.6,3.4 7.5,3.3 2.7,0.7 4.2,2.4 0.9,-3.3 -0.9,-2 1.6,-5.1 z m -33.7,-18.9 -2.5,1.9 -2.8,-0.3 1.3,3.6 0.4,7.6 2.1,1.7 2,-2.1 2.4,0.4 0.4,-8.4 -3.3,-4.4 z m 14.3,-34.3 -1.3,-2.2 -4.8,1.1 -0.5,1.2 -3.1,-0.9 -0.3,2.5 -2.1,1.1 -3.8,-0.8 -0.9,2.5 -2.4,0.2 -0.9,-1 -2.7,2.1 -2.4,0.3 -2.2,-1.3 -0.2,1.7 1.6,2.4 -1.7,1.8 1.5,4.8 2.7,0.8 -0.5,2.7 2.1,-0.5 2.8,-2.8 2.3,-0.9 4.2,2.1 2.6,0.7 1.9,6 3.6,3.6 4.9,4 4.2,2.8 3.9,0.4 2.3,2.5 3.4,1.2 1.7,2.7 2.2,0.8 1.8,3.2 2.3,3.7 -1.1,1.3 -0.8,3.5 0.1,2 2.1,-0.5 2.5,-5.6 2.1,-0.4 0.4,-3.3 -3.9,-2.3 1.9,-4.1 4.5,1 3.1,3 0.8,-2.3 -0.6,-1.2 -4.7,-3.2 -3.9,-1.9 -4.8,-2.3 1.4,-1.2 -1.4,-1.4 -4,0.1 -6,-5 -2.9,-5.1 -4.9,-3.1 -1.9,-3.1 0.5,-1.8 -0.4,-3 3.9,-2.2 4.1,0.9 -1.4,-2.7 0.3,-3 -7.2,-1.6 z", + "JM": "m 550.7,458.5 3.9,-0.1 -0.8,-1.8 -2.7,-1.5 -3.7,-0.6 -1.2,-0.2 -2.4,0.4 -0.8,1.5 2.9,2.3 3,1 1.8,-1 z", + "JO": "m 1186.6,367.6 -3.1,-7.7 -9.6,6.7 -6.3,-2.5 -0.7,2 0.4,3.9 -0.6,1.9 0.4,2.4 -1.7,10.2 0.3,0.9 6.1,1 2.1,-2 1.1,-2.3 4,-0.8 0.7,-2.2 1.7,-1 -6.1,-6.4 10.4,-3.1 0.9,-1 z", + "JP": "m 1692.5,354.9 -4.5,-1.3 -1.1,2.7 -3.3,-0.8 -1.3,3.8 1.2,3 4.2,1.8 -0.1,-3.7 2.1,-1.5 3.1,2.1 1.3,-3.9 -1.6,-2.2 z m 24.4,-19.3 -3.6,-6.7 1.3,-6.4 -2.8,-5.2 -8.1,-8.7 -4.8,1.2 0.2,3.9 5.1,7.1 1,7.9 -1.7,2.5 -4.5,6.5 -5,-3.1 0,11.5 -6.3,-1.3 -9.6,1.9 -1.9,4.4 -3.9,3.3 -1.1,4 -4.3,2 4,4.3 4.1,1.9 0.9,5.7 3.5,2.5 2.5,-2.7 -0.8,-10.8 -7.3,-4.7 6.1,-0.1 5,-3 8.6,-1.4 2.4,4.8 4.6,2.4 4.4,-7.3 9.1,-0.4 5.4,-3 0.6,-4.6 -2.5,-3.2 -0.6,-5.2 z m -11.8,-44.2 -5.3,-2.1 -10.4,-6.4 1.9,4.8 4.3,8.5 -5.2,0.4 0.6,4.7 4.6,6.1 5.7,0 -1.6,-6.8 10.8,4.2 0.4,-6.1 6.4,-1.7 -6,-6.9 -1.7,2.6 -4.5,-1.3 z", + "KE": "m 1211.7,547.2 -3.8,0 -2.3,-2.1 -5.1,2.6 -1.6,2.7 -3.8,-0.5 -1.2,-0.7 -1.3,0.1 -1.8,0 -7.2,-5.4 -3.9,0 -2,-2.1 0,-3.6 -2.9,-1.1 -3.8,4.2 -3.4,3.8 2.7,4.4 0.7,3.2 2.6,7.3 -2.1,4.7 -2.7,4.2 -1.6,2.6 0,0.3 1.4,2.4 -0.4,4.7 20.2,13 0.4,3.7 8,6.3 2.2,-2.1 1.2,-4.2 1.8,-2.6 0.9,-4.5 2.1,-0.4 1.4,-2.7 4,-2.5 -3.3,-5.3 -0.2,-23.2 4.8,-7.2 z", + "KG": "m 1387.2,302.6 -3.5,-0.9 -3.3,-2.2 -7.8,-0.6 -8.6,-0.2 -1.6,0.7 -8.1,-2.6 -2.5,1.3 0.5,3.6 -9.1,-2.1 -3.1,0.8 -0.3,2.7 1.8,0.6 -3.1,4.1 4.6,2.3 3.2,-1.6 7.1,3.3 -5.2,4.5 -4.1,-0.6 -1.4,2 -5.9,-1.1 0.6,3.7 5.4,-0.5 7.1,2 9.5,-0.9 1,-1.5 -1.1,-1.5 4,-3 3.2,-1.2 5.7,0.9 0.6,-4 6.4,-0.8 1,-2.4 6.8,-3.4 0.2,-1.4 z", + "KH": "m 1574.8,481.8 -5.2,-2.3 -2,4.3 -4.9,-2.4 -5.3,-1 -7.1,1.3 -3,5.2 2.1,7.7 3.4,6.6 2.6,3.3 4.7,0.9 4.7,-2.5 5.8,-0.5 -2.8,-3.8 8.9,-4.9 -0.1,-7.7 -1.8,-4.2 z", + "KM": "m 1221.1,650.5 -0.4,-0.4 -0.4,0 0,0.2 0.1,0.4 1.1,0.2 -0.4,-0.4 z m 3.9,-1.5 -0.1,0 -0.2,0.1 -0.1,0.2 -0.1,0.3 -0.3,0 -0.2,0 -0.4,0 0.8,0.5 0.5,0.5 0.2,0.2 0.1,-0.2 0.1,-0.7 -0.3,-0.9 z m -5.6,-1.1 0.2,-0.3 -0.2,-0.7 -0.4,-0.8 0.1,-1.4 -0.2,-0.2 -0.3,0 -0.1,0.1 -0.1,0.3 -0.3,2 0.4,0.6 0.3,0.1 0.5,0.4 0.1,-0.1 z", + "KN": "m 629.9,463.2 0,-0.3 -0.2,-0.2 -0.3,0 0,0.5 0.2,0.2 0.3,-0.2 z m -0.5,-0.7 -0.1,-0.2 -0.1,-0.1 -0.2,-0.4 -0.4,-0.4 -0.2,0.1 -0.1,0.2 0,0.1 0,0 0.3,0.3 0.4,0.1 0.2,0.4 0.2,-0.1 z", + "KP": "m 1644.7,302.3 0,0 -5.5,-3.6 0.1,3.5 -6.3,2.6 2.7,3.3 -4.6,-0.2 -3.6,-2 -1,4.4 -3.8,3.4 -2.1,4 3.3,1.7 3.4,0.7 0.8,1 0.4,3.5 1.1,1.2 -0.9,0.7 -0.1,2.9 1.9,1 1.6,0.6 0.8,1.2 1.3,-0.5 0,-1.3 3.1,1.3 0.1,-0.6 2.4,0.2 0.7,-2.9 3.5,-0.3 2.1,-0.4 -0.1,-1.6 -4.3,-2.8 -2.6,-1 0.2,-0.7 -1.2,-2.8 1.3,-1.7 2.9,-1 1,-1.9 0.3,-1.1 1.9,-1.4 -2.8,-4.5 0.3,-2.1 0.9,-2 2.2,0.3 0,0 0,0 0,0 -1.4,-1.1 z", + "KR": "m 1637.3,331.7 6.2,5.5 -3.4,1.1 5.2,6.8 1.1,4.8 2.1,3.5 4.5,-0.5 3.2,-2.7 4.2,-1.2 0.5,-3.6 -3.4,-7.5 -3.3,-4.2 -8.2,-7.6 0.1,1.6 -2.1,0.4 -3.5,0.3 -0.7,2.9 -2.4,-0.2 -0.1,0.6 z", + "KW": "m 1235.6,381.4 -3.7,-0.5 -3.2,6.1 4.9,0.6 1.7,3.1 3.8,-0.2 -2.4,-4.8 0.3,-1.5 -1.4,-2.8 z", + "KY": "m 527,449.1 -0.1,-0.3 -0.1,0.1 0,0.6 0.5,0 0.2,0 0.3,-0.2 0.6,0 -0.1,-0.2 -0.8,-0.1 -0.1,0.1 -0.2,0.1 -0.2,-0.1 z m 8,-2.3 0,0 -0.1,-0.1 -0.1,0 -0.3,0.1 -0.1,0 -0.1,0 -0.1,0.1 -0.1,0.1 0.2,0 0.4,-0.2 0.2,0 0.1,0 z m 0.8,-0.1 0.5,-0.2 0,0 -0.1,-0.1 -0.1,0 -0.1,0.1 -0.1,0 -0.5,0.3 0.2,0 0.2,-0.1 z", + "KZ": "m 1308.8,223.8 -9,-1.3 -3.1,2.5 -10.8,2.2 -1.7,1.5 -16.8,2.1 -1.4,2.1 5,4.1 -3.9,1.6 1.5,1.7 -3.6,2.9 9.4,4.2 -0.2,3 -6.9,-0.3 -0.8,1.8 -7.3,-3.2 -7.6,0.2 -4.3,2.5 -6.6,-2.4 -11.9,-4.3 -7.5,0.2 -8.1,6.6 0.7,4.6 -6,-3.6 -2.1,6.8 1.7,1.2 -1.7,4.7 5.3,4.3 3.6,-0.2 4.2,4.1 0.2,3.2 2.8,1 4.4,-1.3 5,-2.7 4.7,1.5 4.9,-0.3 1.9,3.9 0.6,6 -4.6,-0.9 -4,1 0.9,4.5 -5,-0.6 0.6,2 3.2,1.6 3.7,5.5 6.4,2.1 1.5,2.1 -0.7,2.6 0.7,1.5 1.8,-2 5.5,-1.3 3.8,1.7 4.9,4.9 2.5,-0.3 -6.2,-22.8 11.9,-3.6 1.1,0.5 9.1,4.5 4.8,2.3 6.5,5.5 5.7,-0.9 8.6,-0.5 7.5,4.5 1.5,6.2 2.5,0.1 2.6,5 6.6,0.2 2.3,3 1.9,0 0.9,-4.5 5.4,-4.3 2.5,-1.2 0.3,-2.7 3.1,-0.8 9.1,2.1 -0.5,-3.6 2.5,-1.3 8.1,2.6 1.6,-0.7 8.6,0.2 7.8,0.6 3.3,2.2 3.5,0.9 -1.7,-3.5 2.9,-1.6 -8.7,-10.7 9,-2.4 2,-1.4 -1,-11.1 10.7,2 1.6,-2.8 -2.5,-6.2 3.8,-0.6 1.8,-4.2 -4.3,-3.8 -6,0.9 -3.3,-2.6 -3.9,-1.2 -4.1,-3.6 -3.2,-1.1 -6.2,1.6 -8.3,-3.6 -1.1,3.3 -18.1,-15.5 -8.3,-4.7 0.8,-1.9 -9.1,5.7 -4.4,0.4 -1.2,-3.3 -7,-2.1 -4.3,1.5 -4.3,-6.3 z", + "LA": "m 1574.8,481.8 0.2,-6.4 -2,-4.5 -4.8,-4.4 -4.3,-5.6 -5.7,-7.5 -7.3,-3.8 1.3,-2.3 3.3,-1.7 -3,-5.5 -6.8,-0.1 -3.4,-5.7 -4,-5.1 -2.7,1 1.9,7.2 -2.9,-0.1 -0.7,-1.5 -4.1,4.1 -0.8,2.4 2.6,1.9 0.9,3.8 3.8,0.3 -0.4,6.7 1,5.7 5.3,-3.8 1.8,1.2 3.2,-0.2 0.8,-2.2 4.3,0.4 4.9,5.2 1.3,6.3 5.2,5.5 0.5,5.4 -1.5,2.9 4.9,2.4 2,-4.3 5.2,2.3 z", + "LB": "m 1167.8,360.5 0.9,-3.5 2.6,-2.4 -1.2,-2.5 -2.4,-0.3 -0.1,0.2 -2.1,4.5 -1.3,5.2 1.8,0 0.4,-1.1 1.4,-0.1 z", + "LC": "m 637.4,484.2 0.1,-1.2 -0.1,-0.5 -0.2,0.1 -0.3,0.4 -0.4,0.6 -0.1,0.3 0,0.6 0.6,0.4 0.4,-0.7 z", + "LI": "m 1024.4,273.6 0,-0.2 0.1,-0.2 -0.1,-0.1 -0.1,-0.2 -0.1,-0.1 0,-0.2 -0.1,-0.1 0,-0.2 -0.1,-0.1 -0.2,0.6 0,0.5 0.1,0.2 0.1,0 0.4,0.1 z", + "LK": "m 1432.2,532.7 2.3,-1.8 0.6,-6.6 -3,-6.6 -2.9,-4.5 -4.1,-3.5 -1.9,10.3 1.4,9.1 2.8,5.1 4.8,-1.5 z", + "LR": "m 929.4,523.3 -1.6,-0.2 -1.1,2.6 -1.6,-0.1 -1.1,-1.3 0.4,-2.6 -2.3,-3.9 -1.5,0.7 -1.2,0.2 -2.6,3 -2.6,3.4 -0.3,1.9 -1.3,2 3.7,4.1 4.8,3.5 5.1,4.8 5.7,3.1 1.5,-0.1 0.5,-5.2 0.5,-0.8 -0.2,-2.5 -2.3,-2.7 -1.8,-0.4 -1.6,-1.8 1.2,-2.8 -0.6,-3.1 0.3,-1.8 z", + "LS": "m 1128.1,766.5 1.1,-2 3.1,-1 1.1,-2.1 1.9,-3.1 -1.7,-1.9 -2.3,-2 -2.6,1.3 -3.1,2.5 -3.2,4 3.7,4.9 2,-0.6 z", + "LT": "m 1100.4,221.2 -5,-2.9 -2.5,-0.4 -0.9,-1.3 -4.4,0.6 -7.9,-0.4 -5,1.9 1.7,5 5,1.1 2.2,0.9 -0.2,1.7 0.6,1.5 2.5,0.6 1.4,1.9 4.6,0 4.8,-2.2 0.5,-3.4 3.5,-2 -0.9,-2.6 z", + "LU": "m 1007,258.6 0.2,-2.7 -1,-1.4 -1.3,0.2 -0.4,3.5 1.1,0.5 1.4,-0.1 z", + "LV": "m 1102.1,210.1 -3.8,0 -4.4,-2.2 -2.1,-0.7 -3.7,1 -0.2,4.6 -3.6,0.1 -4.4,-4.5 -4,2.1 -1.7,3.7 0.5,4.5 5,-1.9 7.9,0.4 4.4,-0.6 0.9,1.3 2.5,0.4 5,2.9 2.6,-1 4.6,-2.3 -2.1,-3.6 -1,-2.8 -2.4,-1.4 z", + "LY": "m 1111.8,371.4 -1.5,-2.1 -5.4,-0.8 -1.8,-1.1 -2,0 -2,-2.8 -7.3,-1.3 -3.6,0.8 -3.7,3 -1.5,3.1 1.5,4.8 -2.4,3 -2.5,1.6 -5.9,-3.1 -7.7,-2.7 -4.9,-1.2 -2.8,-5.7 -7.2,-2.8 -4.5,-1.1 -2.2,0.6 -6.4,-2.2 -0.1,4.9 -2.6,1.8 -1.5,2 -3.7,2.5 0.7,2.6 -0.4,2.7 -2.6,1.4 1.9,5.6 0.4,3 -0.9,5.2 0.5,2.9 -0.6,3.5 0.5,4 -2.1,2.6 3.4,4.7 0.2,2.7 2,3.6 2.6,-1.2 4.3,2.9 2.5,4 8.8,2.8 3.1,3.5 3.9,-2.4 5.4,-3.5 22.3,12.2 22.4,12.2 0,-2.7 6.3,0 -0.5,-12.7 -1,-23.4 -1.3,-22.7 -2,-5.1 1.2,-3.9 -1.1,-2.7 1.8,-3 z", + "MA": "m 965.2,348.4 -2.3,-0.1 -5.5,-1.4 -5,0.4 -3.1,-2.7 -3.9,0 -1.8,3.9 -3.7,6.7 -4,2.6 -5.4,2.9 -3.5,4.3 -0.9,3.4 -2.1,5.4 1.1,7.9 -4.7,5.3 -2.7,1.7 -4.4,4.4 -5.1,0.7 -2.8,2.4 -0.1,0.1 -3.6,6.5 -3.7,2.3 -2.1,4 -0.2,3.3 -1.6,3.8 -1.9,1 -3.1,4 -2,4.5 0.3,2.2 -1.9,3.3 -2.2,1.7 -0.3,3 0.1,0 12.4,-0.5 0.7,-2.3 2.3,-2.9 2,-8.8 7.8,-6.8 2.8,-8.1 1.7,-0.4 1.9,-5 4.6,-0.7 1.9,0.9 2.5,0 1.8,-1.5 3.4,-0.2 -0.1,-3.4 0,0 0.8,0 0.1,-7.5 8.9,-4.7 5.4,-1 4.4,-1.7 2.1,-3.2 6.3,-2.5 0.3,-4.7 3.1,-0.5 2.5,-2.4 7,-1 1,-2.5 -1.4,-1.4 -1.8,-6.7 -0.3,-3.9 -2,-4.1 z", + "MD": "m 1118.5,283.3 1.2,-0.7 0.5,-2.1 1.1,-2 -0.5,-1.1 1,-0.5 0.6,0.9 3,0.2 1.2,-0.5 -1,-0.6 0.2,-1 -2,-1.5 -1.1,-2.6 -1.9,-1.1 0,-2.1 -2.5,-1.6 -2,-0.3 -3.9,-1.9 -3.2,0.6 -1.1,0.9 1.6,0.6 1.8,1.9 1.9,2.6 3.4,3.7 0.6,2.7 -0.2,2.7 1.3,2.8 z", + "ME": "m 1080,299.8 0.4,-0.6 -2,-1.2 -1.8,-0.7 -0.8,-0.8 -1.5,-1.1 -0.9,0.6 -1.5,1.4 -0.4,3.4 -0.5,1 0,0 2.3,1.2 1.6,2.1 1.1,0.4 0,0 -0.5,-1.9 2,-3.1 0.4,1.2 1.3,-0.5 0.8,-1.4 z", + "MG": "m 1255.7,658.4 -1.1,-4.2 -1.4,-2.7 -1.8,-2.7 -2,2.8 -0.3,3.8 -3.3,4.5 -2.3,-0.8 0.6,2.7 -1.8,3.2 -4.8,3.9 -3.4,3.7 -2.4,0 -2.2,1.2 -3.1,1.3 -2.8,0.2 -1,4.1 -2.2,3.5 0.1,5.9 0.8,4 1.1,3 -0.8,4.1 -2.9,4.8 -0.2,2.1 -2.6,1.1 -1.3,4.6 0.2,4.6 1.6,5 -0.1,5.7 1.2,3.3 4.2,2.3 3,1.7 5,-2.7 4.6,-1.5 3.1,-7.4 2.8,-8.9 4.3,-12 3.3,-8.8 2.7,-7.4 0.8,-5.4 1.6,-1.5 0.7,-2.7 -0.8,-4.7 1.2,-1.9 1.6,3.8 1.1,-1.9 0.8,-3.1 -1.3,-2.9 -0.5,-7.7 z", + "MK": "m 1094,304.8 -2.8,-2 -2.4,0.1 -1.7,0.4 -1.1,0.2 -2.9,1 -0.1,1.2 -0.7,0 0,0 -0.4,2.1 0.9,2.6 2.3,1.6 3.3,-0.6 1.9,-1.3 2.8,0.1 0.7,-1.1 1,-0.2 -0.8,-4.1 z", + "ML": "m 1000.3,450.3 -6.1,0.6 -0.1,-4 -2.6,-1.1 -3.4,-1.8 -1.3,-3 -18.6,-13.8 -18.4,-13.9 -8.4,0.1 2.4,27.4 2.4,27.5 1,0.8 -1.3,4.4 -22.3,0.1 -0.9,1.4 -2.1,-0.4 -3.2,1.3 -3.8,-1.8 -1.8,0.2 -1,3.7 -1.9,1.2 0.2,3.9 1.1,3.7 2.1,1.8 0.4,2.4 -0.3,2 0.3,2.3 0.9,0 1.5,-0.8 0.9,0.2 1.5,1.6 2.4,0.5 1.6,-1.4 1.8,-0.8 1.3,-0.9 1.1,0.2 1.3,1.4 0.6,1.7 2.3,2.7 -1.2,1.6 -0.2,2.1 1.2,-0.6 0.7,0.7 -0.3,1.9 1.7,1.8 0.7,-0.6 1.6,1 4.3,0.1 1,-1.9 1,0.1 1.6,-0.7 0.9,2.7 1.3,-0.8 2.3,-0.9 -0.4,-3.7 1.6,-2.7 -0.2,-2.2 4.5,-5.2 0.8,-4.4 1.6,-1.6 2.7,0.9 2.3,-1.3 0.8,-1.6 4.3,-2.9 1.1,-2 5.2,-2.6 3,-0.9 1.4,1.2 3.6,0 3.6,-0.3 2,-2.2 7.6,-0.6 4.9,-1 0.5,-3.9 3,-4.3 -0.1,-14.6 z", + "MM": "m 1533.9,435.8 -0.6,-2.6 -3.8,1.8 -2.5,-1.2 -4.5,-2.4 0.8,-5.2 -3.7,-1.3 -2.3,-5.8 -5.6,1 -0.7,-7.5 4.1,-5.3 -0.8,-5.3 -1.3,-4.9 -2.7,-1.5 -2.7,-3.7 -3,0.4 0.9,2.4 -1.6,1.2 1.3,3.9 -4.1,-1.1 -6.1,4.4 0.9,3.6 -2.1,5.4 0.3,3.1 -1.5,5.2 -4.6,-1.4 0.9,6.6 -0.9,2.1 0.9,2.7 -2.4,1.5 0.5,4.6 -2.1,-1 1.1,5.1 4.6,5.2 3.4,0.9 -0.4,2.2 5.4,7.4 1.9,5.9 -0.9,7.9 3.6,1.5 3.2,0.6 5.8,-4.6 3.2,-3.1 3.1,5.2 2,8.1 2.6,7.6 2.6,3.3 0.2,6.9 2.2,3.8 -1.3,4.8 0.9,4.8 2.2,-6.6 2.6,-5.9 -2.8,-5.8 -0.2,-3 -1,-3.5 -4.2,-5.1 -1.7,-3.2 1.7,-1.1 1.4,-5.6 -2.9,-4.2 -4.1,-4.6 -3.5,-5.6 2.2,-1.1 1.5,-6.9 3.9,-0.3 2.8,-2.8 3,-1.4 0.8,-2.4 4.1,-4.1 z", + "MN": "m 1473.7,252.1 -3.7,-4.6 -6.6,-1.5 -4.8,-0.8 -6.9,-2.5 -1.3,6.4 4,3.6 -2.4,4.3 -7.9,-1.6 -5,-0.2 -4.7,-2.9 -5.1,-0.1 -5.3,-1.9 -5.9,2.9 -6.6,5.4 -4.7,1 3.3,4.4 5.7,3.3 8.1,2.3 5.8,5 1.3,7.3 3,2.7 6.4,1 7.2,0.9 7.9,3.8 3.4,0.7 4.9,5.7 4.7,3.6 5.5,-0.1 11.2,1.3 6.4,-0.8 5.5,0.9 9.3,3.8 6.2,-0.1 3.2,2 4.4,-3.3 7.2,-2.2 7.5,-0.2 4.9,-2.2 1.9,-3.3 2.5,-2 -1.9,-2.1 -2.9,-2.3 0.4,-4 3.2,0.5 5.9,1.3 3.1,-3.3 6.3,-2.4 1.4,-4.1 2.4,-1.8 6.8,-0.8 4.3,0.7 -0.7,-2.2 -7.2,-4.3 -5.1,-2 -2.5,2.3 -5.4,-1 -2.4,0.8 -2.7,-2.6 -0.3,-6.2 -0.6,-4.6 -5.5,0.5 -3.9,-2.1 -3.3,-0.7 -4.5,4.4 -5.8,1 -3.6,1.6 -6.7,-1 -4.5,0 -4.9,-3.1 -6.5,-3 -5.4,-0.8 -5.7,0.8 -3.9,1.1 -8.4,-2.6 z", + "MQ": "m 638,479.9 -0.2,-0.7 -0.1,-0.2 -0.2,-0.3 0.1,-0.3 0,-0.1 -0.2,0 -0.3,-0.5 -0.6,-0.3 -0.3,0 -0.2,0.2 0,0.3 0.3,0.9 0.2,0.2 0.5,0.2 -0.4,0.4 0,0.1 0.1,0.3 0.9,0 0.2,0.3 0.1,-0.1 0.1,-0.4 z", + "MR": "m 949.8,413.3 -20.3,-15.5 -0.2,9.7 -17.9,-0.3 -0.2,16.3 -5.2,0.5 -1.4,3.3 0.9,9.2 -21.6,-0.1 -1.2,2.2 2.8,2.7 1.4,3 -0.7,3.2 0.6,3.2 0.5,6.3 -0.8,5.9 -1.7,3.2 0.4,3.4 2,-2 2.7,0.5 2.8,-1.4 3.1,0 2.6,1.8 3.7,1.7 3.2,4.7 3.6,4.4 1.9,-1.2 1,-3.7 1.8,-0.2 3.8,1.8 3.2,-1.3 2.1,0.4 0.9,-1.4 22.3,-0.1 1.3,-4.4 -1,-0.8 -2.4,-27.5 -2.4,-27.4 8.4,-0.1 z", + "MS": "m 631.8,465.7 -0.1,-0.5 -0.1,0 -0.2,0.4 0,0.3 0.3,0.1 0.1,-0.3 z", + "MT": "m 1053.6,344 -0.2,-0.2 -0.5,-0.5 -0.5,-0.1 0.1,0.6 0.4,0.4 0.5,0 0.2,-0.2 z m -1.4,-1.2 0,0 0,-0.2 -0.3,-0.1 -0.4,0.1 0.1,0.1 0.3,0.2 0.3,-0.1 z", + "MU": "m 1294.7,702.5 0.3,-0.3 0.2,-0.4 0.3,-0.3 0.1,-0.7 -0.2,-0.8 -0.4,-0.7 -0.5,0.1 -0.3,0.4 -0.2,0.5 -0.5,0.3 -0.1,0.3 -0.2,0.7 -0.1,0.4 -0.2,0.1 0,0.2 0.3,0.3 0.8,0.1 0.7,-0.2 z", + "MV": "m 1389.1,551.6 0.1,-0.1 0,-0.2 -0.1,-0.1 -0.1,0 -0.1,0.2 0,0.1 0,0.1 0.2,0 z m 0.3,-5.9 0.1,-0.2 0,-0.1 0,-0.1 0,-0.1 0,-0.1 -0.1,0.1 -0.1,0.2 0,0.1 -0.1,0.1 0,0.1 0.1,0 0.1,0 z", + "MW": "m 1169.2,661.5 0.1,-2.3 -1.2,-1.9 0.1,-2.8 -1.5,-4.7 1.7,-3.5 -0.1,-7.7 -1.9,-4.1 0.2,-0.7 0,0 -1.1,-1.7 -5.4,-1.2 2.6,2.8 1.2,5.4 -1,1.8 -1.2,5.1 0.9,5.3 -1.8,2.2 -1.9,5.9 2.9,1.7 3,3 1.6,-0.6 2.1,1.6 0.3,2.6 -1.3,2.9 0.2,4.5 3.4,4 1.9,-4.5 2.5,-1.3 -0.1,-8.2 -2.2,-4.6 -1.9,-2 -0.3,0 0,0.8 1.1,0.3 1,3.4 -0.2,0.8 -1.9,-2.5 -1,1.6 -0.8,-1.4 z", + "MX": "m 444.4,407.8 -3.6,-1.4 -3.9,-2 -0.8,-3 -0.2,-4.5 -2.4,-3.6 -1,-3.7 -1.6,-4.4 -3.1,-2.5 -4.4,0.1 -4.8,5 -4,-1.9 -2.2,-1.9 -0.4,-3.5 -0.8,-3.3 -2.4,-2.8 -2.1,-2 -1.3,-2.2 -9.3,0 -0.8,2.6 -4.3,0 -10.7,0 -10.7,-4.4 -7.1,-3.1 1,-1.3 -7,0.7 -6.3,0.5 0.2,5.7 0.7,5.1 0.7,4.1 0.8,4 2.6,1.8 2.9,4.5 -1,2.9 -2.7,2.3 -2.1,-0.3 -0.6,0.5 2.3,3.7 2.9,1.5 1,1.7 0.9,-0.9 3.1,2.9 2.1,2 0.1,3.4 -1.2,4.7 2.5,1.6 3.3,3.1 2.9,3.6 0.7,3.9 1,0 2.7,-2.3 0.4,-1.2 -1.5,-2.8 -1.6,-2.9 -2.6,-0.2 0.4,-3.4 -0.9,-3 -1,-2.8 -0.5,-5.9 -2.6,-3.2 -0.6,-2.3 -1.2,-1.6 0,-4.1 -1,0.1 -0.1,-2.2 -0.7,-0.5 -0.4,-1.4 -2.7,-4.4 -1.1,-2.6 1,-4.8 0.1,-3 1.8,-2.6 2.4,1.7 1.9,-0.2 3.1,2.5 -0.9,2.4 0.4,4.9 1.5,4.7 -0.4,2 1.7,3.1 2.3,3.4 2.7,0.5 0.3,4.4 2.4,3.1 2.5,1.5 -1.8,4 0.7,1.5 4.1,2.6 1.9,4 4.5,4.9 3.8,6.4 1.3,3.2 0,2.5 1.4,2.9 -0.3,2.2 -1.6,1.6 0.3,1.8 -1.9,0.7 0.8,3.1 2.2,4 5.3,3.6 1.9,2.9 5.4,2 3,0.4 1.2,1.7 4.2,3 5.9,3 4,0.9 4.8,2.9 4,1.2 3.7,1.7 2.9,-0.7 4.8,-2.4 3.1,-0.4 4.4,1.6 2.6,2.1 5.5,6.9 0.4,-1.9 0.8,-1.5 -0.7,-1.2 3.3,-5.2 7.1,0 0.4,-2.1 -0.8,-0.4 -0.5,-1.4 -1.9,-1.5 -1.8,-2.1 2.6,0 0.4,-3.6 5.2,0 5.1,0.1 0.1,-1 0.7,-0.3 0.9,0.8 2.5,-3.9 1,0 1.2,-0.1 1.2,1.6 2,-5 1.2,-2.7 -0.9,-1.1 1.8,-3.9 3.5,-3.8 0.6,-3.1 -1.2,-1.3 -3.4,0.5 -4.8,-0.2 -6,1.5 -4,1.7 -1.2,1.8 -1.2,5.4 -1.8,3.7 -3.9,2.6 -3.6,1.1 -4.3,1.1 -4.3,0.6 -5.1,1.8 -1.9,-2.6 -5.6,-1.7 -1.8,-3.2 -0.7,-3.6 -3,-4.7 -0.4,-5 -1.2,-3.1 -0.5,-3.4 1.1,-3.1 1.8,-8.6 1.8,-4.5 3.1,-5.6 -2.1,0.2 z", + "MY": "m 1543.6,532.7 -4.7,-2.8 -0.9,1.1 1.4,2.7 -0.4,4.7 2.1,3.4 1,5.3 3.4,4.3 0.8,3.2 6.7,5 5.4,4.8 4,-0.5 0.1,-2.1 -2.3,-5.6 -2.1,-1.8 -0.5,-3.8 -0.6,-2.1 0.5,-2.9 -0.5,-4.3 -2.6,-4.3 -3.5,-3.8 -1.3,-0.6 -1.7,2.6 -3.7,0.8 -0.6,-3.3 z m 99,11 -1.2,-3.1 3.8,-0.4 0.3,-2.4 -4.8,-2 -3.8,-1.7 -0.4,-2.8 -3.1,-3.2 -2.3,0 -2.5,5 -4.1,4.4 -0.1,3.1 -0.1,4.1 -2.7,-0.2 -1.1,2.2 -2.7,-3.3 -2.6,4 -3.8,5 -6.7,1.4 -2.4,1.2 -0.9,5.4 -4.4,1.2 -4.1,-2.2 1,4.3 3.9,3.5 3.6,-1.2 3.6,0.4 3.2,-3.2 2.7,-0.6 5.4,1.8 4.5,-1.3 2.7,-8.9 2,-2.2 1.7,-7.2 6.4,0 5,1 4,-2.1 z", + "MZ": "m 1203,640.7 -0.8,-2.9 0,0 0,0 -4.6,3.7 -6.2,2.5 -3.3,-0.1 -2.1,1.9 -3.9,0.1 -1.4,0.8 -6.7,-1.8 -2.1,0.3 -1.6,6 0.7,7.3 0.3,0 1.9,2 2.2,4.6 0.1,8.2 -2.5,1.3 -1.9,4.5 -3.4,-4 -0.2,-4.5 1.3,-2.9 -0.3,-2.6 -2.1,-1.6 -1.6,0.6 -3,-3 -17.1,5.2 0.3,4.5 0.3,2.4 4.6,-0.1 2.6,1.3 1.1,1.6 2.6,0.5 2.8,2 -0.3,8.1 -1.3,4.4 -0.5,4.7 0.8,1.9 -0.8,3.7 -0.9,0.6 -1.6,4.6 -6.2,7.2 2.2,9 1.1,4.5 -1.4,7.1 0.4,2.3 0.6,2.9 0.3,2.8 4.1,0 0.7,-3.3 -1.4,-0.5 -0.3,-2.6 2.6,-2.4 6.8,-3.4 4.6,-2.2 2.5,-2.3 0.9,-2.6 -1.2,-1.1 1.1,-3 0.5,-6.2 -1,0.3 0,-1.9 -0.8,-3.7 -2.4,-4.8 0.7,-4.6 2.3,-1.4 4.1,-4.6 2.2,-1.1 6.7,-6.8 6.4,-3.1 5.2,-2.5 3.7,-3.9 2.4,-4.4 1.9,-4.6 -0.9,-3.1 0.2,-9.9 -0.4,-5.6 0.4,-6.3 z", + "NA": "m 1105.4,683.7 -10.3,2.5 -13.4,-0.9 -3.7,-3 -22.5,0.3 -0.9,0.4 -3.2,-2.9 -3.6,-0.1 -3.3,1 -2.7,1.2 0.2,4.9 4.4,6.2 1.1,4 2.8,7.7 2.7,5.2 2.1,2.6 0.6,3.5 0,7.6 1.6,9.8 1.2,4.6 1,6.2 1.9,4.7 3.9,4.8 2.7,-3.2 2.1,1.8 0.8,2.7 2.4,0.5 3.3,1.2 2.9,-0.5 5,-3.2 1.1,-23.6 0.6,-18.5 5.4,-0.2 0.9,-22.7 4.1,-0.2 8.6,-2.2 2,2.6 3.7,-2.5 1.6,0 3.2,-1.5 0,-0.5 -2.1,-1.4 -3.6,-0.4 -4.6,1.5 z", + "NC": "m 1897.3,716.1 0,-0.3 -0.4,-0.2 -0.2,0.5 0,0.1 0.2,0.1 0.2,0 0.2,-0.2 z m 4.6,-7.6 -0.1,-0.1 0,-0.3 0.1,-0.2 -0.4,0.2 -0.6,0.2 0.1,0.8 -0.1,0.4 0.3,0.1 0.1,0.3 0.2,0 0.7,-0.2 0.3,-1.1 -0.4,0 -0.2,-0.1 z m -3,-1.7 0.3,-0.5 0.1,-0.2 -0.2,-0.7 -0.3,-0.3 0.3,-1 -0.1,-0.2 -0.4,-0.2 -0.9,0.3 -0.1,0.2 0.5,0.1 0.2,0.2 -0.5,0.7 -0.5,0.1 0.1,0.5 0.2,0.4 0.7,0.2 0.3,0.4 0.3,0 z m -3.9,-2.9 0.3,-0.3 0.3,-0.4 -0.1,-0.1 0,-0.3 0.2,-0.4 0.3,-0.1 -0.2,-0.2 -0.2,-0.1 0,0.3 -0.3,0.7 -0.1,0.3 -0.5,0.6 0.3,0 z m -12.3,-2.9 -0.6,-0.7 -0.1,0.2 -0.1,0.4 0,0.3 0.3,0.2 0.1,0.2 -0.1,0.5 0,0.4 0.6,0.9 0.1,0.7 0.3,0.6 0.5,0.5 0.4,0.5 0.8,1.4 0.2,0.5 0.4,0.3 1,1.2 0.4,0.4 0.4,0.2 0.9,0.7 0.6,0.3 0.3,0.5 0.6,0.3 0.8,0.4 0.1,0.2 0,0.3 0.1,0.3 0.5,0.4 0.6,0.3 0.1,0.2 0.1,0.2 0.3,-0.1 0.3,0.1 0.9,0.7 0.4,-0.1 0.3,0 0.5,-0.2 0.3,-0.4 -0.1,-1.1 -0.5,-0.5 -0.7,-0.4 -0.4,-0.5 -0.4,-0.5 -0.8,-1 -1.1,-1 -0.5,-0.2 -0.3,-0.4 -0.3,-0.1 -0.2,-0.3 -0.5,-0.3 -0.3,-0.6 -0.6,-0.6 -0.1,-0.3 0.1,-0.3 -0.1,-0.3 -0.4,-0.3 -0.2,-0.5 -0.2,-0.3 -0.4,-0.2 -0.7,-0.4 -1.6,-1.9 -0.7,-0.6 -0.7,0.2 -0.6,-0.4 z m -22,-6 0.2,-0.4 0.1,-0.8 -0.2,0.4 -0.2,1 0.1,-0.2 z", + "NE": "m 1051.3,425.6 -8.8,-2.8 -18.6,12.2 -15.8,12.5 -7.8,2.8 0.1,14.6 -3,4.3 -0.5,3.9 -4.9,1 -7.6,0.6 -2,2.2 -3.6,0.3 -0.5,3.1 0.8,2.9 3.1,4.1 0.2,3.1 6.4,1.4 -0.1,4.4 1.9,-1.9 2,0 4.3,3.7 0.3,-5.7 1.6,-2.6 0.8,-3.6 1.4,-1.4 6,-0.8 5.6,2.4 2.1,2.4 2.9,0.1 2.6,-1.5 6.8,3.3 2.8,-0.2 3.3,-2.7 3.3,0.2 1.6,-0.9 3,0.4 4.3,1.8 4.3,-3.5 1.3,0.2 3.9,7 1,-0.2 0.2,-2 1.6,-0.4 0.5,-2.9 -3.6,-0.2 0,-4.1 -2.4,-2.3 2.3,-8.4 6.9,-6 0.2,-8.3 1.8,-12.9 1.1,-2.7 -2.3,-2.2 -0.2,-2.1 -2,-1.6 -1.6,-9.9 -3.9,2.4 -3.1,-3.5 z", + "NG": "m 1055.8,492.7 -1,0.2 -3.9,-7 -1.3,-0.2 -4.3,3.5 -4.3,-1.8 -3,-0.4 -1.6,0.9 -3.3,-0.2 -3.3,2.7 -2.8,0.2 -6.8,-3.3 -2.6,1.5 -2.9,-0.1 -2.1,-2.4 -5.6,-2.4 -6,0.8 -1.4,1.4 -0.8,3.6 -1.6,2.6 -0.3,5.7 -0.2,2.1 1.2,3.8 -1.1,2.5 0.6,1.7 -2.7,4 -1.7,1.9 -1,4 0.1,4.1 -0.3,10.2 4.9,0 4.3,0 3.9,4.2 1.9,4.6 3,3.9 4.5,0.2 2.2,-1.4 2.1,0.3 5.8,-2.3 1.4,-4.5 2.7,-6.1 1.6,-0.1 3.3,-3.7 2.1,-0.1 3.2,2.6 3.9,-2.2 0.5,-2.6 1.2,-2.6 0.8,-3.2 3,-2.6 1.1,-4.5 1.2,-1.4 0.7,-3.3 1.5,-4 4.6,-5 0.3,-2.1 0.6,-1.1 -2.3,-2.6 z", + "NI": "m 514.1,476.8 -1.9,-0.2 -0.9,0.9 -2,0.8 -1.4,0 -1.3,0.8 -1.1,-0.3 -0.9,-0.9 -0.6,0.2 -0.8,1.5 -0.5,-0.1 -0.3,1.3 -2.1,1.8 -1.1,0.7 -0.6,0.8 -1.5,-1.3 -1.4,1.7 -1.2,0 -1.3,0.2 -0.2,3.1 -0.8,0 -0.8,1.5 -1.8,0.3 -0.4,0.4 -0.9,-1 -0.7,1 2.6,2.9 2.2,2 1,2.1 2.5,2.6 1.8,2 0.9,-0.8 3.5,1.7 1.4,-0.8 1.7,0.5 0.8,1.3 1.7,0.4 1.4,-1.3 -0.8,-1.1 -0.1,-1.7 1.2,-1.6 -0.2,-1.7 0.7,-2.7 0.9,-0.7 0.1,-2.8 -0.2,-1.7 0.4,-2.8 0.9,-2.5 1.4,-2.2 -0.3,-2.3 0.4,-1.4 0.6,-0.6 z", + "NL": "m 1005.5,243.9 2.9,0 1.1,-2.3 1,-5.6 -1,-2 -3.9,-0.2 -6.5,2.6 -3.9,8.9 -2.5,1.7 0,0 3.6,0.5 4.4,-1.3 3.1,2.7 2.8,1.4 -1.1,-6.4 z", + "NO": "m 1088.8,133.1 -6.9,1.1 -7.3,-0.3 -5.1,4.4 -6.7,-0.3 -8.5,2.3 -10.1,6.8 -6.4,4 -8.8,10.7 -7.1,7.8 -8.1,5.8 -11.2,4.8 -3.9,3.6 1.9,13.4 1.9,6.3 6.4,3 6,-1.4 8.5,-6.8 3.3,3.6 1.7,-3.3 3.4,-4 0.9,-6.9 -3.1,-2.9 -1,-7.6 2.3,-5.3 4.3,0.1 1.3,-2.2 -1.8,-1.9 5.7,-7.9 3.4,-6.1 2.2,-3.9 4,0.1 0.6,-3.1 7.9,0.9 0,-3.5 2.5,-0.3 2.1,-1.4 5.1,2.9 5.3,-0.3 4.7,1.3 3.4,-2.4 1.1,-3.9 5.8,-1.8 5.7,2.1 -0.8,3.8 3.2,-0.5 6.4,-2.2 0,0 -5.4,-3.3 4.8,-1.4 -13.6,-3.9 z m -22.6,-33.3 -5.6,-1 -1.9,-1.7 -7.2,0.9 2.6,1.5 -2.2,1.2 6.7,1.1 7.6,-2 z m -25.4,-8.3 -4.8,-1.6 -5.1,0.2 -1,1.5 -5,0 -2.2,-1.5 -9.3,1.6 3.2,3.5 7.6,3.8 5.7,1.4 -3,1.7 8.4,2.9 4.4,-0.2 0.9,-3.9 3,-0.9 1.2,-3.4 8.5,-1.8 -12.5,-3.3 z m 24.2,-3.1 -9.1,-1 -3.2,1.2 -5.3,-1 -10.4,1.2 4.3,2 5.1,0 0.9,1.3 10.6,0.7 10.1,-0.5 4.3,-2.4 -7.3,-1.5 z", + "NP": "m 1455.2,394.8 -6.5,-0.6 -6.4,-1.5 -5,-2.8 -4.5,-1.2 -2.5,-3.1 -3.2,-0.9 -6.4,-4.1 -4.7,-2 -1.9,1.5 -2.8,2.9 -0.9,5.9 5.7,2.5 5.8,3.1 7.7,3.5 7.6,0.9 3.8,3.2 4.3,0.6 6.8,1.5 4.6,-0.1 0.1,-2.5 -1.5,-4.1 -0.1,-2.7 z", + "NR": "m 1915,575.5 0,-0.2 -0.1,0 -0.1,0 -0.1,0.2 0.1,0.1 0.1,0.1 0.1,-0.2 z", + "NZ": "m 1868.6,832.8 0.9,-2.6 -5.8,2.9 -3.4,3.4 -3.2,1.6 -5.9,4.6 -5.6,3.2 -7,3.2 -5.5,2.4 -4.3,1.1 -11.3,6.1 -6.4,4.6 -1.1,2.3 5.1,0.4 1.5,2.1 4.5,0.1 4,-1.8 6.3,-2.8 8.1,-6.2 4.7,-4.1 6.2,-2.3 4,-0.1 0.6,-2.9 4.6,-2.5 7,-4.5 4.2,-2.9 2.1,-2.6 0.5,-2.6 -5.6,2.5 0.8,-2.6 z m 28.8,-30.5 1.9,-5.7 -3.1,-1.7 -0.8,-3.6 -2.3,0.5 -0.4,4.6 0.8,5.7 0.9,2.7 -0.9,1.1 -0.6,4.4 -2.4,4.1 -4.2,5 -5.3,2.2 -1.7,2.4 3.7,2.5 -0.8,3.5 -6.9,5.1 1.4,0.9 -0.4,1.6 5.9,-2.5 5.9,-4.2 4.5,-3.4 1.6,-1.2 1.5,-2.7 2.8,-2 3.8,0.2 4.2,-3.8 5.1,-5.7 -2.1,-0.8 -4.6,2.5 -3.2,-0.5 -2.9,-2.1 2.3,-4.9 -1.2,-1.8 -2.9,4.4 0.4,-6.8 z", + "OM": "m 1301,437.8 2.1,-2 0.8,-1.8 1.6,-3.8 -0.1,-1.4 -2.1,-0.8 -1.6,-2.1 -2.9,-3.7 -3.3,-1.1 -4.1,-0.9 -3.3,-2.3 -2.9,-4.3 -2.8,0 -0.1,4.2 1.1,0.8 -2.4,1.3 0.3,2.6 -1.4,2.6 0.1,2.6 2.9,4.5 -2.6,12.7 -16.1,6.4 5.2,10.5 2.1,4.4 2.5,-0.3 3.6,-2.2 3.1,0.6 2.5,-1.8 -0.2,-2.5 2.1,-1.6 3.4,0 1.2,-1.3 0.2,-3.1 3.3,-2.4 2.6,0 0.4,-0.8 -1,-4.2 0.6,-3.2 1,-1.5 2.5,0.3 1.7,-4.4 z m -16.6,-30.4 0.2,-2.6 -0.7,-0.6 -1.3,2.2 1.3,2.2 0.5,-1.2 z", + "PA": "m 543.5,517 -2,-1.8 -1.7,-1.9 -2.5,-1.1 -3.1,-0.2 0.3,-0.6 -3.1,-0.4 -2,1.9 -3.5,1.3 -2.5,1.6 -2.7,0.5 -1.5,-1.6 -0.5,0.5 -2.3,-0.3 0.2,-1.3 -1.9,-2.3 -2.2,0.6 -0.1,2.5 1.1,1 -0.8,0.7 0.1,1.2 -0.5,1.3 -0.4,1.2 0.6,1 0.3,-1.4 2.4,0 1.4,0.7 2.3,0.5 1,2.5 1.8,0.4 0.8,-1.1 0.8,3.8 2.6,-0.3 0.9,-0.9 1.5,-0.9 -2.5,-3.4 0.6,-1.3 1.3,-0.3 2.3,-1.6 1.2,-2.2 2.5,-0.4 2.7,1.8 1,2.1 1.4,0.4 -1.5,1.7 1,3.5 1.8,1.8 0.9,-3.1 1.8,0.5 1.1,-1.9 -1.1,-3.8 0.7,-0.9 z", + "PE": "m 584.3,599.5 -2.9,-3.4 -1.7,-0.1 3.5,-6.5 -4.4,-3 -3.3,0.6 -2.1,-1.1 -3,1.7 -4.2,-0.8 -3.4,-6.7 -2.7,-1.7 -1.8,-3 -3.7,-3 -1.5,0.6 0.8,4.9 -1.7,4.1 -6,6.7 -6.7,2.5 -3.3,5.5 -0.9,4.3 -3.1,2.6 -2.5,-3.2 -2.3,-0.7 -2.3,0.5 -0.2,-2.3 1.5,-1.5 -0.7,-2.7 -4.4,4 -1.6,4.5 3,6.1 -1.7,2.8 4.1,2.6 4.5,4.1 2,4.7 2.4,2.9 6,12.7 6.2,11.7 5.4,8.4 -0.8,1.8 2.8,5.3 4.6,3.9 10.7,6.9 11.6,6.4 0.7,2.6 5.9,3.7 2.7,-1.6 1.2,-3.3 2.8,-6.9 -2.8,-5.3 1.1,-2.1 -1.2,-2.4 1.9,-3.2 -0.3,-5.4 -0.1,-4.5 1.1,-2.1 -5.5,-10.3 -3,1.1 -2.6,-0.7 -0.2,-9.7 -4.4,3.8 -4.9,-0.2 -2.3,-3.4 -3.7,-0.3 1,-2.8 -3.3,-3.8 -2.6,-5.8 1.5,-1.1 -0.1,-2.7 3.3,-1.9 -0.7,-3.4 1.3,-2.2 0.4,-3 6.2,-4.3 4.6,-1.2 0.7,-1 5.1,0.3 z", + "PF": "m 213.2,704.9 -0.1,-0.3 -0.2,-0.3 -0.1,0.1 0.1,0.1 0.2,0.3 0,0.2 0.1,-0.1 z m 9.3,-14.7 -0.2,-0.2 -0.4,-0.2 -0.2,-0.1 -0.2,-0.1 -0.1,0.1 0.1,0.1 0.1,0 0.3,0.2 0.3,0.1 0.2,0.1 0,0.1 0.1,-0.1 z m -24.5,-1.1 -0.6,-0.3 0.1,0.2 0.4,0.2 0.2,0.1 -0.1,-0.2 z m 20.5,-0.2 -0.4,-0.5 -0.3,0 0.7,0.6 0,-0.1 z m -21.6,-1 -0.4,-0.4 -0.2,-0.3 -0.3,-0.1 0.1,0.1 0.4,0.4 0.3,0.4 0.2,0.1 -0.1,-0.2 z m -0.3,-2.1 -0.1,-0.1 0,0 0,-0.3 0.2,-0.3 0.6,-0.4 0,-0.1 0,0 -0.2,0.1 -0.4,0.2 -0.2,0.2 -0.1,0.2 -0.1,0.3 0.1,0.2 0.1,0.1 0.2,0 -0.1,-0.1 z m -47.4,-1.1 -0.2,-0.6 -0.3,-0.5 -0.8,-0.1 -0.5,0.2 -0.1,0.2 0.1,0.4 0.5,0.7 0.5,0.1 0.8,-0.1 0.4,0.6 0.2,0.1 0.4,0.1 0.1,-0.3 -0.2,-0.5 -0.9,-0.3 z m -2.9,-0.9 0.1,-0.4 -0.2,-0.1 -0.5,0 0,0.2 0.1,0.2 0.1,0.1 0.3,0.2 0.1,-0.2 z m -9.7,-4.3 0.2,0 -0.4,-0.6 -0.3,-0.2 0,0.1 0,0.7 0.3,0.1 0.2,-0.1 z m 43.9,-1.6 -0.2,0 -0.3,0 -0.1,0 0.5,0.1 0.4,0.2 -0.3,-0.3 z m -0.7,0.1 -0.3,-0.1 -0.3,-0.2 -0.3,0 0.7,0.3 0.2,0 z m -43.8,0.1 0.1,-0.2 -0.1,-0.1 -0.4,-0.2 0.1,0.3 0,0.2 0.2,0.1 0.1,-0.1 z m 32.8,-2 -0.3,-0.4 -0.2,-0.3 -0.2,-0.4 -0.4,-0.5 0.1,0.3 0.1,0.2 0.2,0.2 0.2,0.4 0.1,0.2 0.3,0.4 0.1,0 0,-0.1 z m 16.2,-1.5 0.1,-0.5 -0.2,0 0,0.5 0.1,0 z m -14.4,-1.6 -0.6,-0.6 -0.1,0 0.1,0.2 0.5,0.5 0.1,0.2 0,-0.3 z m 30.8,-33.9 0.1,-0.2 0,-0.2 -0.1,-0.1 -0.3,-0.1 0.1,0.7 0.2,-0.1 z m -2.7,-3.7 -0.1,-0.2 -0.2,0 -0.1,0.1 0,0.5 0.4,-0.4 z m 0.1,-1.6 -0.8,0.5 0.2,0.4 0.4,0.1 0.2,-0.2 0.8,-0.1 0.3,-0.4 -0.3,0.1 -0.8,-0.4 z m -6.1,-1.7 0.2,-0.5 -0.2,-0.1 -0.4,0.2 0,0.2 0.3,0.4 0.1,-0.2 z m 2.6,-3.1 0.3,-0.1 0,-0.1 -0.2,-0.2 -0.3,-0.1 -0.1,0.1 -0.1,0.2 0.1,0.3 0.3,-0.1 z m -2.9,-0.1 0.1,-0.3 0,-0.2 -0.1,-0.2 -0.9,-0.2 -0.1,0.1 0,0.4 0.2,0.5 0.3,0 0.5,-0.1 z", + "PG": "m 1850.7,615.6 0.9,-1.8 -2.4,-2.2 -2.5,-4 -1.6,-1.5 -0.5,-1.9 -0.8,0.7 0.9,4.8 2.2,4 2.2,2.5 1.6,-0.6 z m -21.2,-8.6 2.1,-3.9 0.4,-3.5 -1.1,-1 -3.4,0.1 0.4,3.7 -3.3,2.3 -1.7,2.2 -3.2,0.5 -0.4,-3.4 -0.8,0.1 -1,3.1 -3.1,0.5 -5,-0.9 -0.6,1.9 3.1,1.8 4.5,1.9 2.9,0 3,-1.5 3.2,-1.6 1,-1.8 3,-0.5 z m -27.8,12.2 -0.9,-4.3 5.2,-0.7 -1.1,-3.3 -9.1,-4 -0.6,-3.7 -2.9,-3.2 -3.7,-3.3 -10.2,-3.6 -9.6,-4.4 -1,20.7 -1.5,20.8 5.7,0.2 3.1,1.1 4.6,-2.2 -0.3,-4.7 3.6,-2.1 4.9,-1.8 7,2.8 2.4,5.6 2.9,3.5 3.9,4 5.5,1 4.8,0.7 1.1,1.6 3.8,-0.4 0.8,-1.8 -5.6,-2.7 1.8,-1.2 -4.2,-1.1 0.5,-2.8 -3.2,0.2 -3,-6.8 -4.7,-4.1 z m 34.7,-18.4 -0.5,-3.3 -2,-2.1 -2.1,-2.6 -2.3,-1.5 -1.9,-1.4 -2.9,-1.8 -1.6,1.5 3.9,1.9 3.1,2.7 2.4,2.1 1.2,2.4 0.8,3.8 1.9,-1.7 z", + "PH": "m 1684.6,518.6 -0.6,-2.3 -0.8,-3.2 -4.8,-3 0.8,4.9 -3.9,0.2 -0.7,2.8 -4.2,1.7 -2.2,-2.8 -2.8,2.4 -3.4,1.7 -1.9,5.4 1.1,1.9 3.9,-3.6 2.7,0.3 1.5,-2.7 3.8,3 -1.5,3.1 1.9,4.6 6.8,3.7 1.4,-3 -2.1,-4.7 2.4,-3.2 2.5,6.4 1.5,-5.8 -0.6,-3.5 -0.8,-4.3 z m -14.5,-11.8 0,-6.1 -3.6,6.1 0.5,-4.2 -3,0.3 -0.3,4 -1.2,1.8 -1,1.7 3.8,4.4 1.6,-1.9 1.4,-4 1.8,-2.1 z m -30.1,6.1 2.6,-4.4 3.4,-3.5 -1.5,-5.2 -2.4,6.3 -2.9,4.4 -3.8,4 -2.4,4.4 7,-6 z m 17.4,-16.4 1.2,3 -0.1,3.3 0.5,2.9 3.3,-1.9 2.4,-2.7 -0.2,-2.6 -3.6,0 -3.5,-2 z m 20,-1.7 -1.8,-2.4 -5.4,-0.1 4,4.8 0.3,2.4 -3.3,-0.5 1.2,3.9 1.7,0.3 0.7,4.5 2.5,-1.4 -1.7,-4 -0.4,-2.1 4.5,1.7 -2.3,-7.1 z m -22.9,-5.8 -2.2,-2.3 -4.8,-0.2 3.4,4.8 2.8,3.2 0.8,-5.5 z m -6.4,-34.6 -3.3,0 -0.9,5.8 1.1,9.9 -2.6,-2 1.2,6 1.2,2.8 3.3,3.7 0.4,-2.3 1.8,1.4 -1.5,1.7 0.1,2.6 2.9,1.4 5,-0.9 4,3.8 1.1,-2.4 2.5,3.4 4.8,3.1 0.2,-2.9 -2,-1.6 0.1,-3.4 -7.5,-3.6 -2.3,0.8 -3.1,-0.7 -2,-5.1 0.1,-5.1 3,-2.1 0.6,-5.3 -2.7,-4.6 0.4,-2.6 -0.7,-1.6 -1.5,1.6 -3.7,-1.8 z", + "PK": "m 1388.3,346.3 -9.4,-2.6 -2.9,-5 -4.7,-3 -2.8,0.7 -2.4,1.2 -5.8,0.8 -5.3,1.3 -2.4,2.8 1.9,2.8 1.4,3.2 -2,2.7 0.8,2.5 -0.9,2.3 -5.1,-0.2 3,4.2 -3,1.6 -1.5,3.8 1.1,3.8 -1.7,1.8 -2.1,-0.6 -4,0.9 -0.2,1.7 -4,0 -2.3,3.6 0.8,5.4 -6.6,2.6 -3.8,-0.5 -0.9,1.4 -3.3,-0.8 -5.3,0.9 -9.6,-3.2 3.2,3.3 2.8,3.9 5.6,2.7 1,5.7 2.7,1 0.9,2.9 -7.4,3.3 -1.2,7.4 7.6,-0.9 8.9,-0.1 9.9,-1.2 4.9,4.8 2.1,4.6 4.2,1.6 3.2,-4.2 12,0 -1.8,-5.5 -3.5,-3.2 -1.3,-4.9 -4,-2.9 4.9,-6.6 6.4,0.5 4.5,-6.7 2.1,-6.5 3.9,-6.3 -1,-4.5 3.7,-3.7 -5,-3.1 -2.9,-4.3 -3.2,-5.6 1.9,-2.8 8.5,1.6 5.7,-1 3.7,-5.4 z", + "PL": "m 1069.4,228.3 -4.6,-0.1 -0.5,-1.4 -4.8,-1.1 -5.7,2.1 -7.1,2.8 -3.1,1.7 1.4,3.1 -1.2,1.6 2,2.2 1.4,3.3 -0.1,2.1 2.3,3.9 2.4,1.9 3.7,0.6 -0.1,1.7 2.7,1.2 0.6,-1.5 3.4,0.6 0.7,2 3.6,0.3 2.6,3.1 0.3,0.4 1.9,-0.9 2.7,2.2 2.8,-1.3 2.4,0.6 3.4,-0.8 4.9,2.3 1.1,0.4 -1.6,-2.8 3.8,-5.1 2.3,-0.7 0.3,-1.8 -3.1,-5.3 -0.5,-2.7 -1.9,-2.9 2.7,-1.2 -0.3,-2.4 -1.7,-2.3 -0.6,-2.7 -1.4,-1.9 -2.5,-0.6 -8.7,0.1 -5.9,-0.7 z", + "PN": "m 274.2,727.4 0,-0.2 -0.1,-0.2 -0.2,-0.1 -0.1,0.1 0.1,0.2 0.2,0.2 0.1,0.1 0,-0.1 z", + "PR": "m 600.8,457.3 0,-0.1 0,0 0.1,0 0,-0.1 0.1,-0.1 0,0 0,-0.1 -0.1,0 0,0 -0.3,0 -0.1,0 0,0.1 0,0.1 0.2,0.1 0,0 0,0.1 0.1,0 0,0 z m 13.6,-0.3 0.7,-0.2 0,-0.1 -0.4,-0.1 -0.6,0 -0.5,0.2 0.1,0.2 0.2,0 0.5,0 z m -3.7,-2.2 -0.1,-0.2 -0.2,0 -3.5,-0.1 -1.3,-0.2 -0.3,0.1 -0.3,0.1 -0.1,0.4 -0.2,0.2 -0.3,0.2 0.1,0.3 0.1,0.2 0.2,0.4 -0.1,0.5 -0.2,1 0.3,0.2 0.7,-0.1 0.3,0.1 0.3,0.1 0.4,-0.1 0.4,-0.2 0.9,0.1 0.5,-0.1 0.6,0.3 0.4,-0.1 0.2,0.1 0.3,0 0.6,0 0.9,-0.2 0.8,-0.5 0.3,-0.5 0.4,-0.3 0.6,-0.4 0,-0.9 -0.7,-0.1 -0.6,-0.3 -1.1,-0.1 -0.1,0 0.1,0.2 -0.1,0 -0.2,-0.1 z", + "PS": "m 1166.9,366.1 -2,-0.9 -0.7,4.3 1.4,0.7 -1.2,0.8 -0.1,1.7 2.4,-0.8 0.6,-1.9 -0.4,-3.9 z", + "PT": "m 937.6,335.9 -0.4,-2.1 2,-2.5 0.8,-1.7 -1.8,-1.9 1.6,-4.3 -2,-3.8 2.2,-0.5 0.3,-3 0.9,-0.9 0.2,-4.9 2.4,-1.7 -1.3,-3.1 -3,-0.2 -0.9,0.8 -3,0 -1.2,-3.1 -2.1,0.9 -1.9,1.6 0.1,2.1 0.9,2.2 0.1,2.7 -1.3,3.8 -0.4,2.5 -2.2,2.3 -0.6,4.2 1.2,2.4 2.3,0.6 0.4,4 -1,5.1 2.8,-0.7 2.7,0.9 2.2,-1.7 z", + "PY": "m 655.7,700.5 -0.3,-1.9 -5.4,-3.3 -5.1,-0.1 -9.5,1.9 -2.1,5.6 0.2,3.4 -1.5,7.6 11.2,10.4 4.6,1 7.2,4.7 5.9,2.5 1.1,2.8 -4.2,9.6 5.7,1.8 6.2,1 4.2,-1.1 4.3,-4.8 0.3,-5.7 0.7,-3.6 0.3,-3.8 -0.3,-3.5 -2.1,-1.2 -2,1.1 -2,-0.3 -0.9,-2.5 -1,-5.8 -1.2,-1.9 -3.9,-1.7 -2.1,1.2 -6,-1.2 -0.4,-8.6 -1.9,-3.6 z", + "QA": "m 1258,415.5 0.8,-3.8 -0.5,-3.7 -1.9,-2 -1.4,0.7 -1.1,3.3 0.8,4.7 1.8,1.2 1.5,-0.4 z", + "RE": "m 1284,707.9 0.2,-0.4 0.1,-0.8 -0.4,-0.8 -0.4,-0.7 -0.4,-0.2 -0.8,-0.1 -0.7,0.3 -0.4,0.6 -0.2,0.3 0.4,1.1 0.2,0.3 1.1,0.6 0.5,0 0.8,-0.2 z", + "RO": "m 1108.1,266.3 -2.1,0 -1,1.5 -3.6,0.6 -1.6,0.9 -2.4,-1.5 -3.2,0 -3.2,-0.7 -1.9,1.3 -2.9,1.3 -1.9,4.2 -2.6,4.3 -3.8,1.1 2.9,2.5 0.8,1.9 3.2,1.5 0.7,2.5 3.1,1.8 1.4,-1.3 1.4,0.7 -1.1,1.1 1,1 1.8,2.6 1.9,-0.5 4,1 7.5,0.3 2.3,-1.6 5.8,-1.4 4,2.2 3,0.7 0.4,-7.4 1.6,0.5 2.3,-1.3 -0.4,-1.6 -2.4,-1.1 -2.2,1 -2.4,-1.1 -1.3,-2.8 0.2,-2.7 -0.6,-2.7 -3.4,-3.7 -1.9,-2.6 -1.8,-1.9 -1.6,-0.6 z", + "RS": "m 1084.8,285.2 -3.2,-1.5 -0.8,-1.9 -2.9,-2.5 -3.2,-0.2 -3.7,1.6 0,0 1.5,2.4 1.7,1.8 -1.7,2.3 0,0 1.8,0 -1,2.7 2.7,2.3 -0.5,2.9 -1.2,0.3 1.5,1.1 0.8,0.8 1.8,0.7 2,1.2 -0.4,0.6 1.2,-0.5 0.5,-2 0.9,-0.4 0.8,0.9 1,0.4 0.8,1 0.8,0.3 1.1,1.1 0.8,0 -0.5,1.5 -0.5,0.7 0.2,0.5 1.7,-0.4 2.4,-0.1 0.7,-0.9 -0.6,-0.7 0.7,-2 1.7,-1.9 -2.8,-2.6 -0.7,-2.3 1.1,-1.4 -1,-1 1.1,-1.1 -1.4,-0.7 -1.4,1.3 -3.1,-1.8 -0.7,-2.5 z", + "RU": "m 1332.3,95.1 -4.5,-4 -13.6,-4.1 -9.4,-2.1 -6.2,0.9 -5.3,2.9 5.8,0.8 6.6,3.2 8,1.7 11.5,1.3 7.1,-0.6 z m -178.7,-7.3 0.9,-0.6 -5.7,-0.9 -2.8,0.7 -1.3,1 -1.5,-1.2 -5.2,0.1 -6.2,0.8 7.7,0.1 -1.1,1.3 4.4,1 3.6,-0.7 0.1,-0.7 2.9,-0.3 4.2,-0.6 z m 200.5,9.9 -1.5,-1.8 -12.5,-2.6 -3,-0.3 -2.2,0.5 1.2,6 18,-1.8 z m 15.2,6.3 -9.2,-0.7 3.4,-1.2 -8.2,-1.5 -6.1,1.9 -1,2 1.5,2.1 -6.9,-0.1 -5.3,2.6 -4.3,-1.1 -9.3,0.5 0.3,1.3 -9.2,0.7 -4.9,2.4 -4.2,0.2 -1.2,3.3 5.5,2.6 -7.7,0.7 -9.5,-0.3 -5.8,1.1 4.8,5.4 6.9,4.3 -9.6,-3 -7.9,0.3 -5.1,2 4.5,3.8 -4.9,-1 -2.1,-5 -4.2,-2.8 -1.8,0.1 3.6,3.7 -4.6,3.5 8.1,4.2 0.4,5.4 2.9,2.9 4.7,0.5 0.4,3.5 4.4,3.1 -1.9,2.6 0.5,2.7 -3.7,1.4 -0.5,2 -5.3,-0.8 3.5,-7.8 -0.5,-3.6 -6.7,-3.3 -3.8,-7.3 -3.7,-3.7 -3.6,-1.6 0.8,-4.2 -2.9,-2.9 -11.3,-1.4 -2.1,1 0.5,4.7 -4.3,4.7 1.2,1.7 4.7,4.1 0.1,2.6 5.3,0.5 0.8,1.1 5.8,2.9 -1,2.8 -18.5,-6.1 -6.6,-1.7 -12.8,-1.6 -1.2,1.7 5.9,3.1 -2.7,3.6 -6.4,-3.2 -5,2.2 -7.6,0.1 -2.1,1.9 -5.3,-0.6 2.5,-3.3 -3.2,-0.2 -12.3,4.6 -7.6,2.6 0.4,3.5 -6,1.2 -4,-1.9 -1.2,-3 5,-0.7 -3.6,-3 -12.2,-1.8 4.3,3.4 -0.8,3.2 4.7,3.3 -1.1,3.8 -4.6,-1.9 -4,-0.3 -8,5.4 4.2,4.1 -3.2,1.4 -11.4,-3.5 -2.1,2.1 3.3,2.4 0.2,2.7 -3.8,-1.4 -6,-1.7 -1.9,-5.8 -1,-2.6 -8,-4 2.9,-0.7 20.1,4.2 6.4,-1.5 3.7,-2.9 -1.6,-3.6 -4,-2.6 -17.6,-6.1 -11.6,-1.3 -7.6,-3.2 -3.6,1.8 0,0 -6.4,2.2 -3.2,0.5 0.4,3.7 7.2,3.7 -2.8,4.1 6.4,6.3 -1.7,4.8 4.9,4.1 -0.9,3.7 7.3,3.9 -0.9,2.9 -3.3,3.3 -7.9,7.4 0,0 5.3,2.8 -4.5,3.2 0,0 0.9,1 -2.6,3.4 2.5,5.5 -1.6,1.9 2.4,1.4 1,2.8 2.1,3.6 5.2,1.5 1,1.4 2.3,-0.7 4.8,1.4 1,2.9 -0.6,1.6 3.7,3.9 2.2,1.1 -0.1,1.1 3.4,1.1 1.7,1.6 -1.6,1.3 -3.9,-0.2 -0.8,0.6 1.5,2 2,3.9 0,0 1.8,0.2 1,-1.4 1.5,0.3 4.8,-0.5 3.8,3.4 -0.9,1.3 0.7,1.9 4,0.2 2.2,2.7 0.2,1.2 6.6,2.2 3.5,-1 3.6,2.9 2.9,-0.1 7.6,2 0.4,1.9 -1.3,3.2 1.8,3.4 -0.3,2.1 -4.7,0.5 -2.2,1.7 0.4,2.8 4.2,-1 0.4,1.3 -6.8,2.6 3.2,2.4 -3.2,5.2 -3.4,1 5,3.6 6.2,2.4 7.4,5.1 0.5,-0.7 4.5,1.1 7.7,1 7.5,2.9 1.1,1.2 2.9,-1 5.1,1.3 2.1,2.5 3.5,1.4 1.5,0.2 4.3,3.8 2.4,0.4 0.5,-1.5 2.6,-2.5 0,0 -7.3,-7.3 -0.4,-4.1 -5.9,-5.9 3.5,-6.3 4.6,-1.1 1.4,-3.7 -2.8,-1 -0.2,-3.2 -4.2,-4.1 -3.6,0.2 -5.3,-4.3 1.7,-4.7 -1.7,-1.2 2.1,-6.8 6,3.6 -0.7,-4.6 8.1,-6.6 7.5,-0.2 11.9,4.3 6.6,2.4 4.3,-2.5 7.6,-0.2 7.3,3.2 0.8,-1.8 6.9,0.3 0.2,-3 -9.4,-4.2 3.6,-2.9 -1.5,-1.7 3.9,-1.6 -5,-4.1 1.4,-2.1 16.8,-2.1 1.7,-1.5 10.8,-2.2 3.1,-2.5 9,1.3 4.3,6.3 4.3,-1.5 7,2.1 1.2,3.3 4.4,-0.4 9.1,-5.7 -0.8,1.9 8.3,4.7 18.1,15.5 1.1,-3.3 8.3,3.6 6.2,-1.6 3.2,1.1 4.1,3.6 3.9,1.2 3.3,2.6 6,-0.9 4.3,3.8 1.7,-0.5 4.7,-1 6.6,-5.4 5.9,-2.9 5.3,1.9 5.1,0.1 4.7,2.9 5,0.2 7.9,1.6 2.4,-4.3 -4,-3.6 1.3,-6.4 6.9,2.5 4.8,0.8 6.6,1.5 3.7,4.6 8.4,2.6 3.9,-1.1 5.7,-0.8 5.4,0.8 6.5,3 4.9,3.1 4.5,0 6.7,1 3.6,-1.6 5.8,-1 4.5,-4.4 3.3,0.7 3.9,2.1 5.5,-0.5 7.3,2.3 4.4,-3.9 -1.9,-2.7 -0.1,-6.5 1.2,-2 -2.5,-3.3 -3.7,-1.5 1.7,-3 5.1,-1.1 6.2,-0.2 8.5,1.8 5.9,2.3 7.7,6.1 3.8,2.7 4.4,3.7 6.1,6.1 9.9,1.9 8.9,4.5 6,5.8 7.5,0 2.6,-2.5 6.9,-1.8 1.3,5.6 -0.4,2.3 2.8,6.8 0.6,6 -6.8,-1.1 -2.9,2.2 4.7,5.3 3.8,7.3 -2.5,0.1 1.9,3.1 0,0 1.4,1.1 0,0 0,0 0,0 -0.4,-2 4,-4.5 5.1,3 3.2,-0.1 4.4,-3.6 1,-3.7 2.1,-7.1 1.9,-7.2 -1.3,-4.3 1,-9 -5.2,-9.9 -5.5,-7.3 -1.3,-6.2 -4.7,-5.1 -12.7,-6.7 -5.6,-0.4 -0.3,3 -5.8,-1.3 -5.7,-3.8 -8,-0.7 4.9,-14.1 3.5,-11.5 13.1,-1.8 14.9,1 2.5,-2.8 7.9,0.8 4.3,4.3 6.4,-0.6 8.4,-1.6 -7.7,-3.5 0,-9.8 9.1,-1.9 12.1,7.1 3.6,-6.4 -3.2,-4.7 4.7,-0.5 6.5,8.1 -2.4,4.6 -0.8,6 0.3,7.5 -5.7,1.3 2.8,2.7 -0.1,3.6 6.4,8.3 16,13.4 10.5,8.8 5.7,4.3 1.6,-5.7 -4.5,-6.2 5.7,-1.5 -5.4,-6.9 5,-3.1 -4.7,-2.6 -3.4,-5 4.1,-0.2 -9,-8.6 -6.7,-1.4 -2.9,-2.4 -1.1,-5.6 -3.1,-3.9 7,0.8 1.3,-2.5 4.7,2.2 6.1,-4.6 11.4,4 -1.7,-2.6 2,-3.6 1.5,-4 3.1,-0.7 6.5,-4.3 9.8,1.2 -0.9,-1.5 -3.8,-2.3 -4.1,-1.6 -9.1,-4.6 -8.1,-3 6.1,0.4 2,-2.5 0,0 -32.9,-21.9 -9.4,-2.3 -15.7,-2.6 -7.9,0.3 -15.2,-1.4 1.8,2.3 8.5,3.4 -2.5,1.8 -14.2,-4.8 -6.8,0.6 -9.2,-1.1 -7,0.2 -3.9,1.1 -7.2,-1.6 -5.1,-3.8 -6.5,-2.2 -9.2,-0.9 -14.7,1 -16.1,-4 -7.8,-3 -40.1,-3.4 -2.1,2.2 9.3,4.8 -7.5,-0.7 -1,1.5 -9.7,-1.6 -5,1.4 -9.3,-2.4 3,5.5 -8.9,-2.1 -10,-4.1 -0.4,-2.2 -6,-3.3 -9.8,-2.6 -6.1,0 -9.3,-0.9 4.7,3.9 -17.2,-0.8 -3.9,-2.3 -13.3,-0.9 -5.3,0.8 -0.1,1.3 -5.8,-3.2 -2.3,0.9 -7.2,-1.2 -5.6,-0.7 1.1,-1.5 6.6,-2.8 2.3,-1.5 -2.4,-2.5 -5.5,-1.9 -11.5,-2.3 -10.8,-0.1 -1.9,1.2 -4.1,-2.4 z m -162.2,31.6 -9.9,-4.3 -3.1,-4.3 3.3,-4.9 2.8,-5 8.6,-4.7 9.8,-2.4 11.3,-2.4 1.3,-1.5 -4.2,-1.9 -6.6,0.6 -4.9,1.8 -11.7,0.9 -10.1,3.1 -6.8,2.7 2.5,2.2 -6.6,4.4 3.9,0.7 -5.4,4.3 1.6,2.8 -3.4,1.1 1.9,2.8 7.9,1.4 2.2,2.3 13.4,0.7 2.2,-0.4 z m 314,-24.7 -17.9,-2.6 -10.2,-0.2 -3.4,0.9 3.4,3.4 12.4,3.2 4.5,-1.2 14.2,0.2 -3,-3.7 z m 25.2,2.3 -11.7,-1.3 -8.2,-0.7 1.7,1.6 10.3,2 6.8,0.4 1.1,-2 z m -12.5,9.5 -2.5,-1.4 -8.3,-1.9 -4.1,0.5 -0.8,2 1.1,0.2 8.8,0.6 5.8,0 z m 162.6,12.3 -6,-3.6 -1.4,2.2 3.5,1.6 3.9,-0.2 z m -612.4,93.9 -0.6,-1.5 0.2,-1.7 -2.2,-0.9 -5,-1.1 -6.3,2 -0.7,2.6 5.9,0.7 8.7,-0.1 z m 589.7,21.8 -7.2,-6.2 -5.1,-6 -6.8,-5.8 -4.9,-4 -1.3,0.8 4.4,2.8 -1.9,2.8 6.8,8.3 7.8,6 6.4,8.3 2.4,4.6 5.5,6.8 3.8,6 4.6,5.2 -0.1,-4.8 6.5,3.8 -3,-4.4 -9.5,-6.3 -3.7,-9 8.9,2 -13.6,-10.9 z", + "RW": "m 1147.6,579.4 -3.3,1.9 -1.4,-0.6 -1.6,1.8 -0.2,3.8 -0.8,0.4 -0.6,3.5 3.5,0.5 1.7,-3.6 3,0.4 0,0 1.6,-0.8 0.4,-3.7 -2.3,-3.6 z", + "SA": "m 1228.7,387 -10.2,-0.5 -16.7,-12.7 -8.5,-4.5 -6.7,-1.7 -0.9,1 -10.4,3.1 6.1,6.4 -1.7,1 -0.7,2.2 -4,0.8 -1.1,2.3 -2.1,2 -6.1,-1 -0.5,2.5 0,2.2 -0.6,3.5 2.7,0 3.2,4.4 3.7,5.1 2.5,4.7 1.7,1.5 1.7,3.3 -0.2,1.4 2.1,3.7 3,1.3 2.8,2.5 3.6,7 0,3.8 0.9,4.4 4,6.1 2.5,1 4.1,4.4 1.9,5.2 3.2,5.3 3,2.3 0.6,2.5 1.8,1.9 0.9,2.8 2.3,-2.1 -0.7,-2.7 1.2,-3.1 2.4,1.7 1.5,-0.6 6.4,-0.2 1,0.7 5.4,0.6 2.1,-0.3 1.6,2.1 2.5,-1 3.5,-6.7 5,-2.9 15.7,-2.4 16.1,-6.4 2.6,-12.7 -2.9,-4.5 -1,1.3 -16.8,-3.2 -2.6,-6.4 -0.4,-1.5 -1.2,-2.4 -1.5,0.4 -1.8,-1.2 -1,-1.6 -0.9,-2.1 -1.7,-1.8 -1,-2.1 0.4,-2.1 -0.6,-2.7 -4,-2.6 -1.2,-2.3 -2.9,-1.4 -2.7,-5.5 -3.8,0.2 -1.7,-3.1 -4.9,-0.6 z", + "SB": "m 1909.1,646.4 -0.2,-0.2 -0.1,-0.4 -0.3,0 -0.3,0.1 0.2,0.6 0.2,0 0.5,-0.1 z m -35.6,0.8 -0.1,-0.2 -0.5,-0.4 -1.9,-1.3 -0.4,-0.1 -0.1,0.1 -0.1,0.3 0.1,0.2 0.5,0.1 0,0.1 0.3,0.2 0.7,0.2 0.4,0.3 0.1,0.5 0.3,0.1 0.3,0.1 0.4,-0.2 z m 32,-6.6 0,-0.1 0.2,-0.3 -0.2,-0.1 -0.5,-0.1 -0.7,0.1 -0.3,0.2 -0.2,0.3 -0.2,0 0,0.2 0.1,0.4 0.2,-0.1 0.2,0.1 0.5,-0.5 0.3,0 0.1,0 0.5,-0.1 z m -24.4,-2.3 -0.1,-0.2 -0.2,-0.1 -0.9,-0.7 -0.5,-0.2 -0.5,0 -0.1,0.5 0,0.3 0.6,0 0.4,0.2 0,0.6 0.2,0.2 0,0.5 1.2,0.9 0.7,0.4 0.7,0.1 0.4,0.2 0.5,-0.1 0.5,0.2 0.4,-0.1 -0.4,-0.3 0,-0.4 -0.5,-1.3 -0.3,-0.3 -0.5,0.1 -0.5,-0.2 -0.4,0 -0.7,-0.3 z m -0.4,-4.9 -0.6,-1.6 -0.2,-0.1 0.1,0.6 0.1,0.4 -0.1,0.5 -0.1,0.6 0.2,0.2 0.2,-0.2 0.4,0.5 0,-0.2 0,-0.7 z m -9.8,-2.2 -0.3,-0.1 -0.4,0.3 -0.1,0.3 -0.1,0.7 0,0.4 0.3,0.7 0.3,0.5 0.3,0.3 0.2,0.2 0.9,0.1 1.7,0.1 0.9,0.4 0.9,0.2 0.4,-0.1 0.5,-0.2 0.1,-0.1 -0.1,-0.6 -0.2,-0.3 -0.4,-0.2 -0.2,-0.6 -0.5,-0.4 -0.9,-0.7 -1.6,0 -0.6,0.1 -1.1,-1 z m 2.6,-1.8 -0.5,0.2 0,0.3 0.4,0.1 0.4,0.2 0.1,0.3 0,0 0.2,-0.1 0.4,0.2 0.2,-0.3 -0.4,-0.5 -0.4,-0.3 -0.1,0 -0.3,-0.1 z m -5.6,0.8 0.3,-0.2 0,-0.4 -0.3,0 -0.1,-0.2 -0.2,0 -0.3,0.2 -0.2,0.3 0.1,0.2 0.4,0 0.2,0.1 0.1,0 z m -8.4,-2.3 -0.1,-0.2 -0.3,-0.2 -0.2,0 -0.5,0.1 0.1,0.1 0.6,0.3 0.3,0.1 0.1,-0.2 z m 3.1,0.4 0.3,-0.2 -0.1,-0.2 -0.1,-0.5 -0.4,0.7 0.1,0.2 0.2,0 z m -0.5,-0.9 0,-0.2 0,-0.2 -0.2,-0.1 0.4,-0.3 -0.1,-0.1 -0.6,-0.2 -0.2,0.2 -0.2,0.1 -0.1,0.1 -0.1,0.1 -0.1,0.5 0.2,0.4 0.4,0.2 0.6,-0.5 z m -4,0.2 -0.3,-0.4 0.1,-0.5 0.2,-0.1 0.2,-0.5 -0.1,-0.4 -0.2,0.1 -0.7,0.6 -0.1,0.3 0.6,0.8 0.3,0.2 0,-0.1 z m 13,-1.3 -0.2,-0.4 0,-0.2 -0.3,-0.2 -0.2,0.1 -0.1,0.3 0.1,0.2 0.4,0.3 0.3,-0.1 z m 6,-1.2 -0.2,0 -0.1,0.1 -0.2,0 -0.3,0 -0.1,0.2 0.6,1.1 -0.3,0.5 0.4,2.2 0.4,1.2 0.8,0.8 0,0.2 0.8,0.5 0.6,1.3 0.2,0.1 0.1,-0.2 0,-0.6 -0.5,-1.1 0.1,-0.8 -0.2,-0.3 0,-0.3 -0.2,-0.8 -0.6,-0.7 -0.3,-0.1 -0.2,-0.3 0.2,-0.6 0.2,-0.2 0.1,-0.3 -1.3,-1.9 z m -16.6,-0.5 -0.6,-0.2 -0.2,-0.3 0,-1 -0.6,-0.3 -0.3,0.2 -0.6,0.7 -0.2,0.4 -0.5,0.3 -0.1,0.3 0,0.4 0.4,0.1 0.3,-0.4 0.9,-0.1 0.3,0.1 0,0.4 0.1,0.7 0.3,0.3 0.5,0.2 0.4,0.6 0.1,-0.3 0.2,0 0.2,-0.4 -0.3,-1.2 -0.3,-0.5 z m -6.5,-0.4 0.1,-0.5 -0.1,-0.9 -0.2,0.1 0,0.2 -0.1,0.4 0.2,0.8 0.1,-0.1 z m 3.2,-0.4 0.2,-0.2 0,-0.4 0,-0.5 -0.2,-0.4 -0.2,-0.2 -0.5,0.1 -0.4,0.5 0,0.5 0.4,0.6 0.6,0 0.1,0 z m -2.6,-1.2 0.2,-0.3 0.5,-0.7 0.1,-0.3 -0.5,-0.2 -0.4,-0.5 -0.4,-0.2 -0.3,0.4 0,0.4 0.5,0.6 -0.1,0.4 0.2,0.1 0.1,0.4 0.1,-0.1 z m 17.5,3.9 -0.1,-0.5 -0.3,-0.4 0.4,-0.5 -2.2,-1.9 -0.3,-0.2 -0.4,-0.1 -0.5,-0.4 -0.5,-0.1 -0.5,-0.4 -0.2,-0.3 -0.6,-0.4 -0.6,-0.8 -1.5,-0.3 0.1,0.2 0.4,0.4 0.1,0.7 0.5,0.4 0.5,0.6 0.2,0.1 0.2,0.2 0.4,0.5 0.8,0.4 0.8,0.6 0.3,0.1 0.3,0.3 1.5,0.7 0.5,0.7 0.7,0.5 0,-0.1 z m -21.8,-9.2 0.2,-0.3 -0.7,-0.5 -0.2,0.3 -0.2,0.5 0.4,0.2 0.5,-0.2 z m 9.1,1.5 -0.1,-0.1 -0.3,0 -0.4,-0.2 -0.7,-0.8 -0.2,-0.3 -0.2,-1 -0.4,-0.4 -1.4,-0.8 -0.8,-0.8 -0.7,-0.2 -0.2,0.2 0,0.5 0.2,0.3 1,0.9 1.1,1.7 1,1 0.8,0.1 0.4,0 0,0.1 0.1,0.2 0.5,0.2 0.5,-0.4 -0.2,-0.2 z", + "SC": "m 1288.5,602 -0.5,-0.8 -0.4,0.3 0.2,0.3 0.3,0.2 0.1,0.4 0.3,0.2 0,-0.6 z", + "SD": "m 1180.8,468.5 0.4,-4.2 1.6,-2 4,-1 2.6,-3.6 -3.1,-2.4 -2.2,-1.6 -2.5,-7.6 -1.1,-6.5 1.1,-1.2 -2.1,-6.2 -21.8,0 -21.4,0 -22.1,0 0.5,12.7 -6.3,0 0,2.7 1.1,25.2 -4.8,-0.4 -2.4,4.7 -1.4,3.9 1.2,1.5 -1.8,1.9 0.7,2.7 -1.4,2.6 -0.5,2.4 2,-0.4 1.2,2.5 0.1,3.7 2.1,1.8 0,1.6 0.7,2.7 3.3,4 0,2.6 -0.8,2.6 0.3,2 2,1.8 0.5,0.3 1.7,-0.7 1.9,-1.2 1.3,-5.7 1.5,-2.9 4,-0.9 1,1.8 3,3.7 1.5,0.5 2,-1.1 4.1,0.3 0.8,1.3 5.5,0 0.2,-1.3 2.9,-1.2 0.5,-1.9 2.1,-1.3 4.8,3.7 2.8,-0.7 2.7,-4.5 3,-3.5 -0.6,-3.9 -1.4,-1.8 3.4,-0.3 0.3,-1.5 2.6,0.5 -0.5,4.7 0.8,4.6 2.9,2.5 0.7,2.2 0,3.1 0.8,0.1 0,-0.7 1.4,-6.7 2.6,-1.8 0.5,-2.6 2.3,-4.8 3.2,-3.2 2.1,-6.2 0.7,-5.5 -0.7,-2.5 1.9,-9.4 z", + "SE": "m 1077.7,161.1 -1.9,-2.2 -1.7,-8.4 -7.2,-3.7 -5.9,-2.7 -2.5,0.3 0,3.5 -7.9,-0.9 -0.6,3.1 -4,-0.1 -2.2,3.9 -3.4,6.1 -5.7,7.9 1.8,1.9 -1.3,2.2 -4.3,-0.1 -2.3,5.3 1,7.6 3.1,2.9 -0.9,6.9 -3.4,4 -1.7,3.3 4.2,8.4 4.4,6.7 2,5.7 5.3,-0.3 2.2,-4.7 5.7,0.5 2,-5.5 0.6,-10 4.6,-1.3 3.3,-6.6 -4.8,-3.3 -3.6,-4 2.1,-8.1 7.7,-4.9 6.1,-4.5 -1.2,-3.5 3.4,-3.9 7,-1.5 z", + "SG": "m 1561,563.7 0.1,-0.2 -0.2,-0.2 -0.3,-0.1 -0.5,-0.2 -0.6,0.1 -0.3,0.6 0.9,0.4 0.9,-0.4 z", + "SI": "m 1059.4,277 -1.2,-2.1 -0.8,-0.1 -0.9,1.1 -4.3,0.1 -2.4,1.4 -4.2,-0.4 -0.3,3 1.4,2.7 -1.1,0.5 3.5,0.2 0.8,-1 1.8,1 2,0.1 -0.2,-1.7 1.7,-0.6 0.3,-2.5 3.9,-1.7 z", + "SK": "m 1087.4,260.9 -4.9,-2.3 -3.4,0.8 -2.4,-0.6 -2.8,1.3 -2.7,-2.2 -1.9,0.9 -0.3,-0.4 -1.5,0 -0.6,1.1 -1.1,0.3 -0.2,1.4 -0.9,0.3 -0.1,0.6 -1.6,0.6 -2.2,-0.1 -0.6,1.4 -0.3,0.8 0.7,2.1 2.6,1.6 1.9,0.7 4.1,-0.8 0.3,-1.2 1.9,-0.2 2.3,-1 0.6,0.4 2.2,-0.7 1,-1.5 1.6,-0.4 5.5,1.9 1,-0.6 0.7,-2.5 1.1,-1.7 z", + "SL": "m 919.4,518.7 -1.5,0.3 0,-2.3 -0.9,-1.7 0.2,-1.8 -1.2,-2.7 -1.5,-2.3 -4.5,0 -1.3,1.2 -1.5,0.2 -1,1.4 -0.7,1.7 -3,2.8 0.7,4.7 0.9,2.3 2.9,3.5 4.1,2.5 1.5,0.5 1.3,-2 0.3,-1.9 2.6,-3.4 2.6,-3 z", + "SN": "m 908.9,479.2 -3.6,-4.4 -3.2,-4.7 -3.7,-1.7 -2.6,-1.8 -3.1,0 -2.8,1.4 -2.7,-0.5 -2,2 -1.3,3.3 -2.8,4.4 -2.5,1.2 2.7,2.3 2.2,5 6.1,-0.2 1.3,-1.5 1.8,-0.1 2.1,1.5 1.8,0.1 1.8,-1.1 1.1,1.8 -2.4,1.5 -2.4,-0.1 -2.4,-1.4 -2.1,1.5 -1,0 -1.4,0.9 -5,-0.1 0.8,4.9 3,-1.1 1.8,0.2 1.5,-0.7 10.3,0.3 2.7,0.1 4,1.5 1.3,-0.1 0.4,-0.7 3,0.5 0.8,-0.4 0.3,-2 -0.4,-2.4 -2.1,-1.8 -1.1,-3.7 -0.2,-3.9 z", + "SO": "m 1223.4,505.7 -2.6,-2.7 -1.2,-2.6 -1.8,-1.2 -2,3.4 -1.1,2.3 2.2,3.5 2.1,3.1 2.2,2.2 18.5,7.6 4.8,-0.1 -15.4,19.1 -7.4,0.3 -4.9,4.5 -3.6,0.1 -1.5,2 -4.8,7.2 0.2,23.2 3.3,5.3 1.3,-1.5 1.3,-3.4 6.1,-7.7 5.3,-4.8 8.3,-6.4 5.6,-5.1 6.4,-8.7 4.7,-7.1 4.6,-9.3 3.2,-8.2 2.5,-7.1 1.3,-6.8 1.1,-2.3 -0.2,-3.4 0.4,-3.7 -0.2,-1.7 -2.1,0 -2.6,2.2 -2.9,0.6 -2.5,0.9 -1.8,0.2 0,0 -3.2,0.2 -1.9,1.1 -2.8,0.5 -4.8,1.9 -6.1,0.8 -5.2,1.6 -2.8,0 z", + "SR": "m 668,533.8 -4.6,0.5 -0.6,1.1 -6.7,-1.2 -1,5.7 -3.5,1.6 0.3,1.5 -1.1,3.3 2.4,4.6 1.8,0.1 0.7,3.5 3.3,5.6 3.1,0.5 0.5,-1.3 -0.9,-1.3 0.5,-1.8 2.3,0.6 2.7,-0.7 3.2,1.4 1.4,-2.7 0.6,-2.9 1,-2.8 -2.1,-3.7 -0.4,-4.4 3.1,-5.5 -6,-1.7 z", + "SS": "m 1166,508.7 -0.7,-2.2 -2.9,-2.5 -0.8,-4.6 0.5,-4.7 -2.6,-0.5 -0.3,1.5 -3.4,0.3 1.4,1.8 0.6,3.9 -3,3.5 -2.7,4.5 -2.8,0.7 -4.8,-3.7 -2.1,1.3 -0.5,1.9 -2.9,1.2 -0.2,1.3 -5.5,0 -0.8,-1.3 -4.1,-0.3 -2,1.1 -1.5,-0.5 -3,-3.7 -1,-1.8 -4,0.9 -1.5,2.9 -1.3,5.7 -1.9,1.2 -1.7,0.7 3.8,2.5 3.1,2.6 0.1,2 3.8,3.4 2.4,2.7 1.5,3.8 4.2,2.5 0.9,2.1 3.5,5.2 2.5,0.8 1.5,-1.1 2.6,0.4 3.1,-1.3 1.4,2.7 5,4.2 0,0 2.3,-1.7 3.5,1.4 4.5,-1.5 4,0.1 3.4,-3 3.4,-3.8 3.8,-4.2 -3.5,-6.9 -2.6,-1.5 -1,-2.5 -2.9,-3.1 -3.4,-0.5 1.8,-3.6 3,-0.1 0.8,-2 -0.2,-5 -0.8,-0.1 0,-3.1 z", + "ST": "m 1014.1,571.4 0.5,-0.8 0,-0.5 -0.3,-0.5 -0.4,0 -0.5,0.4 -0.3,0.4 0,0.3 0.1,0.7 0.1,0.3 0.3,0.2 0.5,-0.5 z m 4.3,-9.2 0.2,-0.4 0,-0.2 -0.1,-0.1 -0.1,-0.1 -0.2,0.1 -0.3,0.5 0.1,0.2 0.2,0.2 0.2,-0.2 z", + "SV": "m 487.2,487 0.6,-2.5 -0.7,-0.7 -1.1,-0.5 -2.5,0.8 -0.1,-0.9 -1.6,-1 -1.1,-1.3 -1.5,-0.5 -1.4,0.4 0.2,0.7 -1.1,0.7 -2.1,1.6 -0.2,1 1.4,1.3 3.1,0.4 2.2,1.3 1.9,0.6 3.3,0.1 0.7,-1.5 z", + "SX": "m 627.1,457.2 0,0 0.2,0.2 0.3,0.1 0.1,-0.1 0,-0.2 -0.6,0 z", + "SY": "m 1183.5,359.9 11,-6.7 0.9,-7.8 -1.2,-4.7 2.7,-1.6 2.1,-4.1 -5.9,1.1 -2.8,-0.2 -5.7,2.5 -4.3,0 -3,-1.2 -5.5,1.8 -1.9,-1.3 0.1,3.6 -1.2,1.5 -1.2,1.4 -1,2.6 1.1,5 2.4,0.3 1.2,2.5 -2.6,2.4 -0.9,3.5 0.3,2.6 -0.6,1 0.1,0 6.3,2.5 9.6,-6.7 z", + "SZ": "m 1150.5,736.6 -2.7,-1.2 -1.6,0.5 -0.7,1.8 -1.6,2.4 -0.1,2.2 3,3.5 3.3,-0.7 1.3,-2.8 -0.3,-2.8 -0.6,-2.9 z", + "TC": "m 578.7,433.1 -0.1,0.4 0,0.2 0.2,0.1 0.6,-0.1 0.1,-0.1 0.2,-0.1 0,-0.1 -0.4,0.1 -0.6,-0.4 z m 3.6,0.6 0.2,-0.2 -0.2,-0.2 -0.7,-0.2 -0.2,0.1 0,0.3 0.6,0 0.3,0.3 0,-0.1 z m -1.1,-0.5 -0.1,-0.1 -0.1,-0.6 -0.5,0 0,0.2 0.1,0.2 0.1,0 0.1,0.2 0.3,0.2 0.1,-0.1 z", + "TD": "m 1108.4,447.6 -22.4,-12.2 -22.3,-12.2 -5.4,3.5 1.6,9.9 2,1.6 0.2,2.1 2.3,2.2 -1.1,2.7 -1.8,12.9 -0.2,8.3 -6.9,6 -2.3,8.4 2.4,2.3 0,4.1 3.6,0.2 -0.5,2.9 2.2,4.1 0.5,4.2 -0.2,4.3 3.1,5.8 -3.1,-0.1 -1.6,0.4 -2.5,-0.6 -1.2,3 3.3,3.7 2.5,1.1 0.8,2.6 1.8,4.4 -0.9,1.7 4.7,-0.4 1,-1.7 0.9,0.2 1.4,1.4 7.1,-2.4 2.3,-2.5 2.9,-2.2 -0.6,-2.3 1.6,-0.6 5.4,0.4 5.2,-2.9 4,-7 2.8,-2.5 3.5,-1.1 0,-1.6 -2.1,-1.8 -0.1,-3.7 -1.2,-2.5 -2,0.4 0.5,-2.4 1.4,-2.6 -0.7,-2.7 1.8,-1.9 -1.2,-1.5 1.4,-3.9 2.4,-4.7 4.8,0.4 -1.1,-25.2 z", + "TG": "m 981.7,502.2 -4.9,-0.1 -0.4,1.9 2.4,3.3 -0.1,4.6 0.6,5.1 1.4,2.3 -1.2,5.7 0.4,3.2 1.5,4 1.2,2.2 4.6,-1.3 -1.4,-4.4 0.2,-14.6 -1.1,-1.3 -0.2,-3.1 -2,-2.3 -1.7,-1.9 0.7,-3.3 z", + "TH": "m 1562.7,481.4 1.5,-2.9 -0.5,-5.4 -5.2,-5.5 -1.3,-6.3 -4.9,-5.2 -4.3,-0.4 -0.8,2.2 -3.2,0.2 -1.8,-1.2 -5.3,3.8 -1,-5.7 0.4,-6.7 -3.8,-0.3 -0.9,-3.8 -2.6,-1.9 -3,1.4 -2.8,2.8 -3.9,0.3 -1.5,6.9 -2.2,1.1 3.5,5.6 4.1,4.6 2.9,4.2 -1.4,5.6 -1.7,1.1 1.7,3.2 4.2,5.1 1,3.5 0.2,3 2.8,5.8 -2.6,5.9 -2.2,6.6 -1.3,6.1 -0.3,3.9 1.2,3.6 0.7,-3.8 2.9,3.1 3.2,3.5 1.1,3.2 2.4,2.4 0.9,-1.1 4.7,2.8 0.6,3.3 3.7,-0.8 1.7,-2.6 -3.1,-3.3 -3.4,-0.8 -3.3,-3.6 -1.4,-5.5 -2.6,-5.8 -3.7,-0.2 -0.7,-4.6 1.4,-5.6 2.2,-9.3 -0.2,-7 4.9,-0.1 -0.3,5 4.7,-0.1 5.3,2.9 -2.1,-7.7 3,-5.2 7.1,-1.3 5.3,1 z", + "TJ": "m 1344.1,315.7 -2.1,0.2 -1.3,-1.8 0.2,-2.9 -6.4,1.5 -0.5,4 -1.5,3.5 -4.4,-0.3 -0.6,2.8 4.2,1.6 2.4,4.7 -1.3,6.6 1.8,0.8 3.3,-2.1 2.1,1.3 0.9,-3 3.2,0.1 0.6,-0.9 -0.2,-2.6 1.7,-2.3 3.2,1.5 0,2 1.6,0.3 1,5.4 2.6,2.1 1.5,-1.3 2.1,-0.7 2.5,-2.9 3.8,0.5 5.4,0 -1.8,-3.7 -0.6,-2.5 -3.5,-1.4 -1.6,0.6 -3,-5.9 -9.5,0.9 -7.1,-2 -5.4,0.5 -0.6,-3.7 5.9,1.1 1.4,-2 z", + "TL": "m 1676.8,631.9 4.9,-1.8 6,-2.8 2.2,-1.7 -2,-0.8 -1.8,0.8 -4,0.2 -4.9,1.4 -0.8,1.5 0.5,1.3 -0.1,1.9 z", + "TM": "m 1325.6,334.2 -0.8,-4 -7.7,-2.7 -6.2,-3.2 -4.2,-3 -7,-4.4 -4.3,-6.4 -2,-1.2 -5.5,0.3 -2.3,-1.3 -1.9,-4.9 -7.8,-3.3 -3.3,3.6 -3.8,2.2 1.6,3.1 -5.8,0.1 -2.5,0.3 -4.9,-4.9 -3.8,-1.7 -5.5,1.3 -1.8,2 2.5,4 -0.5,-4.5 3.7,-1.6 2.4,3.6 4.6,3.7 -4,2 -5.3,-1.5 0.1,5.2 3.5,0.4 -0.4,4.4 4.5,2.1 0.7,6.8 1.8,4.5 4.4,-1.2 3,-3.7 3.5,0.2 2.1,-1.2 3.8,0.6 6.5,3.3 4.3,0.7 7.3,5.7 3.9,0.2 1.6,5.5 5.9,2.4 3.9,-0.8 0.4,-3 4,-0.9 2.5,-2 -0.1,-5.2 4.1,-1.2 0.3,-2.3 2.9,1.7 1.6,0.2 z", + "TN": "m 1038,361.4 -2,-1 -1.5,-3 -2.8,-0.1 -1.1,-3.5 3.4,-3.2 0.5,-5.6 -1.9,-1.6 -0.1,-3 2.5,-3.2 -0.4,-1.3 -4.4,2.4 0.1,-3.3 -3.7,-0.7 -5.6,2.6 -1,3.3 1,6.2 -1.1,5.3 -3.2,3.6 0.6,4.8 4.5,3.8 0,1.5 3.4,2.6 2.6,11.3 2.6,-1.4 0.4,-2.7 -0.7,-2.6 3.7,-2.5 1.5,-2 2.6,-1.8 0.1,-4.9 z", + "TO": "m 13.3,707.7 0,0 -0.2,0.3 0,0.2 0.4,0.4 -0.2,-0.9 z m -1.6,-0.9 -0.2,0 0.2,-0.1 -0.4,-0.2 -0.4,0 -0.2,-0.1 0,-0.2 -0.2,0.3 0.2,0.3 0.9,0.4 0.3,0.2 0.2,-0.6 0,-0.2 -0.3,0.1 0,0.1 -0.1,0 z m 2.5,-16 0.1,-0.2 0,-0.2 -0.3,-0.1 -0.1,0 -0.3,0.5 0.1,0.1 0.3,0.2 0.1,0 0.1,-0.3 z", + "TR": "m 1166.6,308.9 -9.7,-4.4 -8.5,0.2 -5.7,1.7 -5.6,4 -9.9,-0.8 -1.6,4.8 -7.9,0.2 -5.1,6.1 3.6,3 -2,5 4.2,3.6 3.7,6.4 5.8,-0.1 5.4,3.5 3.6,-0.8 0.9,-2.7 5.7,0.2 4.6,3.5 8,-0.7 3.1,-3.7 4.6,1.5 3.2,-0.6 -1.7,2.4 2.3,3 1.2,-1.4 1.2,-1.5 -0.1,-3.6 1.9,1.3 5.5,-1.8 3,1.2 4.3,0 5.7,-2.5 2.8,0.2 5.9,-1.1 2.1,-1 6.2,0.9 2.1,1.6 2.3,-1.1 0,0 -3.7,-5.2 0.7,-2 -2.9,-7.3 3.3,-1.8 -2.4,-1.9 -4.2,-1.5 0,-3.1 -1.3,-2.2 -5.6,-3 -5.4,0.3 -5.5,3.2 -4.5,-0.6 -5.8,1 -7.8,-2.4 z m -49.6,4 2,-1.9 6.1,-0.4 0.7,-1.5 -4.7,-2 -0.9,-2.4 -4.5,-0.8 -5,2 2.7,1.6 -1.2,3.9 -1.1,0.7 0.1,1.3 1.9,2.9 3.9,-3.4 z", + "TT": "m 635.4,507.7 0.1,-0.2 0,-0.6 0.2,-0.4 -0.2,-0.4 -0.1,-0.6 0.1,-0.5 0,-0.7 0.2,-0.3 0.5,-0.8 -0.9,0 -0.6,0.2 -1.1,0.1 -0.5,0.2 -0.7,0.1 -0.4,0.2 0.1,0.1 0.5,0.2 0.2,0.2 0.1,0.2 0.1,0.4 -0.3,1.7 -0.1,0.1 -0.6,0.1 -0.2,0.3 -1.4,0.8 0.8,-0.1 0.9,0.1 2.4,-0.1 0.9,-0.3 z m 1.8,-6.7 1.2,-0.5 0.1,-0.4 -0.2,0 -0.8,0.3 -0.6,0.5 0,0.2 0.3,-0.1 z", + "TW": "m 1642.3,427.2 1.2,-10.2 0.1,-3.9 -2.9,-1.9 -3.3,4.8 -1.9,6.3 1.5,4.7 4,5.4 1.3,-5.2 z", + "TZ": "m 1149.6,578.6 -2,0.8 2.3,3.6 -0.4,3.7 -1.6,0.8 0,0 0.3,2.5 1.2,1.5 0,2 -1.4,1.4 -2.2,3.3 -2.1,2.3 -0.6,0.1 -0.3,2.7 1.1,0.9 -0.2,2.7 1,2.6 -1.3,2.4 4.5,4.3 0.3,3.9 2.7,6.5 0,0 0.3,0.2 2.2,1.1 3.5,1.1 3.2,1.9 5.4,1.2 1.1,1.7 0,0 0.4,-1.2 2.8,3.4 0.3,6.7 1.8,2.4 0,0.1 2.1,-0.3 6.7,1.8 1.4,-0.8 3.9,-0.1 2.1,-1.9 3.3,0.1 6.2,-2.5 4.6,-3.7 0,0 -2,-1.4 -2.2,-6.3 -1.8,-3.9 0.4,-3.1 -0.3,-1.9 1.7,-3.9 -0.2,-1.6 -3.5,-2.3 -0.3,-3.6 2.8,-7.9 -8,-6.3 -0.4,-3.7 -20.2,-13 0,0 -2.8,2.8 -1.9,2.9 2.2,2.2 -3.2,1.6 -0.7,-0.8 -3.2,0.4 -2.5,1.4 -1.6,-2.4 1.1,-4.5 0.2,-3.8 0,0 0,0 -6.2,-0.1 z", + "UA": "m 1138.5,241 -4.8,0.5 -1.5,-0.3 -1,1.4 -1.8,-0.2 0,0 -4.1,0.3 -1.2,1.4 0.2,3.1 -2,-0.6 -4.3,0.3 -1.5,-1.5 -1.6,1.1 -2,-0.9 -3.8,-0.1 -5.6,-1.5 -5,-0.5 -3.7,0.2 -2.4,1.6 -2.2,0.3 3.1,5.3 -0.3,1.8 -2.3,0.7 -3.8,5.1 1.6,2.8 -1.1,-0.4 -1.1,1.7 -0.7,2.5 2.9,1.7 0.6,1.6 1.9,-1.3 3.2,0.7 3.2,0 2.4,1.5 1.6,-0.9 3.6,-0.6 1,-1.5 2.1,0 1.1,-0.9 3.2,-0.6 3.9,1.9 2,0.3 2.5,1.6 0,2.1 1.9,1.1 1.1,2.6 2,1.5 -0.2,1 1,0.6 -1.2,0.5 -3,-0.2 -0.6,-0.9 -1,0.5 0.5,1.1 -1.1,2 -0.5,2.1 -1.2,0.7 2.4,1.1 2.2,-1 2.4,1.1 3.3,-4.6 1.3,-3.4 4.5,-0.8 0.7,2.4 8,1.5 1.7,1.4 -4.5,2.1 -0.7,1.2 5.8,1.8 -0.6,2.9 3,1.3 6.3,-3.6 5.3,-1.1 0.6,-2.2 -5.1,0.4 -2.7,-1.5 -1,-3.9 3.9,-2.3 4.6,-0.3 3,-2 3.9,-0.5 -0.4,-2.8 2.2,-1.7 4.7,-0.5 0.3,-2.1 -1.8,-3.4 1.3,-3.2 -0.4,-1.9 -7.6,-2 -2.9,0.1 -3.6,-2.9 -3.5,1 -6.6,-2.2 -0.2,-1.2 -2.2,-2.7 -4,-0.2 -0.7,-1.9 0.9,-1.3 -3.8,-3.4 z", + "UG": "m 1167.6,545.1 -3.4,3 -4,-0.1 -4.5,1.5 -3.5,-1.4 -2.3,1.7 0,0 -0.3,7.5 2.3,0.8 -1.8,2.3 -2.2,1.7 -2.1,3.3 -1.2,3 -0.3,5.1 -1.3,2.4 -0.1,4.8 1.4,0.6 3.3,-1.9 2,-0.8 6.2,0.1 0,0 -0.3,-2.5 2.6,-3.7 3.5,-0.9 2.4,-1.5 2.9,1.2 0.3,0.5 0,-0.3 1.6,-2.6 2.7,-4.2 2.1,-4.7 -2.6,-7.3 -0.7,-3.2 -2.7,-4.4 z", + "US": "m 116.7,450.7 2,-0.9 2.5,-1.4 0.2,-0.4 -0.9,-2.2 -0.7,-0.8 -0.8,-0.6 -1.9,-1.1 -0.4,-0.1 -0.4,0.6 0,1.3 -1.2,1 -0.4,0.7 0.4,2.3 -0.6,1.8 1.2,0.9 1,-1.1 z m -0.6,-9.9 0.6,-0.7 -1.2,-1 -1.8,-0.6 -0.7,0.5 0,0.4 0.5,0.5 0.6,1.4 2,-0.5 z m -3,-3.4 -2.6,-0.2 -0.6,0.7 2.9,0.2 0.3,-0.7 z m -4.7,-0.9 -1.1,-2.1 -0.3,-0.4 -1.7,0.9 0.1,0.2 0.4,1.5 1.8,0.2 0.4,0.1 0.4,-0.4 z m -8.3,-4.2 0.3,-1.5 -1.3,-0.1 -1,0.6 -0.4,0.5 1.6,1.1 0.8,-0.6 z m 412.1,-173.2 -1.6,0 -1.3,2.4 -10.1,0 -16.8,0 -16.7,0 -14.8,0 -14.7,0 -14.5,0 -15,0 -4.8,0 -14.6,0 -13.9,0 -1.6,5.1 -2.4,5.1 -2.3,1.6 1.1,-5.9 -5.8,-2.1 -1.4,1.2 -0.4,2.9 -1.8,5.4 -4.2,8.3 -4,5.6 -4,5.6 -5.4,5.8 -1.1,4.7 -2.8,5.3 -3.9,5.2 1,3.4 -1.9,5.2 1.5,5.4 1.3,2.2 -0.8,1.5 0.4,9 2.5,6.5 -0.8,3.5 1,1 4.6,0.7 1.3,1.7 2.8,0.3 -0.1,1.9 2.2,0.7 2.1,3.7 -0.3,3.2 6.3,-0.5 7,-0.7 -1,1.3 7.1,3.1 10.7,4.4 10.7,0 4.3,0 0.8,-2.6 9.3,0 1.3,2.2 2.1,2 2.4,2.8 0.8,3.3 0.4,3.5 2.2,1.9 4,1.9 4.8,-5 4.4,-0.1 3.1,2.5 1.6,4.4 1,3.7 2.4,3.6 0.2,4.5 0.8,3 3.9,2 3.6,1.4 2.1,-0.2 -0.6,-2.2 0.4,-3.1 1,-4.4 1.9,-2.8 3.7,-3.1 6,-2.7 6.1,-4.7 4.9,-1.5 3.5,-0.4 3.5,1.4 4.9,-0.8 3.3,3.4 3.8,0.2 2.4,-1.2 1.7,0.9 1.3,-0.8 -0.9,-1.3 0.7,-2.5 -0.5,-1.7 2.4,-1 4.2,-0.4 4.7,0.7 6.2,-0.8 3,1.5 2,3 0.9,0.3 6.1,-2.9 1.9,1 3,5.3 0.8,3.5 -2,4.2 0.4,2.5 1.6,4.9 2,5.5 1.8,1.4 0.4,2.8 2.6,0.8 1.7,-0.8 2,-3.9 0.7,-2.5 0.9,-4.3 -1.2,-7.4 0.5,-2.7 -1.5,-4.5 -0.7,-5.4 0.1,-4.4 1.8,-4.5 3.5,-3.8 3.7,-3 6.9,-4.1 1.3,-2.2 3.3,-2.3 2.8,-0.4 4.4,-3.8 6,-1.9 4.6,-4.8 0.9,-6.5 0.1,-2.2 -1.4,-0.4 1.5,-6.2 -3,-2.1 3.2,1 0,-4.1 1.9,-2.7 -1,5.3 2,2.5 -2.9,4.4 0.4,0.2 4.4,-5.1 2.4,-2.5 0.6,-2.5 -0.9,-1.1 -0.1,-3.5 1.2,1.6 1.1,0.4 -0.1,1.6 5.2,-4.9 2.5,-4.5 -1.4,-0.3 2.1,-1.8 -0.4,0.8 3.3,0 7.8,-1.9 -1.1,-1.2 -7.9,1.2 4.8,-1.8 3.1,-0.3 2.4,-0.3 4.1,-1.1 2.4,0.1 3.8,-1 1,-1.7 -1.1,-1.4 -0.2,2.2 -2.1,-0.1 -0.6,-3.3 1.1,-3.3 1.4,-1.3 3.9,-3.7 5.9,-1.8 6,-2.1 6.3,-3 -0.2,-2 -2.1,-3.5 2.8,-8.5 -1.5,-1.8 -3.7,1.1 -1.1,-1.7 -5.5,4.7 -3.2,4.9 -2.7,2.8 -2.5,0.9 -1.7,0.3 -1,1.6 -9.3,0 -7.7,0 -2.7,1.2 -6.7,4.2 0.2,0.9 -0.6,2.4 -4.6,2 -3.9,-0.5 -4,-0.2 -2.6,0.7 -0.3,1.8 0,0 -0.1,0.6 -5.8,3.7 -4.5,1.8 -2.9,0.8 -3.7,1.7 -4,0.9 -2.5,-0.3 -2.7,-1.3 2.7,-2.4 0,0 2,-2.2 3.7,-3.4 0,0 0,0 0.7,-2.5 0.5,-3.5 -1.6,-0.7 -4.3,2.8 -0.9,-0.1 0.3,-1.5 3.8,-2.5 1.6,-2.8 0.7,-2.8 -2.7,-2.4 -3.7,-1.3 -1.7,2.4 -1.4,0.6 -2.2,3.1 0.4,-2.1 -2.6,1.5 -2.1,2 -2.6,3.1 -1.3,2.6 0.1,3.8 -1.8,4 -3.3,3 -1.4,0.9 -1.6,0.7 -1.8,0 -0.3,-0.4 -0.1,-3.3 0.7,-1.6 0.7,-1.5 0.6,-3 2.5,-3.5 2.9,-4.3 4.6,-4.7 -0.7,0 -5.4,4 -0.4,-0.7 2.9,-2.3 4.7,-4 3.7,-0.5 4.4,-1.3 3.7,0.7 0.1,0 4.7,-0.5 -1.5,-2.5 0,0 -1.2,-0.2 0,0 0,0 -1.4,-0.3 -0.4,-1.7 -5.1,0.5 -5,1.4 -2.5,-2.3 -2.5,-0.8 3.1,-3.3 -5.3,2 -4.9,2.1 -4.6,1.5 -2.1,-2.1 -5.5,1.3 0.4,-0.9 4.6,-2.6 4.7,-2.5 5.9,-2.1 0,0 0,0 -5.3,-1.6 -4.4,0.8 -3.8,-1.9 -4.6,-1 -3.2,-0.4 -1,-1 0.8,-3.4 z m -240.6,-46.9 6.9,-2.8 0,-1.8 -2.6,-0.4 -3.4,0.9 -6.4,2.1 -2.2,2.7 0.7,1.6 7,-2.3 z m -38.7,-16.4 2.3,-2.3 -2.9,-0.5 -5.7,1 0.8,1.6 1.6,1.1 3.9,-0.9 z m 1.2,-22.3 -3.1,2.2 0.4,0.5 4.2,-0.4 0.3,1.1 1.7,1.2 4.9,-1.2 1.2,-0.6 -3.3,-0.8 -1.6,-1.5 -3.4,0.6 -1.3,-1.1 z m 124.9,-40.2 -4.4,-1.1 -10.2,2.8 -3.2,-0.3 -11,2.3 -4.8,0.6 -7.8,2.5 -4.8,2.6 -8.6,2.5 -7.6,0.1 -6.3,2.9 3.2,1.7 0.7,2.3 -0.8,2.7 2.3,2.1 -1.2,3.5 -9.2,0.2 4.3,-2.8 -3.4,0 -13.1,2.7 -9.1,2.3 1,3.3 -1.2,2.2 4.5,1.4 6.9,-0.7 1.8,1.3 2.9,-1.3 6.1,-1.2 2.7,0 -5.9,2.1 1.1,1 -2.5,2.6 -5.5,1.8 -2.5,-0.5 -7,2.7 -1.8,-0.9 -4.1,0.4 -5.3,3 -7.6,3.1 -5.8,3.4 0.3,2.4 -4,3.3 1.4,1.4 0.5,2.7 7.2,-1.1 0.4,2.1 -3.3,2.1 -3.6,3.5 2.8,0 7.2,-2.3 -1.6,2.9 3.6,-2.1 -0.4,3 4.8,-2.2 0.4,1.1 7.2,-1.8 -6.2,3.4 -5.7,4.5 -5.7,2.1 -2.3,1.2 -10.3,3.6 -4.9,2.4 -6.5,0.7 -8.5,3.3 -6.6,1.8 -8.1,2.8 -0.4,1 10,-1.7 6,-2 6.9,-2 6.1,-1.7 2.8,0.5 8.1,-2.6 4.5,-2.8 10.5,-3.1 3.9,-2.6 6.6,-1.8 7.6,-2.5 8.9,-4.2 -0.2,-2.9 11.1,-4.1 7.4,-3.9 9.2,-3.2 -0.4,1.4 -6.7,1.8 -8.3,5.7 -3.2,3.5 6.4,-1.3 6.1,-1.9 6.5,-1.3 2.9,-0.3 3.5,-4.1 6.3,-1.2 2.6,2.5 6,2.7 6.7,-0.5 5.7,2 3.2,1.1 3.3,6.1 3.7,1.7 7.1,0.2 4.1,0.4 -2.7,5.5 1.6,4.9 -3.3,5.2 2.5,1.9 0.6,2.2 0,0 5.1,-2.9 3.1,-3.7 -4.6,-3.8 1.5,-6.8 1.1,-4.2 -1.7,-2.7 -0.7,-2.4 0.5,-3 -6.4,1.9 -7.6,3.3 -0.2,-3.9 -0.6,-2.6 -2.7,-1.6 -4.2,-0.1 35.4,-32.4 24.3,-20.2 0,0 0,0 -3.5,-0.7 -4.1,-1.6 -6.5,0.8 -2.2,-0.7 -7.1,-0.5 -6.2,-1.6 -4.8,0.5 -4.9,-0.9 2,-1.2 -6.3,-0.3 -3.3,1 0.5,-2.4 z", + "UY": "m 692.5,787 -2.1,-3.7 1.9,-3 -3.8,-4.3 -4.8,-3.5 -6.2,-4.1 -1.9,0.2 -6.2,-4.9 -3.4,0.7 -0.5,5.1 -0.3,6.5 1.1,6.3 -0.9,1.4 0.4,4.2 3.9,3.5 3.6,-0.2 5.4,2.7 2.7,-0.6 4.2,1.2 5.3,-3.5 1.6,-4 z", + "UZ": "m 1339.8,303.1 -2.5,1.2 -5.4,4.3 -0.9,4.5 -1.9,0 -2.3,-3 -6.6,-0.2 -2.6,-5 -2.5,-0.1 -1.5,-6.2 -7.5,-4.5 -8.6,0.5 -5.7,0.9 -6.5,-5.5 -4.8,-2.3 -9.1,-4.5 -1.1,-0.5 -11.9,3.6 6.2,22.8 5.8,-0.1 -1.6,-3.1 3.8,-2.2 3.3,-3.6 7.8,3.3 1.9,4.9 2.3,1.3 5.5,-0.3 2,1.2 4.3,6.4 7,4.4 4.2,3 6.2,3.2 7.7,2.7 0.8,4 2.9,0 4.3,1.4 1.3,-6.6 -2.4,-4.7 -4.2,-1.6 0.6,-2.8 4.4,0.3 1.5,-3.5 0.5,-4 6.4,-1.5 -0.2,2.9 1.3,1.8 2.1,-0.2 4.1,0.6 5.2,-4.5 -7.1,-3.3 -3.2,1.6 -4.6,-2.3 3.1,-4.1 -1.8,-0.6 z", + "VC": "m 634.5,491.4 0,0 0,-0.1 0.1,0 0,-0.1 0,0 0,-0.1 -0.1,0 0,0.1 0,0 0,0.1 -0.1,0 0,0.1 0,0 0,0 0.1,0 z m 0.7,-1.9 0.1,-0.2 0.1,-0.1 0,0 0,0 -0.1,-0.1 0,0 0,0.1 -0.2,0.1 0,0 0,0.1 0,0 0,0.1 -0.1,0 -0.1,0 0,0 0.1,0 0,0 0.1,0.1 0,0 0,0 0,0 0.1,-0.1 z m 0.3,-1.1 0.3,-0.2 0.1,-0.6 -0.1,-0.4 -0.2,0 -0.3,0.1 -0.2,0.3 -0.1,0.5 0.4,0.4 0.1,-0.1 z", + "VE": "m 642,518.9 -2.2,-1.5 -2.9,0.2 -0.7,-5.1 -4.1,-3.2 -4.4,-0.4 -1.8,-3 4.8,-1.9 -6.7,0.1 -6.9,0.4 -0.2,1.6 -3.2,1.9 -4.2,-0.7 -3.1,-2.9 -6,0.7 -5,-0.1 -0.1,-2.1 -3.5,-3.5 -3.9,-0.1 -1.7,-4.5 -2.1,2 0.6,3 -7.1,2.6 0,4.8 1.6,2.2 -1.5,4.6 -2.4,0.4 -1.9,-5 2.7,-3.7 0.3,-3.3 -1.7,-2.9 3.3,-0.8 0.3,-1.5 -3.7,1.1 -1.6,3.2 -2.2,1.8 -1.8,2.4 -0.9,4.5 -1.8,3.7 2.9,0.5 0.6,2.9 1.1,1.4 0.4,2.5 -0.8,2.4 0.2,1.3 1.3,0.6 1.3,2.2 7.2,-0.6 3.2,0.8 3.8,5.5 2.3,-0.7 4,0.3 3.2,-0.7 2,1.1 -1.2,3.4 -1.3,2.1 -0.5,4.6 1,4.2 1.5,1.9 0.2,1.5 -2.9,3.1 2,1.4 1.4,2.2 1.7,6.4 3,3.4 4.4,-0.5 1.1,-1.9 4.2,-1.5 2.3,-1 0.7,-2.7 4.1,-1.8 -0.3,-1.4 -4.8,-0.5 -0.7,-4 0.3,-4.3 -2.4,-1.6 1,-0.6 4.2,0.8 4.4,1.6 1.7,-1.5 4,-1 6.4,-2.4 2.1,-2.4 -0.7,-1.8 -3.7,-4.8 1.6,-1.8 0,-2.9 3.4,-1.1 1.5,-1.2 -1.9,-2.3 0.6,-2.3 4.6,-3.8 z", + "VG": "m 619.2,455.1 0.3,-0.2 -0.2,-0.1 -0.4,0 -0.3,0.2 0.1,0.1 0.5,0 z m 1.1,-0.4 0.4,-0.4 -0.5,0.1 -0.2,0.2 0.1,0.1 0.1,0 0.1,0 z m 0.8,-1.8 -0.2,0 -0.5,0 0,0 0.1,0.1 0.3,0 0.3,0.1 0,0 0,-0.2 z", + "VI": "m 617.9,458.9 -0.7,0.2 -0.1,0.4 1.1,0 0.7,-0.3 -0.6,0 -0.4,-0.3 z m 0.9,-3.5 -0.5,-0.1 -0.2,0.2 0,0 0.3,0.1 0.4,-0.2 z m -1.1,0.1 -0.2,-0.2 -0.3,-0.1 -0.4,0.1 0.5,0.3 0.4,-0.1 z", + "VN": "m 1571.6,435 -5.9,-1.6 -3,-2.6 0.2,-3.7 -5.2,-1.1 -3,-2.4 -4.1,3.4 -5.3,0.7 -4.3,0 -2.7,1.5 4,5.1 3.4,5.7 6.8,0.1 3,5.5 -3.3,1.7 -1.3,2.3 7.3,3.8 5.7,7.5 4.3,5.6 4.8,4.4 2,4.5 -0.2,6.4 1.8,4.2 0.1,7.7 -8.9,4.9 2.8,3.8 -5.8,0.5 -4.7,2.5 4.5,3.7 -1.3,4.3 2.3,4 6.6,-5.9 4.1,-5.3 6.1,-4.1 4.3,-4.2 -0.4,-11.2 -4,-11.7 -4.1,-5.1 -5.6,-4 -6.4,-8.3 -5.3,-6.7 0.5,-4.4 3.7,-6 6.5,-5.5 z", + "VU": "m 1908.6,676.9 -2.7,-3.6 -0.6,1.7 1.3,2.8 2,-0.9 z m -2,-9.7 -2.3,-2 -0.9,4.9 0.5,1.8 1.2,-0.4 1.3,0.8 0.2,-5.1 z", + "YE": "m 1271.5,466.2 -2.1,-4.4 -5.2,-10.5 -15.7,2.4 -5,2.9 -3.5,6.7 -2.5,1 -1.6,-2.1 -2.1,0.3 -5.4,-0.6 -1,-0.7 -6.4,0.2 -1.5,0.6 -2.4,-1.7 -1.2,3.1 0.7,2.7 -2.3,2.1 0.4,2.7 -0.6,1.3 0.7,2.9 -1.1,0.3 1.7,2.6 1.3,4.7 1,1.9 0,3.4 1.6,3.8 3.9,0.3 1.8,-0.9 2.7,0.2 0.8,-1.7 1.5,-0.4 1.1,-1.7 1.4,-0.4 4.7,-0.3 3.5,-1.2 3.1,-2.7 1.7,0.4 2.4,-0.3 4.7,-4.5 8.8,-3 5.3,-2.7 0,-2.1 0.9,-2.9 3.9,-1.7 z", + "YT": "m 1228.7,654.7 0,-0.3 0.2,-0.5 0,-0.1 0.1,-0.5 -0.3,-0.3 -0.2,0 -0.2,-0.3 -0.3,0.3 0.3,0.5 -0.1,0.3 -0.1,0.4 0.1,0.4 0.2,0.2 0.3,-0.1 z", + "ZA": "m 1148.2,713.7 -2.9,-0.6 -1.9,0.8 -2.6,-1.1 -2.2,-0.1 -8,4.7 -5.2,4.7 -2,4.3 -1.7,2.4 -3,0.5 -1.2,3 -0.6,2 -3.6,1.5 -4.4,-0.3 -2.5,-1.8 -2.3,-0.8 -2.7,1.5 -1.5,3.1 -2.7,1.9 -2.8,2.8 -4,0.7 -1.1,-2.3 0.7,-3.8 -3,-6.1 -1.4,-1 -1.1,23.6 -5,3.2 -2.9,0.5 -3.3,-1.2 -2.4,-0.5 -0.8,-2.7 -2.1,-1.8 -2.7,3.2 3.5,8.2 0,0.1 2.5,5.3 3.2,6 -0.2,4.8 -1.7,1.2 1.4,4.2 -0.2,3.8 0.6,1.7 0.3,-0.9 2.1,2.9 1.8,0.1 2.1,2.3 2.4,-0.2 3.5,-2.4 4.6,-1 5.6,-2.5 2.2,0.3 3.3,-0.8 5.7,1.2 2.7,-1.2 3.2,1 0.8,-1.8 2.7,-0.3 5.8,-2.5 4.3,-2.9 4.1,-3.8 6.7,-6.5 3.4,-4.6 1.8,-3.2 2.5,-3.3 1.2,-0.9 3.9,-3.2 1.6,-2.9 1.1,-5.2 1.7,-4.7 -4.1,0 -1.3,2.8 -3.3,0.7 -3,-3.5 0.1,-2.2 1.6,-2.4 0.7,-1.8 1.6,-0.5 2.7,1.2 -0.4,-2.3 1.4,-7.1 -1.1,-4.5 -2.2,-9 z m -20.1,52.8 -2,0.6 -3.7,-4.9 3.2,-4 3.1,-2.5 2.6,-1.3 2.3,2 1.7,1.9 -1.9,3.1 -1.1,2.1 -3.1,1 -1.1,2 z", + "ZM": "m 1149.2,626.7 -1.9,-0.5 0.4,-1.3 -1,-0.3 -7.5,1.1 -1.6,0.7 -1.6,4.1 1.2,2.8 -1.2,7.5 -0.8,6.4 1.4,1.1 3.9,2.5 1.5,-1.2 0.3,6.9 -4.3,0 -2.1,-3.5 -2,-2.8 -4.3,-0.8 -1.2,-3.4 -3.4,2 -4.5,-0.9 -1.8,-2.8 -3.5,-0.6 -2.6,0.1 -0.3,-2 -1.9,-0.1 0.5,2 -0.7,3 0.9,3 -0.9,2.4 0.5,2.2 -11.6,-0.1 -0.8,20.3 3.6,5.2 3.5,4 4.6,-1.5 3.6,0.4 2.1,1.4 0,0.5 1,0.5 6.2,0.7 1.7,0.7 1.9,-0.1 3.2,-4.1 5.1,-5.3 2,-0.5 0.7,-2.2 3.3,-2.5 4.2,-0.9 -0.3,-4.5 17.1,-5.2 -2.9,-1.7 1.9,-5.9 1.8,-2.2 -0.9,-5.3 1.2,-5.1 1,-1.8 -1.2,-5.4 -2.6,-2.8 -3.2,-1.9 -3.5,-1.1 -2.2,-1.1 -0.3,-0.2 0,0 0.5,1.1 -1,0.4 -1.2,-1.4 z", + "ZW": "m 1148.2,713.7 6.2,-7.2 1.6,-4.6 0.9,-0.6 0.8,-3.7 -0.8,-1.9 0.5,-4.7 1.3,-4.4 0.3,-8.1 -2.8,-2 -2.6,-0.5 -1.1,-1.6 -2.6,-1.3 -4.6,0.1 -0.3,-2.4 -4.2,0.9 -3.3,2.5 -0.7,2.2 -2,0.5 -5.1,5.3 -3.2,4.1 -1.9,0.1 -1.7,-0.7 -6.2,-0.7 1.9,5.1 1.1,1.1 1.6,3.7 6,7 2.3,0.7 -0.1,2.2 1.5,4.1 4.2,0.9 3.4,2.9 2.2,0.1 2.6,1.1 1.9,-0.8 2.9,0.6 z", +} + +export const PROXY_LOCATIONS = [ + { code: "US", name: "United States", value: "RESIDENTIAL", timezone: "America/New_York", flag: "🇺🇸" }, + { code: "US_ISP", name: "United States (ISP)", value: "RESIDENTIAL_ISP", timezone: "America/New_York", flag: "🇺🇸" }, + { code: "CA", name: "Canada", value: "RESIDENTIAL_CA", timezone: "America/Toronto", flag: "🇨🇦" }, + { code: "MX", name: "Mexico", value: "RESIDENTIAL_MX", timezone: "America/Mexico_City", flag: "🇲🇽" }, + { code: "AR", name: "Argentina", value: "RESIDENTIAL_AR", timezone: "America/Argentina/Buenos_Aires", flag: "🇦🇷" }, + { code: "BR", name: "Brazil", value: "RESIDENTIAL_BR", timezone: "America/Sao_Paulo", flag: "🇧🇷" }, + { code: "GB", name: "United Kingdom", value: "RESIDENTIAL_GB", timezone: "Europe/London", flag: "🇬🇧" }, + { code: "IE", name: "Ireland", value: "RESIDENTIAL_IE", timezone: "Europe/Dublin", flag: "🇮🇪" }, + { code: "NL", name: "Netherlands", value: "RESIDENTIAL_NL", timezone: "Europe/Amsterdam", flag: "🇳🇱" }, + { code: "DE", name: "Germany", value: "RESIDENTIAL_DE", timezone: "Europe/Berlin", flag: "🇩🇪" }, + { code: "FR", name: "France", value: "RESIDENTIAL_FR", timezone: "Europe/Paris", flag: "🇫🇷" }, + { code: "ES", name: "Spain", value: "RESIDENTIAL_ES", timezone: "Europe/Madrid", flag: "🇪🇸" }, + { code: "IT", name: "Italy", value: "RESIDENTIAL_IT", timezone: "Europe/Rome", flag: "🇮🇹" }, + { code: "TR", name: "Türkiye", value: "RESIDENTIAL_TR", timezone: "Europe/Istanbul", flag: "🇹🇷" }, + { code: "ZA", name: "South Africa", value: "RESIDENTIAL_ZA", timezone: "Africa/Johannesburg", flag: "🇿🇦" }, + { code: "IN", name: "India", value: "RESIDENTIAL_IN", timezone: "Asia/Kolkata", flag: "🇮🇳" }, + { code: "PH", name: "Philippines", value: "RESIDENTIAL_PH", timezone: "Asia/Manila", flag: "🇵🇭" }, + { code: "JP", name: "Japan", value: "RESIDENTIAL_JP", timezone: "Asia/Tokyo", flag: "🇯🇵" }, + { code: "AU", name: "Australia", value: "RESIDENTIAL_AU", timezone: "Australia/Sydney", flag: "🇦🇺" }, + { code: "NZ", name: "New Zealand", value: "RESIDENTIAL_NZ", timezone: "Pacific/Auckland", flag: "🇳🇿" }, + { code: "NONE", name: "No Proxy", value: "NONE", timezone: "—", flag: "🚫" }, +] + +export const AVAILABLE_COUNTRIES = ["US", "CA", "MX", "AR", "BR", "GB", "IE", "NL", "DE", "FR", "ES", "IT", "TR", "ZA", "IN", "PH", "JP", "AU", "NZ"] + +export const ProxyMapSelector = () => { + const [selected, setSelected] = useState("US") + const [hoveredCountry, setHoveredCountry] = useState(null) + const [outputFormat, setOutputFormat] = useState("python") + const [copied, setCopied] = useState(false) + + const selectedLocation = PROXY_LOCATIONS.find(l => l.code === selected) + + const getCountryFill = (countryCode) => { + const isSelected = selected === countryCode || (selected === "US_ISP" && countryCode === "US") + const isAvailable = AVAILABLE_COUNTRIES.includes(countryCode) + const isHovered = hoveredCountry === countryCode + if (isSelected) return "#6366f1" + if (isHovered && isAvailable) return "#34d399" + if (isAvailable) return "#10b981" + return "#e5e7eb" + } + + const handleCountryClick = (countryCode) => { + if (AVAILABLE_COUNTRIES.includes(countryCode)) { + setSelected(countryCode) + } + } + + const getCodeSnippet = () => { + if (!selectedLocation) return "" + if (outputFormat === "python") return 'proxy_location="' + selectedLocation.value + '"' + if (outputFormat === "typescript") return 'proxy_location: "' + selectedLocation.value + '"' + return '"proxy_location": "' + selectedLocation.value + '"' + } + + const copyToClipboard = async () => { + await navigator.clipboard.writeText(getCodeSnippet()) + setCopied(true) + setTimeout(() => setCopied(false), 2000) + } + + return ( +
+ + +
+ + + {Object.entries(COUNTRY_PATHS).map(([countryCode, pathD]) => { + const isAvailable = AVAILABLE_COUNTRIES.includes(countryCode) + return ( + handleCountryClick(countryCode)} + onMouseEnter={() => isAvailable && setHoveredCountry(countryCode)} + onMouseLeave={() => setHoveredCountry(null)} + /> + ) + })} + +
+
+
+ Available +
+
+
+ Selected +
+
+
+ Not available +
+
+
+ + {(selected === "US" || selected === "US_ISP") && ( +
+
US Proxy Type
+
+ + +
+
+ )} + +
+ +
+ + {selectedLocation && ( +
+
+ {selectedLocation.flag} +
+
{selectedLocation.name}
+
Timezone: {selectedLocation.timezone}
+
+
+
+ {selectedLocation.value} +
+
+ )} + +
+
+ +
+ {["python", "typescript", "curl"].map((format) => ( + + ))} +
+
+
+
+            {getCodeSnippet()}
+          
+ +
+
+
+ ) +} + +Many websites serve different content based on your location—prices in local currency, region-locked inventory, or outright access blocks. Others detect and block datacenter IPs, treating them as bots. Skyvern's residential proxy network routes your browser through real consumer IP addresses in 20 countries, so sites see a legitimate local visitor. + + +Proxy routing is only available in Skyvern Cloud. Self-hosted deployments require your own proxy infrastructure. + + +--- + +## Set `proxy_location` + +Pass `proxy_location` when creating or running tasks, workflows or browser sessions to route browser traffic through a specific region. + + + +For tasks: + + +```python Python +result = await client.run_task( + prompt="Get the price of this product", + url="https://shop.example.co.uk/product/123", + proxy_location="RESIDENTIAL_GB", +) +``` + +```typescript TypeScript +const result = await client.runTask({ + body: { + prompt: "Get the price of this product", + url: "https://shop.example.co.uk/product/123", + proxy_location: "RESIDENTIAL_GB", + }, +}); +``` + +```bash cURL +curl -X POST "https://api.skyvern.com/v1/run/tasks" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "prompt": "Get the price of this product", + "url": "https://shop.example.co.uk/product/123", + "proxy_location": "RESIDENTIAL_GB" + }' +``` + + +For workflows, set a default `proxy_location` when creating the workflow, then you can also override it when starting the run: + + +```python Python +# Set default proxy on workflow +workflow = await client.create_workflow( + json_definition={ + "title": "UK Price Monitor", + "proxy_location": "RESIDENTIAL_GB", + "workflow_definition": {...} + } +) + +# Override for a specific run (takes priority over workflow default) +run = await client.run_workflow( + workflow_id="wpid_123456789", + parameters={...}, + proxy_location="RESIDENTIAL_DE" # This run uses Germany instead +) +``` + +```typescript TypeScript +// Set default proxy on workflow +const workflow = await client.createWorkflow({ + body: { + json_definition: { + title: "UK Price Monitor", + proxy_location: "RESIDENTIAL_GB", + workflow_definition: {...}, + }, + }, +}); + +// Override for a specific run (takes priority over workflow default) +const run = await client.runWorkflow({ + body: { + workflow_id: "wpid_123456789", + parameters: {...}, + proxy_location: "RESIDENTIAL_DE", // This run uses Germany instead + }, +}); +``` + +```bash cURL +# Set default proxy on workflow +curl -X POST "https://api.skyvern.com/v1/workflows" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "json_definition": { + "title": "UK Price Monitor", + "proxy_location": "RESIDENTIAL_GB", + "workflow_definition": {...} + } + }' + +# Override for a specific run (takes priority over workflow default) +curl -X POST "https://api.skyvern.com/v1/run/workflows" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "workflow_id": "wpid_123456789", + "parameters": {...}, + "proxy_location": "RESIDENTIAL_DE" + }' +``` + + +For browser sessions, set `proxy_location` at creation. All tasks in that session use the same proxy IP, which matters for sites that track IP consistency across a login session—switching IPs mid-session often triggers security warnings or logouts. + + +**Browser profiles don't store proxy settings.** Profiles save cookies, localStorage, and authentication state—but not the proxy used to create them. When reusing a profile, explicitly set `proxy_location` to match the original session, or sites may detect the IP mismatch and invalidate your session. + + + +```python Python +session = await client.create_browser_session( + timeout=60, + proxy_location="RESIDENTIAL_DE" +) +``` + +```typescript TypeScript +const session = await client.createBrowserSession({ + body: { + timeout: 60, + proxy_location: "RESIDENTIAL_DE", + }, +}); +``` + +```bash cURL +curl -X POST "https://api.skyvern.com/v1/browser_sessions" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "timeout": 60, + "proxy_location": "RESIDENTIAL_DE" + }' +``` + + +--- + +## Proxy location options + +Use these enum values for country-level targeting. Each routes through a residential proxy pool in that country. + +| Value | Country | Timezone | +|-------|---------|----------| +| `RESIDENTIAL` | United States | America/New_York | +| `RESIDENTIAL_ISP` | United States | America/New_York | +| `RESIDENTIAL_AR` | Argentina | America/Argentina/Buenos_Aires | +| `RESIDENTIAL_AU` | Australia | Australia/Sydney | +| `RESIDENTIAL_BR` | Brazil | America/Sao_Paulo | +| `RESIDENTIAL_CA` | Canada | America/Toronto | +| `RESIDENTIAL_DE` | Germany | Europe/Berlin | +| `RESIDENTIAL_ES` | Spain | Europe/Madrid | +| `RESIDENTIAL_FR` | France | Europe/Paris | +| `RESIDENTIAL_GB` | United Kingdom | Europe/London | +| `RESIDENTIAL_IE` | Ireland | Europe/Dublin | +| `RESIDENTIAL_IN` | India | Asia/Kolkata | +| `RESIDENTIAL_IT` | Italy | Europe/Rome | +| `RESIDENTIAL_JP` | Japan | Asia/Tokyo | +| `RESIDENTIAL_MX` | Mexico | America/Mexico_City | +| `RESIDENTIAL_NL` | Netherlands | Europe/Amsterdam | +| `RESIDENTIAL_NZ` | New Zealand | Pacific/Auckland | +| `RESIDENTIAL_PH` | Philippines | Asia/Manila | +| `RESIDENTIAL_TR` | Türkiye | Europe/Istanbul | +| `RESIDENTIAL_ZA` | South Africa | Africa/Johannesburg | +| `NONE` | No proxy | — | + +- `RESIDENTIAL` is the default. It routes traffic through a random US residential IP. +- `RESIDENTIAL_ISP` uses static ISP IPs instead of rotating residential IPs. Useful for sites that distrust rotating pools or require consistent IP addresses across requests. +- `NONE` disables proxy routing entirely—traffic originates from Skyvern's US datacenters. Useful for testing or internal tools. + + +**Default behavior:** If you don't specify `proxy_location`, Skyvern uses `RESIDENTIAL` which routes through a random US residential IP. Each request may get a different IP from the pool. For consistent IPs, use `RESIDENTIAL_ISP` or browser sessions. + + + +**Timezone is automatically set:** When using `proxy_location`, the browser's timezone is set to match the proxy's region. Sites that compare your IP's geolocation against browser timezone for bot detection will see consistent data. + + +### Choosing the right proxy type + +| Scenario | Recommended | Why | +|----------|-------------|-----| +| General scraping | `RESIDENTIAL` | Large pool, good success rate | +| Login / authenticated sessions | `RESIDENTIAL_ISP` | Static IPs prevent session invalidation | +| Region-specific content | `RESIDENTIAL_XX` | Routes through that country | +| Sites that block rotating IPs | `RESIDENTIAL_ISP` | Static IPs have better reputation | +| Internal tools / testing | `NONE` | Skip proxy overhead | +| Multi-step checkout flows | `RESIDENTIAL_ISP` + browser session | IP consistency required | + + +**Use `RESIDENTIAL_ISP` for authenticated sessions.** Sites that track IP consistency across a login session may flag accounts when IPs rotate mid-session. ISP proxies provide static IPs that don't change during your task. + + +### State and city targeting + +For granular targeting—a specific US state, a city, or a country not in the presets—pass a `GeoTarget` object instead of an enum. + + +```python Python +# US state (California) +result = await client.run_task( + prompt="Get local pricing", + url="https://example.com", + proxy_location={"country": "US", "subdivision": "CA"}, +) + +# US city (New York City) +result = await client.run_task( + prompt="Get local pricing", + url="https://example.com", + proxy_location={"country": "US", "subdivision": "NY", "city": "New York"}, +) + +# City without subdivision (London) +result = await client.run_task( + prompt="Get local pricing", + url="https://example.com", + proxy_location={"country": "GB", "city": "London"}, +) +``` + +```typescript TypeScript +// US state (California) +const result = await client.runTask({ + body: { + prompt: "Get local pricing", + url: "https://example.com", + proxy_location: { country: "US", subdivision: "CA" }, + }, +}); + +// US city (New York City) +const result = await client.runTask({ + body: { + prompt: "Get local pricing", + url: "https://example.com", + proxy_location: { country: "US", subdivision: "NY", city: "New York" }, + }, +}); + +// City without subdivision (London) +const result = await client.runTask({ + body: { + prompt: "Get local pricing", + url: "https://example.com", + proxy_location: { country: "GB", city: "London" }, + }, +}); +``` + +```bash cURL +curl -X POST "https://api.skyvern.com/v1/run/tasks" \ + -H "x-api-key: $SKYVERN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "prompt": "Get local pricing", + "url": "https://example.com", + "proxy_location": { + "country": "US", + "subdivision": "CA", + "city": "San Francisco" + } + }' +``` + + +| Field | Type | Description | +|-------|------|-------------| +| `country` | string | **Required.** ISO 3166-1 alpha-2 code (e.g., `US`, `GB`, `DE`). | +| `subdivision` | string | ISO 3166-2 subdivision code without country prefix (e.g., `CA` for California, `NY` for New York). | +| `city` | string | City name in English (e.g., `San Francisco`, `London`). | + +**Supported countries:** `US`, `AR`, `AU`, `BR`, `CA`, `DE`, `ES`, `FR`, `GB`, `IE`, `IN`, `IT`, `JP`, `MX`, `NL`, `NZ`, `PH`, `TR`, `ZA` + + +**City/state targeting has limited availability.** Proxy pools for specific cities or US states are smaller and may return `NoProxyAvailable` during high-demand periods. If this happens, broaden your target (city → state → country) or retry later. + + +--- + +## Troubleshooting + +| Error | Reason | How to Fix | +|-------|--------|------------| +| `NoProxyAvailable` | Requested city/state is temporarily unavailable in the proxy pool | Broaden target (city → state → country), use `RESIDENTIAL_ISP`, or retry later | +| Site still blocks requests | Bot detection beyond IP geolocation (fingerprinting, behavioral analysis) | Use `RESIDENTIAL_ISP` for static IPs, match proxy to site's region, add `wait` blocks between actions | +| Need to debug proxy issues | Isolate whether proxy is causing failures | Set `proxy_location: "NONE"` to bypass proxy entirely | + +For sites with aggressive bot detection, combine residential proxies with the techniques in [Captcha & Bot Detection](/going-to-production/captcha-bot-detection). + +Need a location that's not available? Get help in the [Skyvern Discord community](https://discord.gg/skyvern) to request new proxy pools. + +--- + +## Next steps + + + + Combine proxies with anti-detection techniques + + + Maintain IP consistency across multi-step tasks + + + diff --git a/docs/going-to-production/reliability-tips.mdx b/docs/going-to-production/reliability-tips.mdx new file mode 100644 index 00000000..05e79805 --- /dev/null +++ b/docs/going-to-production/reliability-tips.mdx @@ -0,0 +1,366 @@ +--- +title: Reliability Tips +subtitle: Write robust prompts and handle edge cases +slug: going-to-production/reliability-tips +--- + +The difference between a demo and production-ready automation is reliability. This page covers techniques for writing prompts that work consistently, handling dynamic pages, and validating results. + +--- + +## Writing robust prompts + +### Anatomy of a good prompt + +Every prompt needs four components: + +1. **Main goal** (required) — What should happen +2. **Guardrails** — Constraints and boundaries +3. **Payload** — Data to use in form fields +4. **Completion criteria** (required) — How to know when done + +``` +Your goal is to fill out the contact form with the provided information. +Only fill out required fields. Skip optional fields unless you have data for them. + +Here is the information: +{{contact_data}} + +COMPLETE when the form is submitted and you see a confirmation message. +TERMINATE if you see an error message or the form cannot be submitted. +``` + +### What works + +**Be explicit about completion.** The AI needs to know when to stop. "COMPLETE when you see 'Order confirmed'" is unambiguous. Without this, the AI might keep navigating or stop too early. + + +**Don't forget the submit button.** A common failure mode is the AI completing after filling form fields but before clicking Submit. Be explicit: "COMPLETE when you have clicked the Submit button AND see a confirmation message." The AI might consider the form "done" once all fields are filled—make clear that submission is part of the goal. + + +**Use visual descriptions.** "Click the blue Submit button at the bottom of the form" works better than "click Submit"—there might be multiple buttons, and visual context helps the AI pick the right one. Describe position, color, icons, and surrounding text. + +**Start general, then refine.** Begin with simple prompts and add specifics based on failures. Over-specified prompts are brittle; the AI handles variation better when you describe goals rather than exact steps. + +**Include termination criteria.** Tell the AI when to give up: "TERMINATE if login fails or account is locked." Without this, the AI might keep trying forever or fail silently. + +**Reference visual indicators.** "The invoice download link has a PDF icon next to it" helps the AI identify the right element when there are multiple links with similar text. + +### What doesn't work + +**Vague goals.** "Do the thing on the website" gives the AI nothing to work with. Be specific about what outcome you want. + +**Missing completion criteria.** Without knowing when to stop, the AI keeps navigating indefinitely or terminates at arbitrary points. + +**Action lists without context.** "Click button A, then B, then C" breaks when the layout changes or buttons move. Describe the goal instead, and let the AI figure out the steps. + +**HTML element names.** "Click the `