Limits

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

LimitDefault
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:

RequestLimit
Scrapetimeout_ms up to 60 seconds; up to 50 browser actions; URL up to 8,192 characters; body up to 1 MiB
Maplimit up to 5,000 URLs
BatchUp to 1,000 URLs; body up to 4 MiB
Crawllimit up to 500 pages, max_depth up to 20
Session actUp to 100 actions, timeout_ms up to 60 seconds
ProfileState up to 5 MiB, 3,000 cookies and 500 origins; up to 32 domains

A request over a size limit fails with limit_exceeded or payload_too_large; a rate or concurrency limit returns 429 with Retry-After. See 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

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.

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.

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.

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.

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.

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.

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.

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.

Ask a question... ⌘I