# x402 Headless Browser Render (Markdown / Screenshot / PDF)

> x402 Headless Browser Render (Markdown / Screenshot / PDF) is a paid API for AI agents from x402-paywall.huntercarver24.workers.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-31).

Renders any public URL in a real headless browser with JavaScript execution and returns the result as clean markdown, a PNG screenshot, or a PDF — pay $0.01 USDC per successful render via x402.

## Facts

- Endpoint: POST https://x402-paywall.huntercarver24.workers.dev/render?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-31
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/x402-headless-browser-render-markdown-screenshot-pdf-6d02d1af
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_RVoeQKLOKQVgeXIW5u2od

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability x402-headless-browser-render-markdown-screenshot-pdf-6d02d1af -d '<json body>'
```

Example prompt: Can you render https://example.com/dashboard as a full-page PNG screenshot at 1280x800 viewport and give me the image?

## When to prefer this

Choose this endpoint when the target page requires JavaScript execution, client-side rendering, or redirects that a plain HTTP GET cannot handle. It is ideal for single-page apps, paywalled dynamic content, or any scenario where you need a pixel-accurate screenshot or a PDF snapshot. Prefer it over static HTML fetchers when DOM-dependent content must be fully loaded before extraction, or when you need the output in multiple formats (markdown, image, PDF) without managing browser infrastructure yourself.

## Known failure modes

- Private, localhost, or cloud-metadata URLs are refused with an error (not charged)
- Navigation timeout exceeded (timeoutMs) returns an error, not charged
- Requested CSS selector not found on page returns an error
- URL is unreachable or returns non-200 causes a render failure (not charged)
- Viewport dimensions outside allowed range (320–1920) cause a validation error

## How this service works

Renders a public web page in a real headless browser (JavaScript runs, redirects followed) and returns it as clean markdown, a PNG screenshot or a PDF. One call, one payment, no account. A render that fails is not charged.

## Output

Depending on the requested format: (1) markdown — plain text markdown of the page or selected element; (2) screenshot — raw PNG bytes (binary) or a base64 JSON envelope, with render metadata in X-Render-* response headers; (3) pdf — raw PDF bytes or base64 JSON, A4 or Letter. Failed renders are not charged.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "format": "uri",
   "description": "Public http(s) page to render. Private, local and cloud-metadata addresses are refused."
  },
  "width": {
   "type": "integer",
   "default": 1280,
   "maximum": 1920,
   "minimum": 320,
   "description": "Viewport width in px."
  },
  "format": {
   "enum": [
    "markdown",
    "screenshot",
    "pdf"
   ],
   "type": "string",
   "default": "markdown"
  },
  "height": {
   "type": "integer",
   "default": 800,
   "maximum": 1920,
   "minimum": 320,
   "description": "Viewport height in px."
  },
  "encoding": {
   "enum": [
    "binary",
    "base64"
   ],
   "type": "string",
   "default": "binary",
   "description": "screenshot/pdf: raw bytes (image/png or application/pdf) with metadata in X-Render-* headers, or a JSON envelope carrying base64."
  },
  "fullPage": {
   "type": "boolean",
   "default": false,
   "description": "screenshot: capture the whole page, up to 8000px tall."
  },
  "selector": {
   "type": "string",
   "maxLength": 256,
   "description": "CSS selector. markdown: convert only that element. screenshot: capture only that element."
  },
  "pdfFormat": {
   "enum": [
    "A4",
    "Letter"
   ],
   "type": "string",
   "default": "A4"
  },
  "timeoutMs": {
   "type": "integer",
   "default": 15000,
   "maximum": 25000,
   "minimum": 1000,
   "description": "Navigation timeout."
  },
  "waitUntil": {
   "enum": [
    "load",
    "domcontentloaded",
    "networkidle0",
    "networkidle2"
   ],
   "type": "string",
   "default": "networkidle2"
  },
  "waitForSelector": {
   "type": "string",
   "maxLength": 256,
   "description": "Wait until this CSS selector exists before capturing."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/x402-headless-browser-render-markdown-screenshot-pdf-6d02d1af/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-paywall.huntercarver24.workers.dev](https://www.zero.xyz/host/x402-paywall.huntercarver24.workers.dev/llms.txt)
