Skip to content

The Instance Management endpoints control the lifecycle of isolated browser instances. Each instance is uniquely identified by a browser_id (a 0-based index) and runs as an independent child process with its own configuration, profile, and DevTools endpoint.

Use these endpoints to start a new instance (or retrieve an existing one), stop a running instance, or restart one with an updated configuration.


Creates a new browser instance or returns metadata for an existing one identified by browser_id. The response includes the webSocketDebuggerUrl field for Chrome DevTools remote debugging when useRemoteDebuggingPort=true.

NameInTypeRequiredDescription
browser_idquerystringYesUnique identifier for the browser instance (0-based index)
chromiumVersionquerystringNoChromium/Chrome version selection for the instance. This option applies only when browser=chromium. Supported formats: full version (136.0.7103.113), major version (136, mapped to a known stable patch for the current OS), or channel tag (stable, beta, dev, canary). The server will block until the required browser is downloaded into BROWSERS_DIR.
fingerprintIdquerystringNoBase fingerprint profile id. The server will load storage/config/fingerprints/<fingerprintId>.json and use its context and launch defaults, then apply any request overrides.
useRemoteDebuggingPortquerybooleanNoIf true, the child process will launch Chromium with --remote-debugging-port and will populate webSocketDebuggerUrl in metadata responses. Default: true
remoteDebuggingPortqueryintegerNoOptional fixed DevTools port (only used when useRemoteDebuggingPort=true). If omitted, a free port is chosen.
remoteDebuggingAddressquerystringNoInterface address for DevTools. Defaults to 127.0.0.1. Use 0.0.0.0 only in trusted environments.
extensionsquerystringNoComma-separated list (or JSON array string) of absolute extension directory paths to load. Extensions require showBrowser=true (headful mode) and will launch a persistent profile.
extensionsDirquerystringNoDirectory containing extension subfolders to load (each subfolder is treated as an extension). Extensions require showBrowser=true (headful mode) and will launch a persistent profile.
extensionsStoreIdsquerystringNoComma-separated list (or JSON array string) of Chrome Web Store extension IDs to download and load. Requires showBrowser=true and works only with browser=chromium.
proxyServerquerystringNoProxy server for browser traffic. Supports http://, https://, socks5://, or socks5h://. Example: socks5://127.0.0.1:9050
proxyUsernamequerystringNoProxy username (if required)
proxyPasswordquerystringNoProxy password (if required)
proxyBypassquerystringNoComma-separated list of hosts that should bypass the proxy
enableQuicquerybooleanNoEnable QUIC/HTTP3 transport. Defaults to false (QUIC blocked). Use enableQuic=true to re-enable QUIC. Default: false
enableDnsOverHttpsquerybooleanNoEnable DNS-over-HTTPS for browser DNS resolution. Defaults to true. Default: true
dnsOverHttpsUrlquerystringNoDoH resolver URL (HTTPS only). Defaults to Cloudflare: https://cloudflare-dns.com/dns-query. Default: "https://cloudflare-dns.com/dns-query"
displayqueryinteger | stringNoX display number or identifier for headful mode. Required when showBrowser=true and no DISPLAY environment variable is set on the server.
showBrowserquerybooleanNoWhether to run the browser headful (visible). Defaults to true. Default: true
sessionNamequerystringNoCustom session name for identifying this browser instance
timezoneIdquerystringNoIANA timezone identifier for browser geolocation
localequerystringNoBCP 47 language tag for browser locale
userAgentquerystringNoUser agent string to apply to the browser context.
viewportquerystringNoViewport configuration as JSON string. Example: {"width":1920,"height":1080,"deviceScaleFactor":1}
geolocationquerystringNoGeolocation configuration as JSON string. Example: {"latitude":40.7128,"longitude":-74.0060,"accuracy":100}
stealthquerybooleanNoLaunch Chromium in stealth mode using Patchright (anti-detection patches). Only applies to browser=chromium. Ignored for Firefox. Defaults to true. Bare ?stealth is treated as true. Default: true
iframequerybooleanNoEnable or disable the full-page display iframe on the root URL. When enabled (default), navigating to / serves an HTML page with an iframe pointing to the Hoody display URL. Default: true
iframe_urlquerystringNoExplicit URL for the display iframe. If not provided, the URL is auto-detected from the Host header subdomain pattern.
noViewportquerybooleanNoSet to true to disable fixed-viewport emulation (alias for viewport=null). The page then resizes with the browser window instead of being pinned to an emulated resolution. Cannot be combined with a fixed viewport object.

