Skip to main content
After creating a hosted session, connect to the returned cdpUrl with a CDP-compatible automation client.

Playwright

import { chromium } from "playwright";
import BrowsercashSDK from "@browsercash/sdk";

const client = new BrowsercashSDK({
  apiKey: process.env.DRIVER_API_KEY!,
  baseURL: "https://api.driver.dev",
});

const session = await client.browser.session.create({ type: "hosted" });
const browser = await chromium.connectOverCDP(session.cdpUrl);

const context = browser.contexts()[0] || (await browser.newContext());
const page = context.pages()[0] || (await context.newPage());

await page.goto("https://example.com");
console.log(await page.title());

await browser.close();
await client.browser.session.stop({ sessionId: session.sessionId });

Puppeteer

import puppeteer from "puppeteer-core";

const browser = await puppeteer.connect({
  browserWSEndpoint: session.cdpUrl,
});

const page = await browser.newPage();
await page.goto("https://example.com");
console.log(await page.title());

await browser.disconnect();

Cleanup

Close or disconnect your automation client, then stop the Driver session through the API. Stopping the session is what releases the browser and ends billing.
curl -X DELETE "https://api.driver.dev/v1/browser/session?sessionId=$SESSION_ID" \
  -H "Authorization: Bearer $DRIVER_API_KEY"