Execute client-side JavaScript, hydrate SPAs (React, Vue, Angular), and extract the fully rendered DOM.
Execute complex client-side Single Page Applications (SPAs) in an isolated cloud Chromium instance. Waits for dynamic network requests, async API hydration, or specific DOM selectors before returning the fully rendered HTML.
Because this endpoint utilizes full headless Chromium rendering, dynamic JavaScript and single-page apps (SPAs) are executed completely before conversion:
Chromium initializes, fetches the URL, executes client JavaScript, resolves DOM mutations, and generates output.
Returned instantly from Valkey/Redis cache with header X-Lender-Cache: HIT (15-minute TTL).
curl -X POST https://api.headless-lender.com/api/v1/render \
-H "Content-Type: application/json" \
-d '{
"url": "https://news.ycombinator.com",
"waitUntil": "networkidle",
"includeHtml": true
}'No Authorization header required. Simply send a JSON POST request. Perfect for quick prototypes, small scripts, and low-volume scraping.
Sign up in 10s with no credit card required. Unlocks 1,000 free monthly requests, 600 browser minutes (10 hours), 120 req/min burst limits, and cache-bypass controls.
| Access Mode | Monthly Quota | Cloud Browser Time | Burst Limit | Credit Card | Action |
|---|---|---|---|---|---|
| Public Anonymous | Daily IP Allowance | 5-min trial sandbox | 10 req/min | None | Instant (No Setup) |
| Free Account (Highest Quota) | 1,000 Req / Month | 600 Mins (10 Hours) | 120 req/min | Zero ($0 forever) | Claim Free Key → |
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| url | string | required | — | Target SPA or dynamic URL to render. |
| waitUntil | 'domcontentloaded' | 'load' | 'networkidle' | optional | 'domcontentloaded' | Lifecycle condition to satisfy before DOM serialization. |
| waitForSelector | string | optional | — | Specific CSS selector to wait for before extraction. |
| includeHtml | boolean | optional | true | Include the full serialized outerHTML. |
| extractText | boolean | optional | false | Also return innerText representation. |
| selector | string | optional | — | Clip output to a specific container element. |
{
"url": "https://news.ycombinator.com",
"title": "Hacker News",
"content": "<!DOCTYPE html><html><head>...</head><body><div id=\"root\">...</div></body></html>",
"durationMs": 410
}