This endpoint takes no request body.

const instance = await client.browser.instances.start({
browser_id: "0",
showBrowser: false,
timezoneId: "America/New_York",
locale: "en-US",
viewport: JSON.stringify({ width: 1920, height: 1080, deviceScaleFactor: 1 }),
});
{
"engine": "playwright",
"stealth": true,
"headless": false,
"chromiumBuildId": "136.0.7103.113",
"chromiumExecutablePath": "/hoody/storage/hoody-browser/chrome/chrome/linux-136.0.7103.113/chrome-linux64/chrome",
"browserExecutablePath": "/hoody/storage/hoody-browser/chrome/chrome/linux-136.0.7103.113/chrome-linux64/chrome",
"fingerprintId": "default",
"display": ":0",
"iframe_url": null,
"browser_id": "0",
"browser_host": "127.0.0.1",
"browser_port": 9222,
"sessionId": "s_8d3c2b1f4e5a",
"sessionName": "primary",
"timezoneId": "America/New_York",
"locale": "en-US",
"geolocation": {
"latitude": 40.7128,
"longitude": -74.0060,
"accuracy": 100
},
"viewport": {
"width": 1920,
"height": 1080,
"deviceScaleFactor": 1
},
"userAgentString": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.113 Safari/537.36",
"browserName": "chromium",
"browserFullVersion": "136.0.7103.113",
"operatingSystemName": "Linux",
"operatingSystemPlatform": "Linux",
"operatingSystemVersion": "5.15.0",
"renderingEngine": "Blink",
"renderingEngineVersion": "136.0.7103.113",
"webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/b6e7d6f4-8d1e-4f3a-9b2c-1d4e5f6g7h8i",
"devtoolsHttpUrl": "http://127.0.0.1:9222/json/version",
"devtoolsFrontendUrl": null,
"extensions": [],
"useRemoteDebuggingPort": true,
"remoteDebuggingPort": 9222,
"remoteDebuggingAddress": "0.0.0.0",
"quicDisabled": true,
"http3Disabled": true,
"dnsOverHttpsEnabled": true,
"dnsOverHttpsUrl": "https://cloudflare-dns.com/dns-query",
"tabs": [
{
"id": 1,
"url": "about:blank"
}
]
}

Stops an active browser instance for the provided browser_id. This terminates the child process and releases its resources.

NameInTypeRequiredDescription
browser_idquerystringYesUnique identifier for the browser instance (0-based index)

This endpoint takes no request body.

const result = await client.browser.instances.stop({
browser_id: "0",
});
{
"message": "Stopped",
"meta": {
"browser_id": "0",
"engine": "playwright",
"headless": false
}
}

Stops and recreates a browser instance using the provided configuration. Accepts the same parameters as /start, plus Chromium-specific options (launchArguments, showDevtools, userProfile) and Firefox options (firefoxVersion, firefoxExecutablePath).

