# Website Rendering
## Overview
| Property | Value |
|----------|-------|
| **Status** | active |
| **Method** | `GET` |
| **Endpoint** | `/v1/website/rendering` |
| **Base URL** | `https://api.browsersolver.com` |
| **Credit Cost** | 2 credits per call |
| **Documentation** | https://www.browsersolver.com/library/website-rendering |
## Description
Run a managed browser session against a public URL and collect the HTML after client-side scripts finish. Prefer Crawler for static markup; escalate to WebUnlocker on approved hosts when challenges persist.
## Authentication
- **Key Name:** `x-api-key`
- **Location:** HTTP Header
- **Get an API key:** https://app.browsersolver.com/register
## Example Request
```bash
curl --location --request GET 'https://api.browsersolver.com/v1/website/rendering' \
--header 'Content-Type: application/json' \
--header 'x-api-key: YOUR_API_KEY'
```
## Example Response
### Render a JS-hydrated blog post
```json
Shipping faster with edge caches | Engineering NotesShipping faster with edge caches
Published 2026-03-12
After hydration, product metrics and comments appear below.
```
## Documentation
## BrowserSolver fetch tiers
Three endpoints retrieve HTML from public pages. Start with the **lowest tier that returns usable content** for your target.
| Tier | Endpoint | Cost | Best for |
|---|---|---:|---|
| 1 | [Website Crawler](/v1/website/crawler) | 1 credit | Server-rendered HTML already present in the HTTP response (blogs, docs, classic catalog pages). |
| 2 | [Website Rendering](/v1/website/rendering) | 2 credits | Client-side apps and lazy-loaded UI where JavaScript must run before markup appears. |
| 3 | [Website WebUnlocker](/v1/website/webunlocker) | 3 credits | Enterprise bot managers on **BrowserSolver-approved domains** when tiers 1 and 2 still fail. |
**Suggested workflow**
1. Probe with **Crawler** when you suspect static HTML (fastest, lowest cost).
2. Move to **Rendering** if the body is a shell, prices load after JS, or you need `wait_for` / POST `browser_instructions`.
3. Reserve **WebUnlocker** for whitelisted retail or marketplace hosts where Rendering keeps hitting challenges.
More context: [fetch tier comparison](https://www.browsersolver.com/blog/website-crawler-vs-rendering-vs-webunlocker).
## What Rendering does
[Website Rendering](/v1/website/rendering) opens the URL inside BrowserSolver's managed headless browser, runs page scripts, waits for the DOM to stabilize, then returns the **post-render HTML**. Reach for it when [Website Crawler](/v1/website/crawler) only returns placeholders because content is injected client-side.
Rendering covers most dynamic storefronts and moderate bot friction. Persistent Cloudflare, DataDome, or Akamai challenges on approved hosts may require [Website WebUnlocker](/v1/website/webunlocker).
**Pricing:** 2 credits per successful response.
## Quickstart
```
GET https://api.browsersolver.com/v1/website/rendering?query=https://quotes.toscrape.com/js/
```
POST accepts `browser_instructions` when you must scroll, click, or fill fields before reading HTML.
## Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| `query` | string | yes | Public URL with protocol |
| `wait_in_seconds` | integer | no | Extra pause after load (0 to 30) |
| `wait_for` | string | no | CSS/XPath selector that must appear |
| `block_ads` | boolean | no | Strip ad requests during render. Default `false` |
| `timeout` | integer | no | Max load wait in seconds. Default `30` |
| `browser_instructions` | array | no | POST only: automation steps before capture |
## Response
HTML string after JavaScript execution.
## Companion endpoints
| Situation | Endpoint |
|---|---|
| HTML already complete without JS | [Website Crawler](/v1/website/crawler) |
| Whitelisted domain still blocked | [Website WebUnlocker](/v1/website/webunlocker) |
| Visual capture instead of HTML | [Website Screenshot](/v1/website/screenshot) |
## Tips
- Pair `wait_for` with `timeout` on slow SPAs and infinite scroll feeds.
- Some production domains need BrowserSolver whitelist approval.
- Always sanity-check Crawler first; many sites still ship full HTML without JS.
## Common workflows
- Extract data from React, Vue, or Angular apps
- Wait for lazy product grids or infinite lists
- Drive cookie banners, tabs, or scroll steps via POST instructions
- Recover pages that plain HTTP fetch cannot parse