Introducing RenderScreenshot, a Screenshot API
RenderScreenshot is a screenshot API: send a URL or HTML, get a PNG, JPEG, WebP or PDF from real Chrome. What it does today, how it works, and how to start.
RenderScreenshot is a screenshot API. You send a page URL, an HTML document or Markdown, and you get back a PNG, JPEG, WebP or PDF rendered by real Chrome. There is no browser to install, patch or keep alive on your side. We launched it in November 2025. This post was rewritten in October 2026 to describe what the API does today, with a link to the documentation for each part.
curl "https://api.renderscreenshot.com/v1/screenshot?url=https://example.com&preset=og_card" \ -H "Authorization: Bearer $RS_API_KEY" \ -o card.png
That request returns a 1200x630 PNG of https://example.com, ready for an og:image tag. The quick start takes you from a new account to this first image.
Why we built it
Screenshots of web pages sound simple until you run them in production. A headless browser needs memory, fonts for every script your users write in, and restarts when it leaks. It needs protection against requests that point at your own private network. Cookie banners and lazy-loaded images spoil the result. We built RenderScreenshot so that this work happens once, in one service, and every developer gets one HTTP endpoint with sensible defaults.
We also wanted the API to be predictable. Every parameter is in the parameter reference. Every error has a stable code and a retryable flag. Every preset value is public. You can sign up and send requests without a sales call.
How a request flows
flowchart LR A[Your app, SDK<br/>or img tag] -->|API key or<br/>signed URL| B[Rails API<br/>auth, validation,<br/>cache, credits] B -->|cache miss| C[Cloudflare Worker<br/>headless Chrome] C --> D[(Cloudflare R2)] B -->|image + X-Cache-URL| A D -.->|public CDN link| A
A Rails application owns every business decision: it checks the key, validates the parameters, looks for a cached render, and counts credits. On a cache miss it calls a Cloudflare Worker, which loads the page in headless Chrome and writes the image to R2 storage. The response carries the image and an X-Cache-URL header, a public CDN link to the same file that needs no key. The full walk-through, with code from each step, is in how we built RenderScreenshot.
What you can do today
| Need | Feature | Docs |
|---|---|---|
| Social cards and thumbnails | Presets such as og_card, twitter_card, link_preview and desktop_hd |
Presets |
| Phones and tablets | Device emulation, for example iphone_14 or macbook_pro_14 |
Devices |
| Your own templates | html or markdown input instead of a URL |
Content input |
| The whole page or one element | capture.mode: viewport, full_page or element |
Capture |
| Clean captures | Block ads, trackers, chat widgets and cookie banners | Blocking |
| Pages that load late | Wait for networkidle, a selector or a delay |
Wait options |
| Documents | PDF output with paper size, margins, header and footer | PDF options |
| Images in public HTML | Signed URLs that expire, so no API key is published | Signed URLs |
| Repeat requests | Reuse an identical earlier render for 0 credits | Caching |
| Many pages | Batch requests and webhooks | Batch |
| Your own bucket | Copy each render to S3, R2 or another S3-compatible store (paid plans) | Storage |
The same request shape works from code. There are official SDKs for Node.js, Python, Ruby, PHP, Go and Java, and the rs command-line tool for scripts and CI. A device capture with POST and nested JSON:
curl -X POST "https://api.renderscreenshot.com/v1/screenshot" \ -H "Authorization: Bearer $RS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com", "device": "macbook_pro_14", "block": {"cookie_banners": true}}' \ -o app.png
How pricing works
RenderScreenshot bills in credits. One fresh render uses one credit, whether it is a small thumbnail, a full-page capture or a multi-page PDF. Failed renders, rejected requests and cache hits use no credits. Every plan, the Free plan included, has every rendering feature except custom storage. The plans differ in monthly credits, rate limit and batch size. The current numbers are on the pricing page. Free credits start after you verify your email address.
Where to go next
- Send your first request with the quick start.
- Put cards in meta tags with signed URLs, and see how we chose the preset sizes.
- Read the error codes before you write retry logic.
Create a free account to get an API key. Questions go to [email protected].
Related in this topic
- HTML to Image API: Render HTML and CSS to PNG Send HTML and CSS, get a PNG, JPEG, WebP or PDF back from real Chrome. Base URLs for assets, web fonts, transparent backgrounds and signed URLs.
- OG Image API: Dynamic Open Graph Images from HTML Turn any HTML page into an og:image with one signed URL. og_card and twitter_card presets, a public X-Cache-URL, 30-day caching and SDKs in six languages.
- HTML to PDF API: Paper, Margins, Page Numbers Turn a URL or your HTML into a PDF with real Chrome: paper sizes, margins, header and footer templates with page numbers, one-page fit and print CSS.
- Screenshot API Pricing: Plans, Credits and Free Tier RenderScreenshot pricing: one credit per fresh render, free cache hits and failures, a free monthly plan, and a calculator for your screenshot volume.
- Screenshot API SDKs and Code Examples Screenshot API code examples by language and framework: official SDKs for Node.js, Python, Ruby, PHP, Go and Java, plus raw HTTP guides.
- Best Screenshot API Comparison (2026): 10 Services The best screenshot APIs of 2026 compared: 10 services plus self-hosted Chrome, with a scored checklist, prices checked in October 2026 and a test script.