Browser rendering service for screenshots, PDFs, SEO extraction, and more. Built for AI agents and automation.
curl "https://render.gcnlabs.com/health.json"
curl "https://render.gcnlabs.com/render/html?url=https://example.com"
curl "https://render.gcnlabs.com/render/screenshot?url=https://example.com" -o screenshot.png
curl "https://render.gcnlabs.com/render/pdf?url=https://example.com" -o page.pdf
Render a page and return the fully rendered HTML content after JavaScript execution.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL to render |
json | boolean | Optional | Return JSON response (default: false) |
width | number | Optional | Viewport width (default: 1280) |
height | number | Optional | Viewport height (default: 800) |
waitFor | string | Optional | Wait condition: load, domcontentloaded, networkidle |
{
"success": true,
"url": "https://example.com",
"html": "<html>...</html>",
"length": 12345
}
# Get raw HTML curl "https://render.gcnlabs.com/render/html?url=https://example.com" # Get JSON response with auth curl "https://render.gcnlabs.com/render/html?url=https://admin.example.com&bearerToken=YOUR_TOKEN&json=true"
Capture a screenshot of the rendered page as PNG or JPEG.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL |
format | string | Optional | Image format: png or jpeg (default: png) |
fullPage | boolean | Optional | Capture full page (default: false) |
json | boolean | Optional | Return base64 JSON (default: false) |
clip | object | Optional | Clip region: {x, y, width, height} |
# Save full-page screenshot curl "https://render.gcnlabs.com/render/screenshot?url=https://example.com&fullPage=true" -o page.png # Clip specific region (POST) curl -X POST "https://render.gcnlabs.com/render/screenshot" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com", "clip": {"x": 0, "y": 0, "width": 800, "height": 600}}'
Generate a PDF document of the rendered page.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL |
json | boolean | Optional | Return base64 JSON (default: false) |
curl "https://render.gcnlabs.com/render/pdf?url=https://example.com" -o page.pdf
Extract comprehensive SEO metadata including Open Graph, Twitter Cards, and structured data.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL |
{
"success": true,
"url": "https://example.com",
"metadata": {
"title": "Example Domain",
"description": "Example description",
"canonical": "https://example.com",
"ogTitle": "Example Domain",
"ogImage": "https://example.com/og.jpg",
"twitterCard": "summary_large_image",
"structuredData": [...]
}
}
curl "https://render.gcnlabs.com/render/seo?url=https://example.com" | jq
Extract structured DOM information including links, headings, images, and text content.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL |
{
"success": true,
"dom": {
"links": [{"href": "...", "text": "..."}],
"headings": [{"level": 1, "text": "..."}],
"images": [{"src": "...", "alt": "..."}],
"text": "Full page text..."
}
}
# Get all links
curl "https://render.gcnlabs.com/render/dom?url=https://example.com" | jq '.dom.links'
Capture network activity, console logs, cookies, and performance metrics.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL |
curl "https://render.gcnlabs.com/render/trace?url=https://example.com" | jq
Comprehensive deployment verification designed for AI agents. Checks page loading, errors, and DOM structure.
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Required | Target URL to verify |
{
"success": true,
"checks": {
"pageLoaded": true,
"noAuthError": true,
"noServerError": true,
"noConsoleErrors": true
},
"domSnapshot": {
"hasHeader": true,
"hasNav": true,
"title": "Page Title"
},
"performance": {
"loadTime": 1234,
"domReady": 890
}
}
curl "https://render.gcnlabs.com/render/agent-check?url=https://example.com" | jq
The API supports multiple authentication methods to render protected pages. All parameters work via query string (GET) or JSON body (POST).
curl "https://render.gcnlabs.com/render/html?url=https://admin.example.com&bearerToken=YOUR_TOKEN"
# Or via POST
curl -X POST "https://render.gcnlabs.com/render/html" \
-H "Content-Type: application/json" \
-d '{"url": "https://admin.example.com", "bearerToken": "YOUR_TOKEN"}'
curl "https://render.gcnlabs.com/render/html?url=https://example.com/admin&httpAuthUsername=admin&httpAuthPassword=secret"
# Default header (X-API-Key) curl "https://render.gcnlabs.com/render/html?url=https://api.example.com&apiKey=YOUR_KEY" # Custom header curl "https://render.gcnlabs.com/render/html?url=https://api.example.com&apiKey=YOUR_KEY&apiKeyHeader=X-Custom-Auth"
curl "https://render.gcnlabs.com/render/html?url=https://example.com&session=sessionId=abc123;token=xyz"
curl -X POST "https://render.gcnlabs.com/render/html" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/dashboard",
"loginUrl": "https://example.com/login",
"username": "user@example.com",
"password": "password123",
"loginWaitSelector": ".dashboard-header"
}'
curl -X POST "https://render.gcnlabs.com/render/html" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/data",
"extraHeaders": {
"X-Custom-Auth": "custom-token",
"X-Tenant-ID": "tenant-123"
}
}'
| Parameter | Type | Description |
|---|---|---|
bearerToken | string | Bearer token for Authorization header |
jwtToken | string | JWT token for Authorization header |
httpAuthUsername | string | HTTP Basic Auth username |
httpAuthPassword | string | HTTP Basic Auth password |
apiKey | string | API key value |
apiKeyHeader | string | Header name for API key (default: X-API-Key) |
session | string | Session cookies (key=value format) |
cookies | string | Additional cookies (JSON array) |
extraHeaders | object | Custom HTTP headers |
loginUrl | string | Login page URL (triggers form login) |
username | string | Username for form login |
password | string | Password for form login |
loginWaitSelector | string | CSS selector to wait for after login |
These parameters are supported by all rendering endpoints.
| Parameter | Type | Default | Description |
|---|---|---|---|
width | number | 1280 | Viewport width in pixels |
height | number | 800 | Viewport height in pixels |
mobile | boolean | false | Use mobile viewport |
deviceScaleFactor | number | 1 | Device scale factor (2 for retina) |
userAgent | string | - | Custom user agent string |
| Parameter | Type | Default | Description |
|---|---|---|---|
waitFor | string | load | Wait condition: load, domcontentloaded, networkidle |
timeout | number | 30000 | Overall timeout in milliseconds |
selector | string | - | CSS selector to wait for |
waitForTimeout | number | - | Additional wait after page load (ms) |
| Parameter | Type | Default | Description |
|---|---|---|---|
locale | string | - | Browser locale (e.g., "en-US") |
timezone | string | - | Browser timezone (e.g., "America/New_York") |
geolocation | object | - | {latitude, longitude, accuracy} |
javascript | boolean | true | Enable/disable JavaScript |
blockResources | array | - | Resource types to block |
proxyUrl | string | - | Proxy URL for requests |
All errors return JSON with appropriate HTTP status codes.
{
"error": "Error message",
"success": false
}
| Status Code | Description |
|---|---|
| 400 | Bad Request - Missing or invalid parameters |
| 403 | Forbidden - Origin not allowed |
| 404 | Not Found - Endpoint doesn't exist |
| 429 | Rate Limit Exceeded |
| 500 | Internal Server Error |
Simple health check endpoint.
curl "https://render.gcnlabs.com/health.json"
# Response
{"ok": true, "status": "healthy"}
Detailed service status including configuration.
curl "https://render.gcnlabs.com/status" | jq