A browser for every task.
Create isolated browser sessions on demand. Start a run, do the work, and close it through the API.
Give your agents a real browser.
Create sessions, persist context, and automate the web through one API.
browser.connect()CDP connection establishedFrom the first page load to the next thousand steps, give your automation a browser it can work with.
Create isolated browser sessions on demand. Start a run, do the work, and close it through the API.
Reuse persistent profiles, cookies, and browser state across runs. Keep your workflows in context.
Configure a proxy for each session and set its timezone. Make network settings part of your workflow.
Follow a session in the live viewer. Inspect the page and interact with the browser from your console.
Connect Puppeteer, Playwright, or your own CDP client. Your existing automation has a place to run.
Manage sessions, profiles, and browser instances together. Let the orchestrator handle allocation.
Send a request to the API. Set your profile, proxy, or timezone for the task ahead.
POST /api/v1/sessionsUse the returned WebSocket URL with Puppeteer, Playwright, or your own agent.
session.cdp_urlNavigate, click, and extract. Watch in the console and close the session when you’re done.
DELETE /api/v1/sessions/:idNo new automation language to learn. Create a session, connect your client, and keep building with the tools you already use.
Already have access? Use your API key.
New keys are provided by your 0Browser operator.
// npm install puppeteer-core (Node.js 22+)import puppeteer from "puppeteer-core"; const api = "https://api.0browser.io/api/v1/sessions";const headers = { Authorization: `Bearer ${process.env.ZERO_API_KEY}`, "Content-Type": "application/json",};const response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ os: "linux" }),});if (!response.ok) throw new Error(await response.text());const session = await response.json();let browser;try { browser = await puppeteer.connect({ browserWSEndpoint: session.cdp_url, }); const page = await browser.newPage(); await page.goto("https://example.com"); console.log(await page.title());} finally { browser?.disconnect(); const closed = await fetch(`${api}/${session.id}`, { method: "DELETE", headers, }); if (!closed.ok) throw new Error(await closed.text());}Open the console and sign in with your existing 0Browser API key. You can create a browser session there, or use the API examples above. New users need a key from their 0Browser operator; self-service signup is not available yet.
Yes. Each session returns a CDP WebSocket URL. Connect using Puppeteer’s browserWSEndpoint or Playwright’s chromium.connectOverCDP, then use your usual browser automation methods.
Persistent profiles reuse browser data such as cookies and local storage across runs. Select an existing profile when creating a session to continue with its saved state. Sessions without a profile are ephemeral.
Yes. Open the session in the console to use the live viewer. You can inspect the page and interact with the browser while your automation runs.
You can provide a proxy and timezone when creating a session, and manage browser fingerprint settings through profiles. The console brings these settings together in one place.
Your next browser session starts here.
Open Console Sign in with your existing API key.