URL to image. One API call.
Capture screenshots of any public URL with configurable viewports, full-page mode, and device emulation. SSRF protection built in — safe for user-submitted URLs.
Capabilities
Everything you need from a screenshot API. Nothing you don't.
Custom viewports
Set any width from 320 to 3840 pixels. Capture at desktop, tablet, or mobile breakpoints.
Full-page capture
Capture the entire scrollable page, not just the viewport. Great for archiving and documentation.
SSRF protection
Built-in DNS validation blocks private IPs and internal networks. Safe to expose in user-facing features.
Sub-second rendering
Pre-warmed browser pool with smart wait strategies. No cold start, no stale captures.
Device emulation
Set deviceScaleFactor for Retina output. Emulate mobile user agents for responsive screenshots.
Configurable wait
Wait for network idle, specific selectors, or a fixed delay. Control exactly when the screenshot is taken.
Use Cases
What developers build with a screenshot API.
Link preview thumbnails
Show URL previews in your app — chat, CMS, bookmarks, RSS readers. Capture on-demand or on a schedule.
Competitor monitoring
Screenshot competitor pages on a cron job. Track design changes, pricing updates, and content shifts over time.
Archiving & compliance
Full-page captures for legal records, audit trails, or web archive projects. Timestamped, immutable CDN URLs.
QA & visual regression
Capture staging URLs before and after deploys. Compare screenshots to catch visual regressions in CI.
Social sharing cards
Generate thumbnails of user-submitted URLs for social feeds, directories, and showcase pages.
Documentation & tutorials
Auto-capture screenshots of live apps for docs. No more outdated manually-taken screenshots.
Integration
One endpoint. Any URL.
POST a URL, get back a CDN-hosted image. Configure viewport, format, quality, wait strategy, and device emulation.
# Capture a URL screenshot
curl -X POST https://api.rendshot.ai/v1/screenshot \
-H "Authorization: Bearer rs_live_..." \
-d '{
"url": "https://example.com",
"width": 1280,
"height": 720,
"format": "png",
"full_page": false
}'
# → { "url": "https://assets.rendshot.ai/img/abc123.png" }
# Full-page capture with mobile viewport
curl -X POST https://api.rendshot.ai/v1/screenshot \
-H "Authorization: Bearer rs_live_..." \
-d '{
"url": "https://example.com",
"width": 390,
"height": 844,
"full_page": true,
"device_scale_factor": 2
}'How We Compare
RendShot vs other screenshot APIs.
| Feature | RendShot | ScreenshotOne | Urlbox |
|---|---|---|---|
| API call | POST /v1/screenshot | GET with query params | GET with query params |
| Auth | Bearer token (API key) | API key + secret signing | API key |
| SSRF protection | |||
| Custom viewport | 320–3840px | 320–3840px | 320–3840px |
| Full-page capture | |||
| HTML rendering | Yes (same API) | Separate endpoint | Yes |
| Output formats | PNG, JPEG, WebP | PNG, JPEG, WebP | PNG, JPEG, WebP, PDF |
| CDN delivery | Built-in (Cloudflare R2) | S3 integration | Built-in CDN |
| Template system | Variables + validation | ||
| Free tier | 100/month | 100 one-time | No free tier |
| Price (10k/mo) | $19 | $39 | $99 |
RendShot's unique advantage: A unified API for both URL screenshots and HTML-to-image rendering. One API key, one SDK, one billing — whether you're capturing live pages or generating images from templates.
Security
SSRF protection you don't have to build.
Accepting user-submitted URLs is dangerous without proper validation. RendShot handles this for you.
DNS validation
Both A and AAAA records are checked before any connection is made. Private IPs are blocked at the DNS level.
Private IP blocking
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, and IPv6 link-local addresses are all blocked.
Cloud metadata blocked
AWS metadata endpoint (169.254.169.254), GCP, Azure, and other cloud metadata services are explicitly blocked.
Fail-closed design
If DNS resolution fails or returns unexpected results, the request is rejected. No fallthrough to unsafe behavior.
FAQ
Common questions about screenshot APIs
What is a screenshot API?
A screenshot API is a service that captures images of web pages programmatically. Instead of opening a browser, navigating to a URL, and taking a screenshot manually, you send an HTTP request with the URL and get back an image. RendShot uses a managed Chromium browser pool to render pages and return CDN-hosted image URLs.
Can I capture pages behind authentication?
No. RendShot can only capture public URLs. This is by design — it prevents credential leakage and simplifies the security model. For pages behind auth, consider using RendShot's HTML rendering endpoint instead: render the page server-side and send the HTML to /v1/image.
How does SSRF protection work?
Before fetching any URL, RendShot performs DNS resolution and validates both A and AAAA records. Private IPs (10.x, 172.16.x, 192.168.x, localhost), link-local addresses, and cloud metadata endpoints are blocked. This makes it safe to accept user-submitted URLs without risk of internal network scanning.
What wait strategies are available?
RendShot supports waiting for network idle (no pending requests for 500ms), waiting for a specific CSS selector to appear in the DOM, or a fixed delay in milliseconds. The default is network idle, which works for most pages.
Can I capture the full scrollable page?
Yes. Set fullPage: true in your request. RendShot will capture the entire page height, not just the viewport. The maximum pixel budget is 16.7 million pixels (e.g., 1920×8700). For very long pages, consider setting a maximum height.
How does this differ from RendShot's HTML rendering?
Screenshot API (POST /v1/screenshot) captures a live URL — it fetches the page, runs JavaScript, loads external resources, then captures. HTML rendering (POST /v1/image) renders your own HTML/CSS without fetching any external URL. Use screenshot for live pages, HTML rendering for templates and generated content.
Capture any URL. One API call.
100 free screenshots per month. SSRF protection included. No credit card required.