Skip to content
Headless Chromium over HTTP
Patchright stealth mode
Chrome DevTools Protocol
Screenshots, PDF & HTML export
JavaScript eval in-page
Fingerprint profiles & proxies
DNS-over-HTTPS by default
24 HTTP endpoints
Headless Chromium over HTTP
Patchright stealth mode
Chrome DevTools Protocol
Screenshots, PDF & HTML export
JavaScript eval in-page
Fingerprint profiles & proxies
DNS-over-HTTPS by default
24 HTTP endpoints
Headless Chromium over HTTP
Patchright stealth mode
Chrome DevTools Protocol
Screenshots, PDF & HTML export
JavaScript eval in-page
Fingerprint profiles & proxies
DNS-over-HTTPS by default
24 HTTP endpoints
Headless Chromium over HTTP
Patchright stealth mode
Chrome DevTools Protocol
Screenshots, PDF & HTML export
JavaScript eval in-page
Fingerprint profiles & proxies
DNS-over-HTTPS by default
24 HTTP endpoints
home / kit / browser
BrowserBROWSER · KIT SERVICE

Chromium automation over plain HTTP

Headless Chromium you drive over plain HTTP — navigate pages, evaluate JavaScript, capture screenshots and PDFs, and stream the Chrome DevTools Protocol, all from one container URL. No Puppeteer install, no binaries to manage.

abc123-def456-browser-1.node-us-1.containers.hoody.com
GET /start?browser_id=main&stealth=true&timezoneId=America/New_York
200 OK

1 · Spawn a stealth Chromium instance

$ curl "/start?browser_id=main&stealth=true&timezoneId=America/New_York&locale=en-US"

{ "browser_id": "main",

"webSocketDebuggerUrl": "ws://.../devtools/browser/...",

"stealth": true }

 

2 · Navigate to any URL

$ curl "/browse?browser_id=main&url=https://hoody.com"

200 OK

 

3 · Capture a full-page screenshot

$ curl "/screenshot?browser_id=main&format=png" -o shot.png

1920x1080 PNG

home / kit / browser / demo
DEMO

From URL to data in four calls

Start an instance, point it at a page, pull what you need, and hand the live session to an agent — every step a single HTTP request.

01 / 05

Navigate

GET /browse opens or reuses a tab and loads any URL, returning the new tab id.

tabId 2 · created
02 / 05

Extract

Pull content with /eval, /html, or /text — read document.title or scrape the whole DOM.

result: Example Domain
03 / 05

Capture

Snapshot the page as a PNG, JPEG, or PDF, full-page or viewport only.

1920x1080 PNG
04 / 05

Observe

Read the 500-entry console and network buffers plus instance metadata for debugging.

500 buffered entries
05 / 05

Hand off to an agent

Expose the DevTools WebSocket so Puppeteer, Playwright, or an AI agent can take over.

ws:// CDP endpoint
BEFORE· Local Puppeteer

Install Puppeteer, ship the Chromium binary, run a headless worker, and keep the version matrix patched — on every machine and every CI runner.

AFTER· Hoody Browser

One container URL. curl /start, /browse, /eval, /screenshot. No binaries, no driver, no headless plumbing — any language that speaks HTTP.

home / kit / browser / api
ONE FLOW, THREE LANGUAGES

The same flow in shell, JavaScript, and Python

start → browse → eval → shutdown. It is just HTTP, so any client works — here is the identical lifecycle in three.

browser-api.sh

# Full Browser flow — start, navigate, extract, shutdown

 

URL="https://abc123-def456-browser-1.node-us-1.containers.hoody.com"

ID="main"

 

# 1. Spawn a stealth Chromium (Patchright)

curl -s "$URL/start?browser_id=$ID&stealth=true"

 

# 2. Navigate to a page

curl -s "$URL/browse?browser_id=$ID&url=https://example.com"

 

# 3. Read the page title back

curl -s -X POST "$URL/eval?browser_id=$ID" \

-H 'Content-Type: application/json' \

-d '{"script":"document.title"}'

# > { "result": "Example Domain" }

 

# 4. Release the slot

curl -s "$URL/shutdown?browser_id=$ID"

browser-api.js

// Full Browser flow — start, navigate, extract, shutdown

const BASE = 'https://abc123-def456-browser-1.node-us-1.containers.hoody.com';

const id = 'main';

 

// 1. Spawn a stealth Chromium (Patchright)

const start = await fetch(`${BASE}/start?browser_id=${id}&stealth=true`);

const { webSocketDebuggerUrl } = await start.json();

 

// 2. Navigate to a page

await fetch(`${BASE}/browse?browser_id=${id}&url=https://example.com`);

 

// 3. Read the page title back

const r = await fetch(`${BASE}/eval?browser_id=${id}`, {

method: 'POST',

headers: { 'Content-Type': 'application/json' },

body: JSON.stringify({ script: 'document.title' })

});

const { result } = await r.json();

// => "Example Domain"

 

// 4. Release the slot

await fetch(`${BASE}/shutdown?browser_id=${id}`);

browser_api.py

# Full Browser flow — start, navigate, extract, shutdown

import requests

 

BASE = 'https://abc123-def456-browser-1.node-us-1.containers.hoody.com'

id = 'main'

 

# 1. Spawn a stealth Chromium (Patchright)

