# for non-javascript agents and crawlers
# this page is plain html. the product is an api.
# create a browser:  POST /v1/sessions {"proxy":"dc"|"residential","ttlSec":N}
# response:          {"id", "connectUrl"}  →  connectUrl is a CDP websocket
# kill it:           DELETE /v1/sessions/:id   (or let ttlSec reap it)
# works with:        playwright, puppeteer, raw CDP
# cli:               curl -fsSL guise.sh/install | sh   →   guise new · ls · rm
# windows:           irm guise.sh/install.ps1 | iex   (powershell)
# docs:              guise.sh/docs · guise.sh/api · guise.sh/pricing

 ██████╗ ██╗   ██╗██╗███████╗███████╗
██╔════╝ ██║   ██║██║██╔════╝██╔════╝
██║  ███╗██║   ██║██║███████╗█████╗
██║   ██║██║   ██║██║╚════██║██╔══╝
╚██████╔╝╚██████╔╝██║███████║███████╗
 ╚═════╝  ╚═════╝ ╚═╝╚══════╝╚══════╝

browsers for agents.

API-driven Chrome, fully isolated. One POST, one WebSocket, full CDP. Every session is its own machine with its own egress — residential or datacenter — live in ~150ms.

https://example.com● cdp
sign in↖ your agent, mid-click
residential egress · playwright connected · created in 158ms
# install the cli
$ curl -fsSL guise.sh/install | sh
$ guise auth <key> && guise new
# or straight from playwright const b = await chromium.connectOverCDP(session.connectUrl); const page = await b.contexts()[0].newPage(); await page.goto("https://example.com");

get an api key →api reference

────────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────┐
│ $ curl -s -X POST https://api.guise.sh/v1/sessions \     │
│     -H "x-api-key: $GUISE_KEY" \                         │
│     -d '{"proxy":"residential","ttlSec":1800}'           │
│                                                          │
│ {"id":"s_01J9K7…","connectUrl":"wss://…/cdp"}            │
│                                                          │
│ $ node agent.js                                          │
│ > chromium.connectOverCDP(session.connectUrl)            │
│ > page.goto("https://example.com")              ✓ 841ms  │
│ > agent: 30 browsers, zero baby-sitting                  │
└──────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────

built for agents

No SDK to learn, no protocol shim. You get a raw CDP websocket; playwright and puppeteer connect in one line. The browser is the tool — we just hand it over.

isolated by default

One machine per session, isolated at the hardware line. Dedicated compute, destroyed — not recycled — when you're done. Nothing survives, nothing is shared.

egress that looks human

Sticky residential or datacenter exit per session, wired in below the browser. Fingerprints survive the usual checks because the machine underneath is real.

────────────────────────────────────────────────────────────────

## simple api

full api reference →

────────────────────────────────────────────────────────────────

## faq

What exactly is a session?
One isolated machine running Chrome, yours alone. You drive it over CDP. When you delete it — or its TTL fires — the machine is destroyed, disk and all.
How fast is cold start?
~150ms from POST to CDP. Browsers are ready before you ask; how is our problem, not yours.
How is it metered?
Per session-second, by tier. Every session lands in a usage ledger with its owner, tier, and lifetime.
Concurrency limits?
No per-key cap today. Fair use; the fleet grows with you.
────────────────────────────────────────────────────────────────

start now.

One POST. One WebSocket. Your agent has a browser.

get an api key →