--- title: Task Parameters subtitle: Configure how your task runs slug: running-automations/task-parameters --- This page covers all parameters you can pass to `run_task`. Only `prompt` is a required parameter. --- ## Quick reference | Parameter | Type | Use this to | |-----------|------|-------------| | [`prompt`](#prompt) **(Required)** | string | Give natural language instructions for the AI | | [`url`](#url) | string | Give a starting URL for the task | | [`engine`](#engine) | string | Choose a different Agent model | | [`data_extraction_schema`](#data_extraction_schema) | object | Get consistent, structured JSON output | | [`max_steps`](#max_steps) | integer | Limit how long the Agent runs and cap costs | | [`proxy_location`](#proxy_location) | string \| object | Access geo-restricted content or reduce bot detection | | [`browser_session_id`](#browser_session_id) | string | Maintain state (cookies, login) across multiple tasks | | [`totp_identifier`](#totp_identifier) | string | Handle 2FA when pushing codes to Skyvern | | [`totp_url`](#totp_url) | string | Have Skyvern fetch 2FA codes from your endpoint | | [`error_code_mapping`](#error_code_mapping) | object | Get custom error codes for programmatic handling | | [`webhook_url`](#webhook_url) | string | Get notified when the task completes | | [`title`](#title) | string | Label the task in the Skyvern UI | | [`extra_http_headers`](#extra_http_headers) | object | Add custom headers (e.g., Authorization) to browser requests | | [`publish_workflow`](#publish_workflow) | boolean | Convert this task into a reusable workflow | | [`max_screenshot_scrolls`](#max_screenshot_scrolls) | integer | Capture lazy-loaded content in screenshots | | [`browser_address`](#browser_address) | string | Connect to your own browser for local development | | [`include_action_history_in_verification`](#include_action_history_in_verification) | boolean | Improve verification accuracy for multi-step forms | | [`model`](#model) | object | Configure model settings (e.g., temperature) | --- ## `prompt` **Required.** Natural language instructions describing what the AI should do. ```python Python result = await client.run_task( prompt="Find the cheapest flight from NYC to LAX on March 15" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Find the cheapest flight from NYC to LAX on March 15", }, }); ``` ```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": "Find the cheapest flight from NYC to LAX on March 15" }' ``` Be specific about your goal and what data you want extracted. The more detailed your prompt, the better the results. --- ## `url` The starting page for the automation. Skyvern navigates from here based on your prompt. ```python Python result = await client.run_task( prompt="Get the top headline", url="https://news.ycombinator.com" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Get the top headline", url: "https://news.ycombinator.com", }, }); ``` ```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 top headline", "url": "https://news.ycombinator.com" }' ``` If not provided, Skyvern attempts to determine an appropriate starting URL from your prompt. --- ## `engine` The AI engine that powers the task. These are not iterations—they're suited for different purposes. | Engine | Description | |--------|-------------| | `skyvern-2.0` | **Default.** Multi-objective, flexible, handles complex multi-step tasks. 85.85% on WebVoyager benchmark. Slower and more expensive. | | `skyvern-1.0` | Single objective, precise, faster, cheaper. Best for simple tasks like form filling or single-page extraction. | | `openai-cua` | OpenAI's Computer Use Agent | | `anthropic-cua` | Anthropic Claude Sonnet with computer use | | `ui-tars` | UI-TARS model (Seed1.5-VL) via Doubao API | Use `skyvern-1.0` when you have a clear, single goal and want faster, cheaper execution. Use `skyvern-2.0` when the task requires flexibility or multiple steps. ```python Python result = await client.run_task( prompt="Fill out the contact form", engine="skyvern-1.0" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Fill out the contact form", engine: "skyvern-1.0", }, }); ``` ```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": "Fill out the contact form", "engine": "skyvern-1.0" }' ``` --- ## `data_extraction_schema` A [JSON Schema](https://json-schema.org/) defining the structure of output data. Use this when you need consistent, typed responses. ```python Python result = await client.run_task( prompt="Find the top post on Hacker News", data_extraction_schema={ "type": "object", "properties": { "title": { "type": "string", "description": "The title of the top post" }, "points": { "type": "integer", "description": "Number of points" } } } ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Find the top post on Hacker News", data_extraction_schema: { type: "object", properties: { title: { type: "string", description: "The title of the top post", }, points: { type: "integer", description: "Number of points", }, }, }, }, }); ``` ```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": "Find the top post on Hacker News", "data_extraction_schema": { "type": "object", "properties": { "title": { "type": "string", "description": "The title of the top post" }, "points": { "type": "integer", "description": "Number of points" } } } }' ``` Without a schema, output format varies based on what the AI extracts. With a schema, output matches your defined structure. --- ## `max_steps` Maximum number of steps the task can take. The task fails if it exceeds this limit. ```python Python result = await client.run_task( prompt="Get the current stock price of AAPL", max_steps=10 ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Get the current stock price of AAPL", max_steps: 10, }, }); ``` ```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 current stock price of AAPL", "max_steps": 10 }' ``` On the cloud-hosted version, you're billed per step. Set this to a reasonable value during development to cap costs. Set `max_steps` during development to avoid runaway costs. A task that loops or gets stuck will keep consuming steps until it hits this limit. --- ## `proxy_location` Route browser traffic through a residential proxy in a specific location. Use this for geo-restricted content or to reduce bot detection. **Country-level pools:** | Value | Location | |-------|----------| | `RESIDENTIAL` | Random US residential (default) | | `RESIDENTIAL_GB` | United Kingdom | | `RESIDENTIAL_DE` | Germany | | `RESIDENTIAL_FR` | France | | `RESIDENTIAL_ES` | Spain | | `RESIDENTIAL_IE` | Ireland | | `RESIDENTIAL_IN` | India | | `RESIDENTIAL_JP` | Japan | | `RESIDENTIAL_AU` | Australia | | `RESIDENTIAL_CA` | Canada | | `RESIDENTIAL_BR` | Brazil | | `RESIDENTIAL_MX` | Mexico | | `RESIDENTIAL_AR` | Argentina | | `RESIDENTIAL_NZ` | New Zealand | | `RESIDENTIAL_ZA` | South Africa | | `RESIDENTIAL_IT` | Italy | | `RESIDENTIAL_NL` | Netherlands | | `RESIDENTIAL_PH` | Philippines | | `RESIDENTIAL_TR` | Turkey | | `RESIDENTIAL_ISP` | ISP proxy | | `NONE` | No proxy | ```python Python result = await client.run_task( prompt="Get UK-specific pricing", proxy_location="RESIDENTIAL_GB" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Get UK-specific pricing", 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 UK-specific pricing", "proxy_location": "RESIDENTIAL_GB" }' ``` **Granular targeting (US states/cities):** ```python Python result = await client.run_task( prompt="Get California pricing", proxy_location={ "country": "US", "subdivision": "CA", "city": "San Francisco" } ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Get California pricing", proxy_location: { country: "US", subdivision: "CA", city: "San Francisco", }, }, }); ``` ```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 California pricing", "proxy_location": { "country": "US", "subdivision": "CA", "city": "San Francisco" } }' ``` The full list of available proxy locations is shown above. Use `NONE` to disable proxies. For geo-restricted sites, `proxy_location` is required—without it, you'll get blocked or see wrong regional content (e.g., US prices instead of UK prices). --- ## `browser_session_id` Run the task in an existing persistent browser session. Use this to maintain state (cookies, localStorage) across multiple tasks. ```python Python result = await client.run_task( prompt="Extract account data", browser_session_id="pbs_123" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Extract account data", browser_session_id: "pbs_123", }, }); ``` ```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": "Extract account data", "browser_session_id": "pbs_123" }' ``` Browser sessions persist cookies, localStorage, and authentication state across multiple tasks. --- ## `totp_identifier` Identifier for TOTP codes when you push codes to Skyvern's API. Use this for two-factor authentication during task execution. ```python Python result = await client.run_task( prompt="Log in and extract account balance", totp_identifier="my-2fa-credential" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Log in and extract account balance", totp_identifier: "my-2fa-credential", }, }); ``` ```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 extract account balance", "totp_identifier": "my-2fa-credential" }' ``` TOTP codes are used for two-factor authentication during automated logins. --- ## `totp_url` URL that Skyvern calls to fetch TOTP codes when needed. Use this when Skyvern should retrieve codes from your endpoint. ```python Python result = await client.run_task( prompt="Log in and extract account balance", totp_url="https://your-server.com/totp" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Log in and extract account balance", totp_url: "https://your-server.com/totp", }, }); ``` ```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 extract account balance", "totp_url": "https://your-server.com/totp" }' ``` TOTP codes are used for two-factor authentication during automated logins. --- ## `error_code_mapping` Map specific error conditions to custom error codes. Use this to make programmatic error handling easier. ```python Python result = await client.run_task( prompt="Log in and extract data", error_code_mapping={ "login_failed": "The login credentials are incorrect or the account is locked", "maintenance_mode": "The website is down for maintenance" } ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Log in and extract data", error_code_mapping: { login_failed: "The login credentials are incorrect or the account is locked", maintenance_mode: "The website is down for maintenance", }, }, }); ``` ```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 extract data", "error_code_mapping": { "login_failed": "The login credentials are incorrect or the account is locked", "maintenance_mode": "The website is down for maintenance" } }' ``` If Skyvern encounters a login failure matching your description, `output` contains `{"error": "login_failed"}` instead of a generic error message. --- ## `webhook_url` URL to receive a POST request when the task completes. Use this instead of polling for production systems. ```python Python result = await client.run_task( prompt="Extract pricing data", webhook_url="https://your-server.com/webhook" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Extract pricing data", webhook_url: "https://your-server.com/webhook", }, }); ``` ```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": "Extract pricing data", "webhook_url": "https://your-server.com/webhook" }' ``` Skyvern sends a POST request with the full run data when the task completes or fails. --- ## `title` Display name for the task in the Skyvern UI. ```python Python result = await client.run_task( prompt="Get the top post", title="HN Top Post Scraper" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Get the top post", title: "HN Top Post Scraper", }, }); ``` ```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 top post", "title": "HN Top Post Scraper" }' ``` --- ## `extra_http_headers` Additional HTTP headers to include in browser requests. ```python Python result = await client.run_task( prompt="Access protected resource", extra_http_headers={ "Authorization": "Bearer your-token" } ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Access protected resource", extra_http_headers: { Authorization: "Bearer your-token", }, }, }); ``` ```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": "Access protected resource", "extra_http_headers": { "Authorization": "Bearer your-token" } }' ``` --- ## `publish_workflow` Convert this task into a reusable workflow. Only available for `skyvern-2.0`. ```python Python result = await client.run_task( prompt="Fill out the contact form with provided data", publish_workflow=True ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Fill out the contact form with provided data", publish_workflow: true, }, }); ``` ```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": "Fill out the contact form with provided data", "publish_workflow": true }' ``` --- ## `max_screenshot_scrolls` Number of scrolls for post-action screenshots. Use this for pages with lazy-loaded content. ```python Python result = await client.run_task( prompt="Extract all product listings", max_screenshot_scrolls=3 ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Extract all product listings", max_screenshot_scrolls: 3, }, }); ``` ```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": "Extract all product listings", "max_screenshot_scrolls": 3 }' ``` --- ## `browser_address` Connect to a browser at a specific CDP address. Use this for local development only. ```python Python result = await client.run_task( prompt="Automate my local browser", browser_address="http://127.0.0.1:9222" ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Automate my local browser", browser_address: "http://127.0.0.1:9222", }, }); ``` ```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": "Automate my local browser", "browser_address": "http://127.0.0.1:9222" }' ``` --- ## `model` Optional model configuration for the task. ```python Python result = await client.run_task( prompt="Extract data from the page", model={"temperature": 0.5} ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Extract data from the page", model: { temperature: 0.5 }, }, }); ``` ```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": "Extract data from the page", "model": {"temperature": 0.5} }' ``` --- ## `include_action_history_in_verification` Include action history when verifying task completion. Default: `false`. ```python Python result = await client.run_task( prompt="Complete the multi-step form", include_action_history_in_verification=True ) ``` ```typescript TypeScript const result = await client.runTask({ body: { prompt: "Complete the multi-step form", include_action_history_in_verification: true, }, }); ``` ```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": "Complete the multi-step form", "include_action_history_in_verification": true }' ``` --- ## Next steps Define a schema to get typed JSON output Execute tasks and retrieve results