Health, Metrics & Debugging
Section titled “Health, Metrics & Debugging”These endpoints expose runtime health metadata, buffered console and network logs, and on-disk browsing history for the hoody-browser service. Use them to verify a container is responsive, capture client-side errors and HTTP traffic for debugging, and query or purge navigation records.
All paths below are served directly from the browser container. The hostname always follows the pattern {projectId}-{containerId}-browser-1.{server}.containers.hoody.com.
Health Check
Section titled “Health Check”GET /api/v1/browser/health
Section titled “GET /api/v1/browser/health”Returns the standardized 9-field health contract shared by every kit service. The endpoint takes no parameters and always responds with 200 when the process is reachable.
This endpoint takes no parameters.
curl https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/api/v1/browser/healthimport { 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.health.check();{ "status": "ok", "service": "hoody-browser", "built": "2026-01-15T12:00:00.000Z", "started": "2026-01-20T08:32:11.000Z", "memory": { "rss": 134217728, "heap": 62914560 }, "fds": 42, "pid": 17, "ip": "172.18.0.6", "userAgent": "curl/8.5.0"}Console Logs
Section titled “Console Logs”GET /console
Section titled “GET /console”Returns the most recent buffered browser console messages (up to 500 entries). Includes console.log, console.error, console.warn, page errors, and any other message type the browser emitted. The buffer can be cleared atomically after the read.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
browser_id | query | string | Yes | Unique identifier for the browser instance (0-based index) |
tabId | query | integer | No | The ID of the tab to interact with |
start | query | boolean | No | Controls 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. The endpoint declares no schema default, so omitting it is NOT equivalent to sending true |
type | query | string | No | Filter by message type (log, error, warning, info, etc.) |
since | query | string | No | Only return logs after this ISO timestamp |
clear | query | boolean | No | Clear the buffer after reading. Default: false |
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/console?browser_id=0&tabId=2&type=error"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.debugging.getConsoleLogs({ browser_id: '0', tabId: 2, type: 'error' });{ "logs": [ { "timestamp": "2026-01-20T09:14:22.317Z", "type": "error", "text": "Uncaught TypeError: Cannot read properties of undefined (reading 'id')", "tabId": 2 }, { "timestamp": "2026-01-20T09:14:25.001Z", "type": "error", "text": "Failed to load resource: net::ERR_CONNECTION_REFUSED", "tabId": 2 } ], "count": 2}Network Logs
Section titled “Network Logs”GET /network
Section titled “GET /network”Returns buffered network request/response entries (up to 500 entries). Each entry includes the HTTP method, URL, status code, resource type, and the tab that issued the request.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
browser_id | query | string | Yes | Unique identifier for the browser instance (0-based index) |
tabId | query | integer | No | The ID of the tab to interact with |
start | query | boolean | No | Controls 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. The endpoint declares no schema default, so omitting it is NOT equivalent to sending true |
since | query | string | No | Only return logs after this ISO timestamp |
clear | query | boolean | No | Clear the buffer after reading. Default: false |
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/network?browser_id=0&tabId=2"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.debugging.getNetworkLogs({ browser_id: '0', tabId: 2 });{ "logs": [ { "timestamp": "2026-01-20T09:14:22.301Z", "method": "GET", "url": "https://example.com/api/users", "status": 200, "resourceType": "fetch", "tabId": 2 }, { "timestamp": "2026-01-20T09:14:23.844Z", "method": "POST", "url": "https://example.com/api/login", "status": 401, "resourceType": "fetch", "tabId": 2 } ], "count": 2}Browsing History
Section titled “Browsing History”History is recorded for every navigation, both API-triggered via /browse and page-initiated via in-browser link clicks. Records are read from persistent storage (symlink directories).
GET /history
Section titled “GET /history”Returns paginated browsing history entries. Results can be filtered by time, domain, and browser instance.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | No | Return entries after this ISO 8601 timestamp |
domain | query | string | No | Filter by domain (exact match) |
browser_id | query | string | No | Filter by browser ID |
limit | query | integer | No | Maximum entries to return (1-500). Default: 50 |
offset | query | integer | No | Number of entries to skip for pagination. Default: 0 |
curl "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/history?domain=example.com&limit=20"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.history.list({ domain: 'example.com', limit: 20 });{ "entries": [ { "id": "1737365662000-a3f2", "url": "https://example.com/dashboard", "requestedUrl": "https://example.com/dashboard", "title": "Dashboard - Example", "domain": "example.com", "tabId": 1, "browserId": "0", "browserPort": 9222, "sessionId": "sess_2026-01-20T08:32:11Z", "httpStatus": 200, "error": null, "source": "api", "timestamp": "2026-01-20T09:14:22.000Z", "created": false, "reused": true } ], "total": 1, "has_more": false, "limit": 20, "offset": 0}{ "error": "Invalid limit: must be between 1 and 500", "code": "INVALID_PARAMETER", "details": { "parameter": "limit", "value": "1000" }}{ "error": "Browsing history is disabled", "code": "HISTORY_DISABLED", "details": { "feature": "browsing_history" }}DELETE /history
Section titled “DELETE /history”Deletes browsing history entries. Omit both filters to delete all history; combine before and browser_id to target a specific window and instance.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
before | query | string | No | Delete entries before this ISO 8601 timestamp |
browser_id | query | string | No | Delete entries for specific browser ID only |
curl -X DELETE "https://{projectId}-{containerId}-browser-1.{server}.containers.hoody.com/history?before=2026-01-01T00:00:00.000Z"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.history.clear({ before: '2026-01-01T00:00:00.000Z' });{ "deleted": 142}{ "error": "Invalid timestamp format for 'before'", "code": "INVALID_PARAMETER", "details": { "parameter": "before", "value": "yesterday" }}{ "error": "Browsing history is disabled", "code": "HISTORY_DISABLED", "details": { "feature": "browsing_history" }}