NameInTypeRequiredDescription
browser_idquerystringYesUnique identifier for the browser instance (0-based index)
chromiumVersionquerystringNoChromium/Chrome version selection for the instance. This option applies only when browser=chromium. Supported formats: full version (136.0.7103.113), major version (136, mapped to a known stable patch for the current OS), or channel tag (stable, beta, dev, canary). The server will block until the required browser is downloaded into BROWSERS_DIR.
fingerprintIdquerystringNoBase fingerprint profile id. The server will load storage/config/fingerprints/<fingerprintId>.json and use its context and launch defaults, then apply any request overrides.
useRemoteDebuggingPortquerybooleanNoIf true, the child process will launch Chromium with --remote-debugging-port and will populate webSocketDebuggerUrl in metadata responses. Default: true
remoteDebuggingPortqueryintegerNoOptional fixed DevTools port (only used when useRemoteDebuggingPort=true). If omitted, a free port is chosen.
remoteDebuggingAddressquerystringNoInterface address for DevTools. Defaults to 127.0.0.1. Use 0.0.0.0 only in trusted environments.
extensionsquerystringNoComma-separated list (or JSON array string) of absolute extension directory paths to load. Extensions require showBrowser=true (headful mode) and will launch a persistent profile.
extensionsDirquerystringNoDirectory containing extension subfolders to load (each subfolder is treated as an extension). Extensions require showBrowser=true (headful mode) and will launch a persistent profile.
extensionsStoreIdsquerystringNoChrome Web Store extension IDs to download and load (Chromium only). Requires showBrowser=true and works only with browser=chromium.
proxyServerquerystringNoProxy server URL (http, https, socks5, socks5h)
proxyUsernamequerystringNoProxy username (if required)
proxyPasswordquerystringNoProxy password (if required)
proxyBypassquerystringNoComma-separated list of hosts that should bypass the proxy
enableQuicquerybooleanNoEnable QUIC/HTTP3 transport. Defaults to false (QUIC blocked). Use enableQuic=true to re-enable QUIC. Default: false
enableDnsOverHttpsquerybooleanNoEnable DNS-over-HTTPS for browser DNS resolution. Defaults to true. Default: true
dnsOverHttpsUrlquerystringNoDoH resolver URL (HTTPS only). Defaults to Cloudflare: https://cloudflare-dns.com/dns-query. Default: "https://cloudflare-dns.com/dns-query"
displayqueryinteger | stringNoX display number or identifier for headful mode. Required when showBrowser=true and no DISPLAY environment variable is set on the server.
showBrowserquerybooleanNoWhether to run the browser headful (visible). Defaults to true. Default: true
sessionNamequerystringNoCustom session name for identifying this browser instance
timezoneIdquerystringNoIANA timezone identifier for browser geolocation
localequerystringNoBCP 47 language tag for browser locale
userAgentquerystringNoUser agent string to apply to the browser context.
viewportqueryobjectNoViewport configuration as JSON string. Example: {"width":1920,"height":1080,"deviceScaleFactor":1}
geolocationqueryobjectNoGeolocation configuration as JSON string. Example: {"latitude":40.7128,"longitude":-74.0060,"accuracy":100}
launchArgumentsqueryarrayNoAdditional browser launch arguments (repeatable or JSON array)
browserquerystringNoBrowser engine to use (chromium or firefox). Default: "chromium"
firefoxVersionquerystringNoFirefox version label (informational only). Playwright-managed Firefox builds are used by default. If omitted, a Playwright Firefox build is downloaded on demand.
firefoxExecutablePathquerystringNoAbsolute path to a custom Firefox executable (overrides download)
showDevtoolsquerybooleanNoWhether to open DevTools on launch (Chromium only). Default: false
userProfilequeryobjectNoOptional user profile object (JSON string) for fingerprinting defaults
stealthquerybooleanNoLaunch Chromium in stealth mode using Patchright (anti-detection patches). Only applies to browser=chromium. Ignored for Firefox. Defaults to true. Bare ?stealth is treated as true. Default: true
iframequerybooleanNoEnable or disable the full-page display iframe on the root URL. Default: true
iframe_urlquerystringNoExplicit URL for the display iframe.
noViewportquerybooleanNoSet to true to disable fixed-viewport emulation (alias for viewport=null). The page then resizes with the browser window instead of being pinned to an emulated resolution. Cannot be combined with a fixed viewport object.

This endpoint takes no request body.

const result = await client.browser.instances.restart({
browser_id: "0",
chromiumVersion: "stable",
stealth: true,
showBrowser: false,
timezoneId: "America/New_York",
locale: "en-US",
});
{
"message": "Restarted",
"meta": {
"browser_id": "0",
"engine": "playwright",
"stealth": true,
"headless": true,
"chromiumBuildId": "136.0.7103.113"
}
}