What are Web Tasks?
The Web Tasks API lets you describe a web task in plain English and have it executed for you. This can be:- Scraping a directory.
- Filling a multi-page form.
- Downloading a batch of files.
- Pulling data out of a table.
reuseKey, executions get faster, cheaper, and more consistent, because each run executes saved code instead of re-exploring the site from scratch.
Web Tasks are workspace-scoped. Unlike Projects, you don’t create, deploy, or maintain anything. You call the API and get a result.
When to use Web Tasks
Use Web Tasks when:- The task benefits from generated code, such as crawling pages, extracting data across many entities, repeated multi-step actions.
- You’ll run the same task (or variations of it) more than once. The payoff comes from reuse.
- You want the API to write and maintain the automation for you instead of owning the code yourself.
- You want to run the deterministic code without AI in the loop, or you want to control exactly when AI is involved.
- You want to write, debug, and own the automation code yourself, in the online IDE or locally with the CLI.
- You need full visibility into the code and every execution, such as browser traces, logs, and attempt timeline.
- You want advanced issue monitoring and auto-maintenance via self-healing projects.
- You need platform features like AuthSessions, Jobs and scheduling, or Sinks.
Core concepts
Start and result
Web Tasks use a two-call lifecycle, same as other long-running Intuned APIs:POST /{workspaceId}/web-tasks/start- submit the task. Returns awebTaskIdimmediately.GET /{workspaceId}/web-tasks/{webTaskId}/result- poll for status and result.
Request fields
| Field | Required | Description |
|---|---|---|
task | Yes | Natural-language instruction describing the task. |
startUrl | No | Optional hint telling the agent where to start in the browser. If omitted, the agent decides from the task description. |
parameters | No | Structured inputs that may change between runs (for example, { "batch": "S24" }). |
outputSchema | No | JSON Schema (draft 2020-12) for the desired result shape. If omitted, the system infers a format from the task. |
reuseKey | No | Label that ties this run to a reusable automation. See Reuse and the reuseKey. If omitted, the server generates one for you. |
model | No | Model the agent runs with: haiku, sonnet, or opus. Defaults to haiku. Heavier models help on harder tasks at higher cost. |
Status model
A Web Task moves through these states:pending: created, not yet executing.started: executing.completed: finished. The response includes anoutcomeofsuccessorfailed.
completed, with a different outcome distinguishing them (reference the Example response below). Failed runs never update saved reusable code.
Result delivery
The server decides how to return the result:- Inline: small outputs (booleans, short text, small arrays, small objects) come back directly in the response under
result.data. - File: large outputs come back as a downloadable URL under
result.file, often with apreview(row count and a small sample). File URLs are signed and expire after 7 days.
Cost
Final responses include cost when available:cost.aiUsd: AI/model cost in dollars.cost.compute: runtime compute usage in hours.
Reuse and the reuseKey
reuseKey is the mechanism that makes Web Tasks get cheaper and faster over time.
With a reuseKey, the system loads any code saved under that key and tries to run it. If the existing code works, it returns the result. If not, the AI repairs or updates the code. On success, the improved code is saved back under the same key. On failure, the previous code is left untouched.
Without a reuseKey, the server still creates a reusable bundle for the run. It auto-generates a wtr_-prefixed key, saves code under it, and returns it on the result as reuse.key. Pass that key on later calls when you want to reuse the same automation.
Same reuseKey means the same reusable automation, regardless of URL or parameters. If you want different automations, use different keys (yc_companies, wellfound_companies, shopify_products).
For the full execution model and reuse rules, see How Web Tasks work.
Example
The simplest path is the SDKrun() helper, which submits the task and polls for the result for you. Default poll interval is 5 seconds; you can pass an optional timeout.
Example responses
Cost and billing
Web Tasks consume AI credits based on tokens used and Compute Hours based on the execution time of the tasks. Free plans include credits to get started. Track spend on the Usage page. See Plans and billing for plan limits and Usage and billing for tracking spend. You can also bring your own Anthropic API key (BYOK) instead of using AI credits.Limits
- Each workspace can run up to 10 different Web Tasks concurrently (Contact support if you need a higher limit).
- Same-
reuseKeyruns are serialized: runs that share areuseKeyexecute one at a time so two runs don’t update the same code concurrently. Runs with different keys can run in parallel. - Failed runs return
outcome: "failed"with anerror.code. Possible codes:workspace-rate-limited,unauthenticated,no-ai-credits-left,timeout,rejected,internal-error.
FAQ
Can Web Tasks bypass CAPTCHAs or bot detection?
Can Web Tasks bypass CAPTCHAs or bot detection?
Yes. Web Tasks support stealth mode and CAPTCHA
solving and proxies out of the box and will use them when needed.
Do Web Tasks work with authenticated websites?
Do Web Tasks work with authenticated websites?
No, not yet. Web Tasks currently only work with publicly accessible websites. Support for authenticated sessions is coming soon.
Can I use my existing Claude Code subscription?
Can I use my existing Claude Code subscription?
No. Web Tasks uses their own AI credits system, separate from any Claude
Code or Anthropic Console subscription. You can bring your own Anthropic API
key
(BYOK)
to use your own key instead of AI credits.
Next steps
How Web Tasks work
Execution model and reuse rules in detail
API reference
Start and result endpoints
CLI reference
Run Web Tasks from the
intuned platform webtasks commands