Skip to content

Usage

How it works

  1. Call the /api/v1/Browser/Open endpoint with your token. The API spins up a remote cloud browser and returns a WebSocket DevTools address.
  2. Connect your local Puppeteer (or PuppeteerSharp) client to that address via browserWSEndpoint.
  3. Drive the browser exactly as you would a local Puppeteer session. CloudBrowser AI handles stealth, proxies, and CAPTCHA at the infrastructure level.
  4. The browser auto-closes after keepOpen seconds (default 300).

cURL - open a browser

bash
curl -X POST https://production.cloudbrowser.ai/api/v1/Browser/Open \
  -H "Authorization: Bearer $CLOUDBROWSER_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"headless": false, "keepOpen": 300}'

On success you receive a JSON object containing the address field. Pass that address to your Puppeteer client.

Node.js minimal example

javascript
import { BrowserService } from 'cloudbrowserai';
import puppeteer from 'puppeteer-core';

const token = process.env.CLOUDBROWSER_API_TOKEN;
const browserService = new BrowserService(token);

// Open a remote browser
const rp = await browserService.open({ headless: false, keepOpen: 300 });

// Connect Puppeteer to the remote endpoint
const browser = await puppeteer.connect({
  browserWSEndpoint: rp.address,
});

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

// Always close the browser when done
await browser.close();

.NET minimal example

csharp
using CloudBrowserAi;
using PuppeteerSharp;

using BrowserService svc = new("YOUR_TOKEN");
var rp = await svc.Open();

var browser = await Puppeteer.ConnectAsync(new ConnectOptions {
    BrowserWSEndpoint = rp.Address
});

var page = await browser.NewPageAsync();
await page.GoToAsync("https://example.com");
Console.WriteLine(await page.GetTitleAsync());
await browser.CloseAsync();

Error codes

HTTP statusMeaning
200Browser opened successfully
401Invalid or missing API token
402No active subscription
403Unit quota exhausted for billing period
404Plan concurrent browser limit reached
406Session label already in use

The default navigation timeout is 30 seconds. Override it per call:

javascript
await page.goto('https://example.com', { timeout: 60000 });