> ## Documentation Index
> Fetch the complete documentation index at: https://browseruse-0aece648-agency-x402-payment-cap.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent (v2)

> V2 agent models and file handling.

## Models

| Model | API String | Cost per Step |
| - | - | - |
| Browser Use 2.0 (default) | `browser-use-2.0` | \$0.006 |
| O3 | `o3` | \$0.03 |
| Gemini Flash Latest | `gemini-flash-latest` | \$0.0075 |
| Gemini Flash Lite Latest | `gemini-flash-lite-latest` | \$0.005 |
| Claude Sonnet 4.5 | `claude-sonnet-4-5-20250929` | \$0.05 |
| Claude Sonnet 4.6 | `claude-sonnet-4.6` | \$0.05 |

Pass `llm` explicitly to select a model:

<CodeGroup>
  ```python Python theme={null}
  result = await client.run("...", llm="browser-use-2.0")
  ```

  ```typescript TypeScript theme={null}
  const result = await client.run("...", { llm: "browser-use-2.0" });
  ```
</CodeGroup>

***

## Files

Upload images, PDFs, documents, and text files (10 MB max) to sessions, and download output files from completed tasks.

### Upload a file

Get a presigned URL, then upload via POST.

<CodeGroup>
  ```python Python theme={null}
  import httpx
  from browser_use_sdk import AsyncBrowserUse

  client = AsyncBrowserUse()
  session = await client.sessions.create()

  upload = await client.files.session_url(
      session.id,
      file_name="input.pdf",
      content_type="application/pdf",
      size_bytes=1024,
  )

  with open("input.pdf", "rb") as f:
      async with httpx.AsyncClient() as http:
          await http.post(upload.url, content=f.read(), headers={"Content-Type": "application/pdf"})

  result = await client.run("Summarize the uploaded PDF", session_id=session.id)
  ```

  ```typescript TypeScript theme={null}
  import { BrowserUse } from "browser-use-sdk";
  import { readFileSync } from "fs";

  const client = new BrowserUse();
  const session = await client.sessions.create();

  const upload = await client.files.sessionUrl(session.id, {
    fileName: "input.pdf",
    contentType: "application/pdf",
    sizeBytes: 1024,
  });

  await fetch(upload.url, {
    method: "POST",
    body: readFileSync("input.pdf"),
    headers: { "Content-Type": "application/pdf" },
  });

  const result = await client.run("Summarize the uploaded PDF", { sessionId: session.id });
  ```
</CodeGroup>

<Warning>
  Presigned URLs expire after 120 seconds. Max file size: 10 MB.
</Warning>

### Download task output files

<CodeGroup>
  ```python Python theme={null}
  result = await client.tasks.get(task_id)
  for file in result.output_files:
      output = await client.files.task_output(task_id, file.id)
      print(output.download_url)  # download URL
  ```

  ```typescript TypeScript theme={null}
  const result = await client.tasks.get(taskId);
  for (const file of result.outputFiles) {
    const output = await client.files.taskOutput(taskId, file.id);
    console.log(output.downloadUrl);
  }
  ```
</CodeGroup>

***

## Streaming steps

Use `async for` to yield steps as the agent works.

<CodeGroup>
  ```python Python theme={null}
  from browser_use_sdk import AsyncBrowserUse

  client = AsyncBrowserUse()
  run = client.run("Find the most upvoted post on Reddit r/technology today")
  async for step in run:
      print(f"Step {step.number}: {step.next_goal}")
      print(f"  URL: {step.url}")

  print(run.result.output)  # final result after iteration
  ```

  ```typescript TypeScript theme={null}
  import { BrowserUse } from "browser-use-sdk";

  const client = new BrowserUse();
  const run = client.run("Find the most upvoted post on Reddit r/technology today");
  for await (const step of run) {
    console.log(`Step ${step.number}: ${step.nextGoal}`);
    console.log(`  URL: ${step.url}`);
  }

  console.log(run.result?.output);  // final result after iteration
  ```
</CodeGroup>

***

## Key parameters

| Parameter | Type | Description |
| - | - | - |
| `task` | `str` | What you want the agent to do. 1-50,000 characters. |
| `llm` | `str` | Model override. Default: Browser Use 2.0. |
| `output_schema` / `schema` | Pydantic / Zod | Schema for structured output. |
| `session_id` | `str` | Reuse an existing session. Omit for auto-session. |
| `start_url` | `str` | Initial page URL. Saves steps — send the agent directly there. |
| `secrets` | `dict` | Domain-specific credentials. See [Authentication](/cloud/guides/authentication). |
| `allowed_domains` | `list[str]` | Restrict agent to these domains only. |
| `session_settings` | `SessionSettings` | Proxy, profile, browser config. See [Profiles](/cloud/guides/authentication). |
| `flash_mode` | `bool` | Faster but less careful navigation. |
| `thinking` | `bool` | Enable legacy agent thinking behavior. This does not set model reasoning depth. |
| `thinkingLevel` (REST) | `str` | Provider reasoning depth. The generated SDK parameter is pending; see [Thinking levels](/cloud/agent/thinking-levels). |
| `vision` | `bool \| str` | Enable screenshots for the agent. |
| `highlight_elements` | `bool` | Highlight interactive elements on the page. |
| `system_prompt_extension` | `str` | Append custom instructions to the system prompt. |
| `judge` | `bool` | Enable quality judge to verify output. |
| `skill_ids` | `list[str]` | Skills the agent can use during the task. |
| `op_vault_id` | `str` | 1Password vault ID for auto-fill credentials and 2FA. |
| `metadata` | `dict[str, str]` | Custom metadata attached to the task. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.