start = requests.get(f'{BASE}/start', params={'browser_id': id, 'stealth': 'true'})

ws = start.json()['webSocketDebuggerUrl']

 

# 2. Navigate to a page

requests.get(f'{BASE}/browse', params={'browser_id': id, 'url': 'https://example.com'})

 

# 3. Read the page title back

r = requests.post(f'{BASE}/eval',

params={'browser_id': id},

json={'script': 'document.title'})

title = r.json()['result']

# => "Example Domain"

 

# 4. Release the slot

requests.get(f'{BASE}/shutdown', params={'browser_id': id})

home / kit / browser / used-for
BUILT FOR

What teams build on it

Six patterns the Browser API was shaped around — each one a few HTTP calls away.

{01}

Scraping pipelines

Navigate, then pull structured data with /eval, /html, or /text — no driver to babysit between runs.

{02}

AI web agents

Let an agent browse, read, and act on pages over HTTP, or attach to the live DevTools socket.

{03}

Authenticated sessions

Inject cookies with POST /cookies and reuse a persistent browser_id to keep a logged-in session warm.

{04}

Live DevTools preview

Share the /devtools-url WebSocket to watch and debug a running instance in real time.

{05}

Visual monitoring

Capture full-page screenshots and PDFs on a schedule for regression and uptime checks.

{06}

Geo & stealth testing

Spoof timezone, locale, geolocation, and fingerprint to verify how a site behaves from anywhere.

home / kit / browser / endpoints
API REFERENCE

Twenty-four endpoints, one container URL

Every browser action is a plain HTTP call against your instance host, grouped into four functional areas.

Interaction & Content

8 endpoints

curl /browse?browser_id=main&url=https://example.com → { tabId, url, created, reused }

GET
/browse?url=Open or reuse a tab and navigate to a URL; returns the tab id and resolved address.
POST
/browseSame navigation, with tab and focus options passed as a JSON body.
GET
/eval?script=Run a JavaScript snippet in the active tab and return its result.
POST
/evalEvaluate JavaScript from a JSON or text/plain body for longer scripts.
GET
/htmlReturn the full rendered HTML of the active page.
GET
/textReturn the visible text content of the active page.
GET
/screenshotCapture the page as PNG, JPEG, or base64 — full-page optional.
GET
/pdfRender the current page to a PDF with format, margin, and orientation options.

Cookies & History

5 endpoints

curl -X POST /cookies -d '{ cookies: [{ name, value, url }] }' → { added: 2 }

GET
/cookiesRead cookies from the browser context, optionally filtered by URL.
POST
/cookiesInject one or more cookies to seed an authenticated session.
DELETE
/cookiesClear every cookie from the instance.
GET
/historyQuery the persistent browsing history for the instance.
DELETE
/historyDelete stored browsing history.

Introspection & Debug

6 endpoints

curl /devtools-url?browser_id=main → { webSocketDebuggerUrl, devtoolsHttpUrl, devtoolsFrontendUrl }

GET
/metadataInspect session, browser and OS details, viewport, open tabs, and DevTools URL.
GET
/tabsList all open tabs for the instance.
POST
/tab/closeClose a specific browser tab by id.
GET
/devtools-urlFetch the Chrome DevTools WebSocket, HTTP, and frontend URLs.
GET
/consoleRead the last 500 buffered console messages and page errors.
GET
/networkRead the last 500 buffered network request and response entries.

Lifecycle & Health

5 endpoints

curl /start?browser_id=main&stealth=true → { browser_id, webSocketDebuggerUrl, stealth: true }

GET
/startCreate or retrieve an instance with stealth, fingerprint, proxy, and locale options.
GET
/stopStop a running browser instance.
GET
/restartRestart an instance, reapplying its launch configuration.
GET
/shutdownShut down the instance and release its resources.
GET
/api/v1/browser/healthLiveness and readiness check — served by the central API (api.hoody.com), not the per-container URL.

24 endpoints across four functional areas. 23 run against your browser container URL using the short paths shown; the health check is the one exception, served by the central API at api.hoody.com/api/v1/browser/health. Methods follow the docs: browse and eval accept GET and POST; cookies add GET, POST, and DELETE.

home / kit / browser / capabilities
UNDER THE HOOD

More than a headless tab

Each instance is a fully configurable Chromium — stealth, fingerprints, proxies, and the Chrome DevTools Protocol, tuned per request.

Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id

Fingerprint profiles

Load a base profile by id, then override user agent, viewport, geolocation, timezone, and locale per request.

Patchright stealth

Chromium launches in stealth mode by default, using Patchright to blunt automated-browser detection.

Chrome DevTools Protocol

The /devtools-url endpoint hands back a WebSocket you can drive with Puppeteer, Playwright, or any CDP client.

Proxy & secure DNS

Route each instance through an HTTP or SOCKS5 proxy with auth and bypass lists; DNS-over-HTTPS is on by default.

Chromium channels & Firefox

Pin an exact Chromium version or a stable, beta, dev, or canary channel — or switch the engine to Firefox.

Logs & history

Tail 500-entry console and network ring buffers, and query or clear the instance's persistent browsing history.

home / kit / browser / start

Spin up a browser in one request

No Puppeteer install, no Chromium binaries, no headless plumbing. Start an instance and drive it over HTTP from any language.