> ## Documentation Index
> Fetch the complete documentation index at: https://docs.beta.b3os.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Vision limits and FAQ

Rate, concurrency and size limits for scrapes, crawls and browser sessions in the beta, and answers to common questions about vision.

## Limits

Per organization, beta defaults. `GET /v1/limits` shows yours with current usage.

| Limit | Default |
|---|---|
| Scrapes per minute (`vision.scrape.rpm`) | 60 |
| Scrapes at once (`vision.scrape.concurrent`) | 5 |
| Crawls at once (`vision.crawl.concurrent`) | 1 |
| Pages per crawl (`vision.crawl.pages_max`) | 500 |
| Browser sessions at once (`vision.sessions.concurrent`) | 5 |
| Session lifetime (`vision.session.timeout_max`) | 1,800 seconds |

Per request:

| Request | Limit |
|---|---|
| Scrape | `timeout_ms` up to 60 seconds; up to 50 browser actions; URL up to 8,192 characters; body up to 1 MiB |
| Map | `limit` up to 5,000 URLs |
| Batch | Up to 1,000 URLs; body up to 4 MiB |
| Crawl | `limit` up to 500 pages, `max_depth` up to 20 |
| Session `act` | Up to 100 actions, `timeout_ms` up to 60 seconds |
| Profile | State up to 5 MiB, 3,000 cookies and 500 origins; up to 32 domains |

A request over a size limit fails with [`limit_exceeded`](/errors#limit_exceeded) or [`payload_too_large`](/errors#payload_too_large); a rate or concurrency limit returns `429` with `Retry-After`. See [limits](/concepts/limits).

## Retention

Cached pages: 2 days. Crawl and batch records with their pages, and closed sessions: 7 days after they end. Profiles: until you delete them or their `expires_at`.

## FAQ

**Why did my scrape use a browser?**

With `engine: "auto"`, vision starts a browser only when a page needs JavaScript to show its content. Browser actions, a `screenshot` format and a `profile` always need one. Set `engine: "fetch"` to forbid it; pages that build their content with JavaScript may then come back incomplete.
  **Why is cache.state bypass?**

The request had custom headers, a profile or browser actions, or the site set cookies. Those results are fetched fresh and never shared with other organizations.
  **Does a 404 page fail the scrape?**

No. A page the site served with an error status is still a successful scrape; check `status_code`. A scrape fails when vision cannot fetch or convert the page at all, for example on a timeout or a network error.
  **Can I ignore robots.txt?**

No. Vision honors robots.txt and Content Signals by default and the beta has no override. A disallowed URL fails with `robots_disallowed`, and a crawl lists the URLs it skipped in `result.robots_blocked`.
  **Can I bring my own proxy?**

No. Every fetch and navigation goes through the B3OS egress guard, and a session's CDP socket refuses browser contexts with their own proxy settings.
  **When should I use a session instead of a scrape with actions?**

A scrape with `actions` suits one page: act, then capture, then the browser is released. A session suits work across many steps or pages, or anything that needs Playwright or Puppeteer. Sessions bill browser time while open; scrapes bill one page each.
  **Is my session's browser shared with anyone?**

Each session gets its own browser process and profile directory, and only your organization's profiles load into it. The boundary between those processes is weaker during the beta than it will be: until the node's AppArmor profile is installed, Chrome runs without its renderer sandbox, and every browser in a pool runs as one OS user, so a browser exploit could reach other sessions on that pool. Browser microVMs are planned. The shared scrape pool runs only scrapes that B3OS drives and accepts no CDP connections.
  **Can I use vision from inside a sandbox?**

Yes. Grant the sandbox `vision:run` and call `http://127.0.0.1:7700/v1/vision/scrape` from inside it, with no key. The call reaches vision over vsock without leaving the node.