Skip to content
Hoody.com

Inspect metadata, manage tabs, control the browser lifecycle, and manage cookies for a running browser instance. Every endpoint on this page is served by the browser-{N} control plane of a Hoody container; the parent proxy routes to it and is the only thing callers see from outside.

Returns every cookie in the browser context. Pass url to filter by URL.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoControls instance creation behavior. Default mode: instances are created automatically. Set to false to prevent creation. When auto-start is disabled globally, set to true to create an instance. Has no schema default; see the page note above.
urlquerystringNoFilter cookies by URL. Repeating this key in the query string is a 400 VALIDATION_ERROR (url must not be repeated): the parent’s rule is on the key, not on the operation, so it applies here even though this parameter is declared inline.
Terminal window
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/cookies?url=https%3A%2F%2Fexample.com" \
-H "Authorization: Bearer <token>"
{
"cookies": [
{
"name": "session_id",
"value": "abc123def456",
"domain": "example.com",
"path": "/",
"httpOnly": true,
"secure": true
},
{
"name": "preference",
"value": "dark",
"domain": ".example.com",
"path": "/",
"httpOnly": false,
"secure": false
}
]
}

Adds cookies to the browser context. Each cookie needs a name and a value; provide either an absolute url, or both domain and path.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoControls instance creation behavior. Has no schema default; see the page note above.
FieldTypeRequiredDescription
cookiesarrayYesArray of cookie objects to add. Each entry requires name and value; provide either url, or both domain and path (not both forms). Other optional keys are expires, httpOnly, secure, and sameSite (one of Strict, Lax, None). A cookie that breaks these rules is a 400 VALIDATION_ERROR whose message names the field, like cookies[0].sameSite; no cookie of the request is set.
Terminal window
curl -X POST "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/cookies" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"cookies": [
{
"name": "session_id",
"value": "abc123def456",
"url": "https://example.com",
"httpOnly": true,
"secure": true
}
]
}'
{
"added": 1
}

Removes every cookie from the browser context.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoControls instance creation behavior. Has no schema default; see the page note above.
Terminal window
curl -X DELETE "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/cookies" \
-H "Authorization: Bearer <token>"
{
"cleared": true
}

Retrieves detailed metadata for an existing browser instance, including session information, browser details, operating system, viewport, geolocation, open tabs, and the Chrome DevTools WebSocket URL when available. The webSocketDebuggerUrl field is the WebSocket endpoint for remote debugging.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoControls instance creation behavior. Has no schema default; see the page note above.
Terminal window
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/metadata" \
-H "Authorization: Bearer <token>"
{
"instanceGeneration": "gen_4a1c9f2b7d3e5081",
"engine": "playwright",
"stealth": false,
"headless": true,
"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": ":500",
"iframe_url": null,
"browser_host": "0.0.0.0",
"browser_port": 30001,
"sessionId": "s_8e2f4a1c9b3d",
"sessionName": "default",
"timezoneId": "America/New_York",
"locale": "en-US",
"viewport": { "width": 1280, "height": 800 },
"viewportSource": "creation",
"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 x86_64",
"operatingSystemVersion": "5.15.0",
"renderingEngine": "chromium",
"renderingEngineVersion": "136.0.7103.113",
"webSocketDebuggerUrl": "wss://67e89abc123def456789abcd-890abcdef12345678901cdef-cdp-1.node-example-1.containers.hoody.com/devtools/browser/b6e7d6f4-8d1e-4f3a-9b2c-1d4e5f6a7b8d",
"devtoolsHttpUrl": "https://67e89abc123def456789abcd-890abcdef12345678901cdef-cdp-1.node-example-1.containers.hoody.com/json/version",
"devtoolsFrontendUrl": "https://67e89abc123def456789abcd-890abcdef12345678901cdef-cdp-1.node-example-1.containers.hoody.com",
"extensions": [],
"useRemoteDebuggingPort": true,
"remoteDebuggingAddress": "0.0.0.0",
"quicDisabled": true,
"http3Disabled": true,
"dnsOverHttpsEnabled": true,
"dnsOverHttpsUrl": "https://cloudflare-dns.com/dns-query",
"tabs": [
{ "id": 1, "url": "https://example.com" }
]
}

