makeThen open http://localhost:8400.
For Dokku deployment, see the deployment guide.
POST /api/v1/browsers launches a new browser. Each browser runs in its own container, and the server generates its browser_id automatically.
Example: curl -X POST localhost:8400/api/v1/browsers launches a container named chromium-P5xqk2md and returns:
{ "browser_id": "P5xqk2md", "status": "launched" }DELETE /api/v1/browsers/{browser_id} terminates the browser with the given browser_id and returns the result. If the browser does not exist, the server returns HTTP 404.
Example: curl -X DELETE localhost:8400/api/v1/browsers/xyz123 terminates the container named chromium-xyz123 and returns:
{ "status": "terminated" }GET /api/v1/browsers/{browser_id} returns information about the browser with the given browser_id. If the browser does not exist, the server returns HTTP 404.
Example: curl localhost:8400/api/v1/browsers/xyz123 returns:
{ "last_activity_timestamp": 1772069081 }GET /api/v1/browsers returns a JSON array with the IDs of all running browsers.
Example: curl localhost:8400/api/v1/browsers returns:
["xyz123", "abc234"]GET /api/v1/browsers/{browser_id}/cdp upgrades the connection to a WebSocket and tunnels a Chrome DevTools Protocol (CDP) session to the specified browser. If the browser's debugger URL cannot be resolved after several retries, the server closes the WebSocket with close code 4502.
Example (Playwright with Node.js):
import { chromium } from 'playwright';
(async () => {
const target = 'ws://localhost:8400/api/v1/browsers/B5xqk2md/cdp';
const browser = await chromium.connectOverCDP(target);
const [context] = browser.contexts();
const page = await context.newPage();
await page.goto('https://www.google.com');
await browser.close();
})();