---
title: GET /screenshot Reference
description: Screenshot API documentation. Currently coming soon — returns 501. Planned contract for website capture via Cloudflare Browser Rendering.
slug: screenshot
---

# GET /screenshot — Website Screenshot API

**Status: Coming Soon** — This endpoint currently returns `501 Not Implemented`. Documentation below describes the planned API contract, rolling out once Cloudflare Browser Rendering is enabled.

Screenshots are captured server-side via headless Chrome and cached at the edge for 24 hours.

## Planned Endpoint

```
GET https://api.renderog.app/screenshot
```

## Planned Request Parameters

| Parameter | Type | Default | Limits | Notes |
|---|---|---|---|---|
| `url` | string | — | http/https only | Required; target URL to capture (SSRF-filtered) |
| `w` | int | `1280` | 100–4000 | Viewport width |
| `h` | int | `800` | 100–3000 | Viewport height |
| `fullPage` | bool | `false` | — | Capture full scrollable height (max 30,000px) |
| `format` | string | `png` | `png`, `webp`, `jpeg` | Output format |
| `delay` | int | `0` | 0–5000 | Wait before capture (milliseconds) |
| `dismissCookies` | bool | `true` | — | Auto-dismiss cookie banners |
| `expires` | int | — | unix seconds | Optional; signature must be fresh |
| `sig` | string | — | hex, 64 chars | HMAC-SHA256 signature (required) |

## Planned Response

**Status 200 (success):**
- `Content-Type`: `image/png`, `image/webp`, `image/jpeg`
- `Cache-Control: public, s-maxage=86400` — cached for 24 hours
- `X-Render-Ms`: milliseconds to capture (typically 1–4 seconds)
- `X-Cache`: `HIT` or `MISS`

**Status 400, 403, 422, 429:** Same JSON error format as `/og`.

**Status 501 (not yet available):**
```json
{ "error": { "code": "not_available", "message": "Screenshot capture is coming soon." } }
```

## Signing

Same algorithm as [`GET /og`](./og.md) — HMAC-SHA256 of sorted, URL-encoded parameters (excluding `sig`).

## Security

**SSRF Protection** — The `url` parameter is validated before capture:
1. Scheme must be `http` or `https`
2. IP-literal hosts (e.g., `127.0.0.1`, `192.168.1.1`) are rejected
3. Hostnames like `localhost`, `*.local`, `*.internal` are blocked
4. Private IP ranges (10/8, 172.16/12, 192.168/16, 127/8, ::1, fc00::/7) are rejected
5. DNS is resolved via Cloudflare's DoH and re-validated on redirects
6. No `Authorization` or cookie headers are forwarded to the target

## Planned Performance

- **Capture time:** 1–4 seconds depending on page complexity and network
- **Cache hit:** <100ms
- **Max fullPage height:** 30,000 px

Unlike OG images (sub-100ms), screenshots incur real browser overhead and are never sub-second.

## When Will It Launch?

Screenshots require Cloudflare Workers Paid ($5/month) for Browser Rendering. You can use RenderOG's free tier for OG images; when you upgrade for screenshots, they'll activate automatically.

## Temporary Workaround

Until screenshots launch, use a third-party screenshot API with your own signing logic, or wait for this endpoint to become available.

## Examples (Planned)

### Viewport Screenshot

```
https://api.renderog.app/screenshot?url=https%3A%2F%2Frenderog.app&w=1280&h=800&format=png&sig=...
```

### Full-Page Capture

```
https://api.renderog.app/screenshot?url=https%3A%2F%2Fexample.com%2Farticle&fullPage=true&format=webp&sig=...
```

### With Delay (wait for content load)

```
https://api.renderog.app/screenshot?url=https%3A%2F%2Fapp.example.com&delay=2000&dismissCookies=true&sig=...
```

## Frequently Asked Questions

**Q: When will screenshots be available?**
A: Coming soon — no firm date yet. Browser Rendering requires Workers Paid, which adds $5/month to infrastructure costs; we'll announce a launch window once that's rolled out.

**Q: Will screenshots have the same $0.003/render price?**
A: Pricing TBD — captured screenshots are more resource-intensive than OG renders. We'll announce pricing before launch.

**Q: Can I use another screenshot service in the meantime?**
A: Yes. RenderOG is fully capable for OG image generation today; screenshots are a future bonus.

**Q: Will this work with JavaScript-heavy single-page apps?**
A: Yes — the page is fully rendered in a headless browser before capture, so dynamic content loads normally. The `delay` parameter helps with slow-loading content.

**Q: What about responsive design? Will it capture mobile?**
A: The viewport `w` and `h` parameters set the capture dimensions. Set them to mobile sizes (e.g., 375×667) to capture mobile layouts.

---

See [Error Codes](./errors.md) for the full error reference. For OG images (available today), see [`GET /og`](./og.md).