Returns the Chrome DevTools WebSocket URL, HTTP discovery URL (/json/version), and DevTools frontend URL for the running instance. These URLs are populated only when the instance was launched with useRemoteDebuggingPort=true and browser=chromium; otherwise each field is null.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoAccepted for symmetry with the other control endpoints, but this endpoint returns 404 before the auto-start logic and ignores the value.
Terminal window
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/devtools-url" \
-H "Authorization: Bearer <token>"
{
"webSocketDebuggerUrl": "wss://67e89abc123def456789abcd-890abcdef12345678901cdef-cdp-1.node-example-1.containers.hoody.com/devtools/browser/b6e7d6f4-8d1e-4f3a-9b2c-1d4e5f6a7b8d",
"devtoolsHttpUrl": "https://67e89abc123def456789abcd-890abcdef12345678901cdef-cdp-1.node-example-1.containers.hoody.com/json/version",
"devtoolsFrontendUrl": "https://67e89abc123def456789abcd-890abcdef12345678901cdef-cdp-1.node-example-1.containers.hoody.com"
}

Lists every open tab in the browser instance.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoControls instance creation behavior. Has no schema default; see the page note above.
Terminal window
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/tabs" \
-H "Authorization: Bearer <token>"
[
{ "id": 1, "url": "https://example.com", "isActive": true },
{ "id": 2, "url": "https://docs.example.com/getting-started", "isActive": false }
]

Closes a specific browser tab by its tab ID. If no tabId is provided, closes the active tab (unless it is the last remaining tab).

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
startquerybooleanNoControls instance creation behavior. Has no schema default; see the page note above.
FieldTypeRequiredDescription
tabIdintegerNoThe ID of the tab to close. Omit to close the active tab.
Terminal window
curl -X POST "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/tab/close" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "tabId": 2 }'
{
"closed": 2,
"remaining": 1
}

Gracefully shuts down a specific browser instance. Responds 200 as soon as shutdown is initiated; teardown completes asynchronously, so poll /metadata?…&start=false for 404 to confirm the instance is gone. Use /stop for a synchronous kill.

NameInTypeRequiredDescription
browser_idquerystringNoSelects 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.
Terminal window
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/shutdown" \
-H "Authorization: Bearer <token>"
{
"message": "Instance shutdown successfully"
}

Returns the instance’s current viewport policy without mutating anything. viewport: null means fixed-viewport emulation is disabled (responsive: the page follows the real window size). source is creation until the first successful POST /api/v1/browser/viewport, then runtime. converged reports whether every live page currently reflects the policy.

NameInTypeRequiredDescription
browser_hostquerystringNoInstance host. Optional; must be paired with browser_port. When both are omitted, the single running instance is selected (400 AMBIGUOUS_INSTANCE with more than one).
browser_portqueryintegerNoInstance port. Optional; must be paired with browser_host.
Terminal window
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/viewport" \
-H "Authorization: Bearer <token>"
{
"viewport": { "width": 1280, "height": 800 },
"source": "creation",
"tabs": 1,
"converged": true
}

Mutates the running instance’s viewport policy. The body is JSON only.

  • Fixed size: {"viewport": {"width": 1280, "height": 800}}. Width and height are integers in the range 1..8192; no other keys are allowed.
  • Responsive (follow the real window): {"viewport": null}.

The policy applies to every currently-open tab; tabs opened later inherit it.

NameInTypeRequiredDescription
browser_hostquerystringNoInstance host. Optional; must be paired with browser_port. When both are omitted, the single running instance is selected (400 AMBIGUOUS_INSTANCE with more than one).
browser_portqueryintegerNoInstance port. Optional; must be paired with browser_host.
FieldTypeRequiredDescription
viewportobject | nullYesFixed size {width, height} (integers 1..8192, no other keys), or null for responsive.
Terminal window
curl -X POST "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/viewport" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "viewport": { "width": 1280, "height": 800 } }'
{
"viewport": { "width": 1280, "height": 800 },
"source": "runtime",
"tabs": 1,
"converged": true
}