Instance Management
Section titled “Instance Management”The Instance Management endpoints control the lifecycle of browser instances. Use /start to create a new instance or retrieve metadata for an existing one, /restart to stop and recreate an instance (inheriting the options the instance was created with), and /stop to terminate an instance. Browser state (cookies, tabs, console and network buffers) is reset on /restart.
GET /api/v1/browser/start
Section titled “GET /api/v1/browser/start”Creates a new browser instance or returns metadata for an existing one. This is the primary endpoint for explicitly creating browser instances.
Calling /start on a running instance returns its current metadata and ignores new options, except that a different stealth value is rejected with 409 INSTANCE_BACKEND_MISMATCH.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
browser_id | query | string | No | Selects the instance: SDK and CLI clients send the request to the browser-<N> service host. A value that conflicts with the host’s instance is refused with 400 INSTANCE_SELECTOR_CONFLICT. Against a bare server it selects nothing; address instances there with browser_host + browser_port. |
chromiumVersion | query | string | No | Chromium/Chrome version selection. Applies only when browser=chromium. Supported formats: full version (136.0.7103.113), major version (136), channel tag (stable, beta, dev, canary). The request blocks until the requested build is available on the server. |
fingerprintId | query | string | No | Base fingerprint profile id. The server uses the context and launch defaults of this profile, then applies any request overrides over them. An unknown id starts with an empty profile. |
useRemoteDebuggingPort | query | boolean | No | If true, the child process launches Chromium with --remote-debugging-port and populates webSocketDebuggerUrl in metadata responses. Default: true. |
remoteDebuggingPort | query | integer | No | Ignored. The kit always assigns the DevTools port itself; read the assigned URLs from /devtools-url or the instance metadata. Kept only so older clients do not fail validation. |
remoteDebuggingAddress | query | string | No | Interface address the DevTools port binds to. Defaults to 0.0.0.0; the port is only reachable through the container proxy’s cdp-{N} relay. |
extensions | query | string | No | Comma-separated list (or JSON array string) of absolute extension directory paths. Requires showBrowser=true (headful mode) and will launch a persistent profile. |
extensionsDir | query | string | No | Directory containing extension subfolders to load. Requires showBrowser=true and will launch a persistent profile. |
extensionsStoreIds | query | string | No | Comma-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. Downloads of the same extension are serialized across instances; an instance that waits more than 5 minutes for another instance’s download fails with a “try again later” error. |
proxyServer | query | string | No | Proxy server URL (http://, https://, socks5://, socks5h://). Example: socks5://127.0.0.1:9050. |
proxyUsername | query | string | No | Proxy username (if required). |
proxyPassword | query | string | No | Proxy password (if required). |
proxyBypass | query | string | No | Comma-separated list of hosts that should bypass the proxy. |
enableQuic | query | boolean | No | Enable QUIC/HTTP3 transport. Defaults to false (QUIC blocked). Use enableQuic=true to re-enable QUIC. |
enableDnsOverHttps | query | boolean | No | Enable DNS-over-HTTPS for browser DNS resolution. Defaults to true. |
dnsOverHttpsUrl | query | string | No | DoH resolver URL (HTTPS only). Defaults to https://cloudflare-dns.com/dns-query. |
display | query | integer | string | No | X display number or identifier for headful mode. Required when showBrowser=true and no DISPLAY environment variable is set on the server. |
showBrowser | query | boolean | No | Whether to run the browser headful (visible). Defaults to true. |
sessionName | query | string | No | Custom session name for identifying this browser instance. |
timezoneId | query | string | No | IANA timezone identifier for browser geolocation. |
locale | query | string | No | BCP 47 language tag for browser locale. |
userAgent | query | string | No | User agent string to apply to the browser context. |
viewport | query | string | No | Viewport configuration as JSON string. Example: {"width":1920,"height":1080,"deviceScaleFactor":1}. Pass null to disable fixed-viewport emulation entirely. |
noViewport | query | boolean | No | Set to true to disable fixed-viewport emulation (alias for viewport=null). Default: false. Cannot be combined with a fixed viewport object. |
geolocation | query | string | No | Geolocation configuration as JSON string. Example: {"latitude":40.7128,"longitude":-74.0060,"accuracy":100}. Anything other than a JSON object (null, an array, a number) is a 400 VALIDATION_ERROR. |
launchArguments | query | array | No | Additional Chromium/Firefox command-line arguments. Pass the query key repeatedly (launchArguments=--a&launchArguments=--b) or a single JSON array string (launchArguments=["--a","--b"]). Entries must be strings (400 otherwise). |
browser | query | string | No | Browser engine to use (chromium or firefox). chrome is accepted as an alias of chromium. Fixed for the life of the instance. Default: chromium. |
firefoxVersion | query | string | No | Firefox version label (informational only). Playwright-managed Firefox builds are used by default. If omitted, a Playwright Firefox build is downloaded on demand. |
firefoxExecutablePath | query | string | No | Absolute path to a custom Firefox executable (overrides download). |
showDevtools | query | boolean | No | Whether to open DevTools on launch (Chromium only). Default: false. |
userProfile | query | object | No | Optional user profile object (JSON string): locale, timezoneId, userAgentString, geolocation and deviceProfile.viewport. Precedence for each field: the top-level request option > userProfile > the fingerprint profile > the engine default. |
stealth | query | boolean | No | Launch 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. |
iframe | query | boolean | No | Enable 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_url | query | string | No | Explicit URL for the display iframe. If not provided, the URL is auto-detected from the Host header subdomain pattern. |
maximize_new_windows | query | boolean | No | Control the maximize_new_windows flag stamped onto generated display URLs (iframe pages, status pages, iframe_url metadata). The flag is always explicit (true or false); when true the hoody-display client opens new top-level app windows maximized. Default: true. Explicit iframe_url values are never modified. |
Request
Section titled “Request”curl -X GET "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/start?locale=en-US&timezoneId=America/New_York" \ -H "Authorization: Bearer <token>"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.browser.instances.start({ locale: 'en-US', timezoneId: 'America/New_York' });Response
Section titled “Response”{ "sessionId": "f8e9d7c6-b5a4-3210-9876-543210fedcba", "sessionName": "my-automation-session", "browser_host": "0.0.0.0", "browser_port": 9223, "quicDisabled": true, "http3Disabled": true, "dnsOverHttpsEnabled": true, "dnsOverHttpsUrl": "https://cloudflare-dns.com/dns-query", "browserName": "chromium", "browserFullVersion": "136.0.7103.113", "browserExecutablePath": "/hoody/storage/hoody-browser/chrome/chrome/linux-136.0.7103.113/chrome-linux64/chrome", "operatingSystemName": "Linux", "operatingSystemPlatform": "linux", "operatingSystemVersion": "6.8.0", "userAgentString": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36", "timezoneId": "America/New_York", "locale": "en-US", "viewport": { "width": 1920, "height": 1080 }, "renderingEngine": "chromium", "renderingEngineVersion": "136.0.7103.113", "useRemoteDebuggingPort": true, "remoteDebuggingAddress": "0.0.0.0", "webSocketDebuggerUrl": "wss://{projectId}-{containerId}-cdp-1.{server}.containers.hoody.com/devtools/browser/f8e9d7c6-b5a4-3210-9876-543210fedcba", "devtoolsHttpUrl": "https://{projectId}-{containerId}-cdp-1.{server}.containers.hoody.com/json/version", "devtoolsFrontendUrl": "https://{projectId}-{containerId}-cdp-1.{server}.containers.hoody.com", "iframe_url": "https://{projectId}-{containerId}-display-501.{server}.containers.hoody.com/?maximize_new_windows=true", "extensions": [], "tabs": [ { "id": 1, "url": "about:blank", "isActive": true } ]}{ "error": "browser_port must be an integer", "code": "VALIDATION_ERROR"}INSTANCE_SELECTOR_CONFLICT: the request came through a browser-{N} service hostname, which serves browser N only, and a browser_port, port, display, browser_id, browser_host or host in its query or JSON body names a different instance (browser_host is the one the query carries). details.field names the parameter, and nothing was run.
| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Validation Error | One or more request parameters failed validation. The message names the parameter (for example “browser_port must be an integer” or “Invalid browser_host format”). | Read the message: it names the parameter and the constraint that failed |
INSTANCE_SELECTOR_CONFLICT | Instance Selector Conflict | The request came through a browser-{N} hostname and names a different instance | Call the other instance’s own browser-{N} hostname, or leave the parameter out |
{ "error": "Instance backend mismatch: running with stealth=true (patchright), requested stealth=false (playwright). Switching stealth mode requires a different backend. Stop this instance first via /stop?browser_host=0.0.0.0&browser_port=9223, then call /start again.", "code": "INSTANCE_BACKEND_MISMATCH"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTANCE_BACKEND_MISMATCH | Instance Backend Mismatch | The existing instance was launched with a different stealth mode/backend | Stop the running instance first, then start again with the new stealth mode |
PORT_IN_USE | Port In Use | The instance’s browser_port is already bound by another process | Pick another browser_port, or stop the process holding it |
The request was refused by the HTTP layer before routing because the request head (request line with query string, plus all headers) exceeded 16 KiB (16,384 bytes). The response is a bare status line with no JSON body and no CORS headers, so a browser page sees a network error. Pass large option sets in the JSON body of a POST /api/v1/browser/browse, POST /api/v1/browser/eval or POST /api/v1/browser/cookies that starts the instance.
startTimeout:
{ "error": "Child process timeout exceeded", "code": "INSTANCE_START_TIMEOUT"}launchFailed:
{ "error": "Browser launch failed", "code": "BROWSER_LAUNCH_ERROR"}initFailed:
{ "error": "Browser instance initialization failed", "code": "CHILD_PROCESS_ERROR"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTANCE_START_TIMEOUT | Instance Start Timeout | The child process did not finish starting within --worker-timeout | Retry; if it persists, raise —worker-timeout or check host load |
BROWSER_LAUNCH_ERROR | Browser Launch Failed | The browser process itself failed to launch | Retry with a chromiumVersion the deployment provides: a full version, a major version, or a channel tag such as stable |
CHILD_PROCESS_ERROR | Instance Initialization Failed | The instance failed to initialize for a reason other than the browser launch | Check the server log; the published message is server-authored and deliberately opaque |
INTERNAL_ERROR | Internal Error | An unexpected failure the server declines to classify further | Check the server log for the requestId |
{ "error": "Instance is temporarily unavailable (prior process exit unconfirmed)", "code": "INSTANCE_QUARANTINED"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTANCE_QUARANTINED | Instance Quarantined | A prior child at this address has not been confirmed exited | Retry after a few seconds, or start on a different browser_port |
{ "error": "Timed out waiting for another process to finish installing Chrome 136.0.7103.113; try again later", "code": "INSTALL_IN_PROGRESS"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTALL_IN_PROGRESS | Install In Progress | Another process is installing a browser build or extension this instance needs | Retry after the Retry-After delay; the install finishes in the background |
DISPLAY_UNAVAILABLE | Display Unavailable | A headful instance needs a display, and none accepts connections | Start the instance with showBrowser=false (headless), or retry once the display runs |
The instance launch took longer than the server’s request timeout (--request-timeout, default 600000 ms). Parent-generated, with details.phase launch and details.outcome unknown: the launch is not cancelled and the instance may still come up. Check with /metadata?start=false (404 until it is running) instead of retrying at once.
| Error Code | Title | Description | Resolution |
|---|---|---|---|
TIMEOUT | Timeout | The instance launch outlasted the request timeout; its outcome is unknown | Poll /metadata with start=false until it answers 200, or raise —request-timeout |
GET /api/v1/browser/restart
Section titled “GET /api/v1/browser/restart”Stops and recreates a browser instance. The rebuild inherits the options the instance was created with (engine, headless mode, locale, viewport, proxy, …); any parameter passed on this request overrides the inherited value, except the engine: a request that would switch between Patchright and Playwright answers 409 INSTANCE_BACKEND_MISMATCH and changes nothing. Firefox always runs on Playwright, so browser=firefox is accepted only for an instance created with stealth=false (or already Firefox); a default (stealth) instance is refused, even with stealth=false added. To move a default instance to Firefox, /stop it and call /start?browser=firefox. Browser state (cookies, tabs, console and network buffers) is reset.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
browser_id | query | string | No | Selects the instance: SDK and CLI clients send the request to the browser-<N> service host. A value that conflicts with the host’s instance is refused with 400 INSTANCE_SELECTOR_CONFLICT. Against a bare server it selects nothing; address instances there with browser_host + browser_port. |
start | query | boolean | No | Controls instance creation behavior. Three states, all distinct: omitted means “create one if this deployment creates instances automatically”; false means “never create one”; true means “create one even where automatic creation is turned off”. Because omitting it is not equivalent to sending true, this parameter declares no schema default. |
chromiumVersion | query | string | No | Chromium/Chrome version selection. Applies only when browser=chromium. Supported formats: full version (136.0.7103.113), major version (136), channel tag (stable, beta, dev, canary). The request blocks until the requested build is available on the server. |
fingerprintId | query | string | No | Base fingerprint profile id. The server uses the context and launch defaults of this profile, then applies any request overrides over them. An unknown id starts with an empty profile. |
useRemoteDebuggingPort | query | boolean | No | If true, the child process launches Chromium with --remote-debugging-port and populates webSocketDebuggerUrl in metadata responses. Default: true. |
remoteDebuggingPort | query | integer | No | Ignored. The kit always assigns the DevTools port itself. Kept only so older clients do not fail validation. |
remoteDebuggingAddress | query | string | No | Interface address the DevTools port binds to. Defaults to 0.0.0.0; the port is only reachable through the container proxy’s cdp-{N} relay. |
extensions | query | string | No | Comma-separated list (or JSON array string) of absolute extension directory paths. Requires showBrowser=true (headful mode) and will launch a persistent profile. |
extensionsDir | query | string | No | Directory containing extension subfolders to load. Requires showBrowser=true and will launch a persistent profile. |
extensionsStoreIds | query | string | No | Comma-separated list (or JSON array string) of Chrome Web Store extension IDs to download and load (Chromium only). Requires showBrowser=true. Downloads of the same extension are serialized across instances; an instance that waits more than 5 minutes for another instance’s download fails with a “try again later” error. |
proxyServer | query | string | No | Proxy server URL (http://, https://, socks5://, socks5h://). |
proxyUsername | query | string | No | Proxy username (if required). |
proxyPassword | query | string | No | Proxy password (if required). |
proxyBypass | query | string | No | Comma-separated list of hosts that should bypass the proxy. |
enableQuic | query | boolean | No | Enable QUIC/HTTP3 transport. Defaults to false (QUIC blocked). |
enableDnsOverHttps | query | boolean | No | Enable DNS-over-HTTPS for browser DNS resolution. Defaults to true. |
dnsOverHttpsUrl | query | string | No | DoH resolver URL (HTTPS only). Defaults to https://cloudflare-dns.com/dns-query. |
display | query | integer | string | No | X display number or identifier for headful mode. Required when showBrowser=true and no DISPLAY environment variable is set on the server. |
showBrowser | query | boolean | No | Whether to run the browser headful (visible). Defaults to true. |
sessionName | query | string | No | Custom session name for identifying this browser instance. |
timezoneId | query | string | No | IANA timezone identifier for browser geolocation. |
locale | query | string | No | BCP 47 language tag for browser locale. |
userAgent | query | string | No | User agent string to apply to the browser context. |
viewport | query | browser_Viewport | No | Viewport configuration as JSON string. Example: {"width":1920,"height":1080,"deviceScaleFactor":1}. Pass null to disable fixed-viewport emulation entirely. |
noViewport | query | boolean | No | Set to true to disable fixed-viewport emulation (alias for viewport=null). Default: false. Cannot be combined with a fixed viewport object. |
geolocation | query | browser_Geolocation | No | Geolocation configuration as JSON string. Example: {"latitude":40.7128,"longitude":-74.0060,"accuracy":100}. Anything other than a JSON object is a 400 VALIDATION_ERROR. |
launchArguments | query | array | No | Additional Chromium/Firefox command-line arguments. Pass the query key repeatedly or a single JSON array string. Entries must be strings (400 otherwise). |
browser | query | string | No | Browser engine to use (chromium or firefox). chrome is accepted as an alias of chromium. Fixed for the life of the instance. Default: chromium. |
firefoxVersion | query | string | No | Firefox version label (informational only). Playwright-managed Firefox builds are used by default. |
firefoxExecutablePath | query | string | No | Absolute path to a custom Firefox executable (overrides download). |
showDevtools | query | boolean | No | Whether to open DevTools on launch (Chromium only). Default: false. |
userProfile | query | object | No | Optional user profile object (JSON string): locale, timezoneId, userAgentString, geolocation and deviceProfile.viewport. Precedence: top-level request option > userProfile > fingerprint profile > engine default. |
stealth | query | boolean | No | Launch Chromium in stealth mode using Patchright. Only applies to browser=chromium. Ignored for Firefox. Defaults to true. Bare ?stealth is treated as true. |
iframe | query | boolean | No | Enable or disable the full-page display iframe on the root URL. Default: true. |
iframe_url | query | string | No | Explicit URL for the display iframe. |
maximize_new_windows | query | boolean | No | Control the maximize_new_windows flag stamped onto the generated display URL. Default: true. |
Request
Section titled “Request”curl -X GET "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/restart?locale=en-US" \ -H "Authorization: Bearer <token>"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.browser.instances.restart({ locale: 'en-US' });Response
Section titled “Response”{ "message": "Restarted", "meta": { "engine": "playwright", "headless": false, "browser_host": "127.0.0.1", "browser_port": 9223, "sessionId": "7a1a3e23d6b8b4f4a9e2", "sessionName": "7a1a3e23d6b8b4f4a9e2", "browserName": "chromium", "browserFullVersion": "136.0.7103.113" }}{ "error": "extensions require showBrowser=true", "code": "VALIDATION_ERROR"}INSTANCE_SELECTOR_CONFLICT: the request came through a browser-{N} service hostname, which serves browser N only, and a browser_port, port, display, browser_id, browser_host or host in its query or JSON body names a different instance (browser_host is the one the query carries). details.field names the parameter, and nothing was run.
| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Validation Error | One or more request parameters failed validation | Check the error details for the specific parameter and constraint that failed |
INSTANCE_SELECTOR_CONFLICT | Instance Selector Conflict | The request came through a browser-{N} hostname and names a different instance | Call the other instance’s own browser-{N} hostname, or leave the parameter out |
{ "error": "No browser instance runs at this address and start=false forbids creating one", "code": "NOT_FOUND"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
NOT_FOUND | Instance Not Found | No browser instance runs at this address, and start=false (or disabled auto-start) forbids creating one | Create the instance with /start, or omit start (or send start=true) to let /restart create it |
{ "error": "Instance backend mismatch: switching stealth mode requires a different backend", "code": "INSTANCE_BACKEND_MISMATCH"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTANCE_BACKEND_MISMATCH | Instance Backend Mismatch | The existing instance was launched with a different stealth mode/backend | Stop the running instance first, then start again with the new stealth mode |
PORT_IN_USE | Port In Use | The instance’s browser_port is already bound by another process | Pick another browser_port, or stop the process holding it |
The request was refused by the HTTP layer before routing because the request head (request line with query string, plus all headers) exceeded 16 KiB (16,384 bytes). The response is a bare status line with no JSON body and no CORS headers, so a browser page sees a network error. Pass large option sets in the JSON body of a POST /api/v1/browser/browse, POST /api/v1/browser/eval or POST /api/v1/browser/cookies that starts the instance.
{ "error": "Child process timeout exceeded", "code": "INSTANCE_START_TIMEOUT"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTANCE_START_TIMEOUT | Instance Start Timeout | The child process did not finish starting within --worker-timeout | Retry; if it persists, raise —worker-timeout or check host load |
BROWSER_LAUNCH_ERROR | Browser Launch Failed | The browser process itself failed to launch | Retry with a chromiumVersion the deployment provides: a full version, a major version, or a channel tag such as stable |
CHILD_PROCESS_ERROR | Instance Initialization Failed | The instance failed to initialize for a reason other than the browser launch | Check the server log; the published message is server-authored and deliberately opaque |
INTERNAL_ERROR | Internal Error | An unexpected failure the server declines to classify further | Check the server log for the requestId |
{ "error": "Instance is temporarily unavailable (prior process exit unconfirmed)", "code": "INSTANCE_QUARANTINED"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTANCE_QUARANTINED | Instance Quarantined | A prior child at this address has not been confirmed exited | Retry after a few seconds, or start on a different browser_port |
{ "error": "Timed out waiting for another process to finish installing Chrome 136.0.7103.113; try again later", "code": "INSTALL_IN_PROGRESS"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INSTALL_IN_PROGRESS | Install In Progress | Another process is installing a browser build or extension this instance needs | Retry after the Retry-After delay; the install finishes in the background |
DISPLAY_UNAVAILABLE | Display Unavailable | A headful instance needs a display, and none accepts connections | Start the instance with showBrowser=false (headless), or retry once the display runs |
The restart (stopping the old instance and launching the new one) took longer than the server’s request timeout (--request-timeout, default 600000 ms). Parent-generated, with details.phase launch and details.outcome unknown: the launch is not cancelled and the instance may still come up. Check with /metadata?start=false (404 until it is running) instead of retrying at once.
| Error Code | Title | Description | Resolution |
|---|---|---|---|
TIMEOUT | Timeout | The instance launch outlasted the request timeout; its outcome is unknown | Poll /metadata with start=false until it answers 200, or raise —request-timeout |
GET /api/v1/browser/stop
Section titled “GET /api/v1/browser/stop”Stops an active browser instance. This terminates the child process and releases its resources.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
browser_id | query | string | No | Selects the instance: SDK and CLI clients send the request to the browser-<N> service host. A value that conflicts with the host’s instance is refused with 400 INSTANCE_SELECTOR_CONFLICT. Against a bare server it selects nothing; address instances there with browser_host + browser_port. |
Request
Section titled “Request”curl -X GET "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/stop" \ -H "Authorization: Bearer <token>"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.browser.instances.stop();Response
Section titled “Response”{ "message": "Stopped", "meta": { "engine": "playwright", "headless": false, "browser_host": "127.0.0.1", "browser_port": 9223, "sessionId": "7a1a3e23d6b8b4f4a9e2", "sessionName": "7a1a3e23d6b8b4f4a9e2", "browserName": "chromium", "browserFullVersion": "136.0.7103.113" }}{ "error": "browser_port must be an integer", "code": "VALIDATION_ERROR"}INSTANCE_SELECTOR_CONFLICT: the request came through a browser-{N} service hostname, which serves browser N only, and a browser_port, port, display, browser_id, browser_host or host in its query or JSON body names a different instance (browser_host is the one the query carries). details.field names the parameter, and nothing was run.
| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Validation Error | A request parameter failed validation; the message names it | Fix the named parameter and retry |
INSTANCE_SELECTOR_CONFLICT | Instance Selector Conflict | The request came through a browser-{N} hostname and names a different instance | Call the other instance’s own browser-{N} hostname, or leave the parameter out |
{ "error": "Instance not found", "code": "NOT_FOUND"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
NOT_FOUND | Not Found | No browser instance runs at this address (or, on a tab route, the instance has no tab at all) | Check browser_host/browser_port, or create the instance with /start |