All skills
Skillintermediate

Browser Rendering API

**Base:** `https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering` **Auth:** `Authorization: Bearer <token>` (Browser Rendering - Edit permission)

Claude Code Knowledge Pack7/10/2026

Overview

Browser Rendering API

REST API

Base: https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering
Auth: Authorization: Bearer <token> (Browser Rendering - Edit permission)

Endpoints

EndpointDescriptionKey Options
/contentGet rendered HTMLurl, waitUntil
/screenshotCapture imagescreenshotOptions: {type, fullPage, clip}
/pdfGenerate PDFpdfOptions: {format, landscape, margin}
/snapshotHTML + inlined resourcesurl
/scrapeExtract by selectorsselectors: ["h1", ".price"]
/jsonAI-structured extractionschema: {name: "string", price: "number"}
/linksGet all linksurl
/markdownConvert to markdownurl
curl -X POST '.../browser-rendering/screenshot' \\
  -H "Authorization: Bearer $TOKEN" \\
  -d '{"url":"https://example.com","screenshotOptions":{"fullPage":true}}'

Workers Binding

// wrangler.jsonc
{ "browser": { "binding": "MYBROWSER" } }

Puppeteer


const browser = await puppeteer.launch(env.MYBROWSER, { keep_alive: 600000 });
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle0' });

// Content
const html = await page.content();
const title = await page.title();

// Screenshot/PDF
await page.screenshot({ fullPage: true, type: 'png' });
await page.pdf({ format: 'A4', printBackground: true });

// Interaction
await page.click('#button');
await page.type('#input', 'text');
await page.evaluate(() => document.querySelector('h1')?.textContent);

// Session management
const sessions = await puppeteer.sessions(env.MYBROWSER);
const limits = await puppeteer.limits(env.MYBROWSER);

await browser.close();

Playwright


const browser = await launch(env.MYBROWSER, { keep_alive: 600000 });
const page = await browser.newPage();

await page.goto('https://example.com', { waitUntil: 'networkidle' });

// Modern selectors
await page.locator('.button').click();
await page.getByText('Submit').click();
await page.getByTestId('search').fill('query');

// Context for isolation
const context = await browser.newContext({
  viewport: { width: 1920, height: 1080 },
  userAgent: 'custom'
});

await browser.close();

Session Management

// List sessions
await puppeteer.sessions(env.MYBROWSER);

// Connect to existing
await puppeteer.connect(env.MYBROWSER, sessionId);

// Check limits
await puppeteer.limits(env.MYBROWSER);
// { remaining: ms, total: ms, concurrent: n }

Key Options

OptionValues
waitUntilload, domcontentloaded, networkidle0, networkidle2
keep_aliveMax 600000ms (10 min)
screenshot.typepng, jpeg
pdf.formatA4, Letter, Legal