Turn any URL into a preview thumbnail
website thumbnail API
POST a URL to the screenshot API with a fixed viewport and a compact JPEG, and get a tidy preview thumbnail back in one request. Pin the same frame on every call so a directory or dashboard grid lines up, then loop over your listings to build the whole set. No browser farm to run or scale yourself.
No credit card · 100 free screenshots to start
curl https://api.apiscreenshot.com/v1/screenshot \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"format": "jpeg",
"quality": 80,
"viewport": { "width": 1280, "height": 800, "deviceScaleFactor": 2 }
}' \
-o thumbnail.jpgBUY VS BUILD
Building this yourself means…
Doing it in-house is owning a browser fleet and every edge case around it. Here is the work you skip.
- Maintaining a headless-browser fleet just to take a small picture of a page.
- Capturing hundreds or thousands of URLs for a directory and keeping memory under control.
- Getting consistent framing across sites that load at wildly different widths.
- Shrinking and recompressing full-page captures when all you wanted was a card-sized preview.
HOW IT WORKS
One request, the asset back
Same shape every time: send the request, it renders on a managed browser engine, you get the image back to store or serve.
- 01
Send the request
POST your payload to /v1/screenshot with your API key — a URL or your own HTML, plus the options this job needs.
- 02
It renders
A managed browser engine loads the page, waits for it to settle, and captures it — no headless browser of your own to run or scale.
- 03
Get the asset
The response body is the image bytes, synchronously — write them to a file, push them to your bucket, or hand them to a diff. No queue to poll.
THE CALL
The exact request for website thumbnails
The parameters this job needs, ready to paste. Full reference in the docs.
- Consistent framing. Pin a viewport (e.g. 1280×800) and every site is captured at the same frame, so the cards in your grid line up instead of each rendering at a different width.
- Compact JPEG output. Set format to jpeg with a quality between 1 and 100 and the thumbnail comes back already small — no resize-and-recompress step for a card-sized image.
- Sharp on retina with deviceScaleFactor. Set viewport.deviceScaleFactor to 2 to capture at higher density, so the thumbnail stays crisp on retina displays without rendering the whole page at double size.
curl https://api.apiscreenshot.com/v1/screenshot \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"format": "jpeg",
"quality": 80,
"viewport": { "width": 1280, "height": 800, "deviceScaleFactor": 2 }
}' \
-o thumbnail.jpgWHY IT HOLDS UP
What actually makes this work
The concrete parts: the formats, the edge cases it handles, the way it scales. Nothing here is a number we can't show you.
Consistent framing across sites
Pin one viewport (e.g. 1280×800) and every site is captured at the same frame, so the cards in a grid line up instead of each rendering at a different width.
Already card-sized
Set JPEG with a quality value and the thumbnail comes back compressed and small — no separate resize-and-recompress step for a card image. Add deviceScaleFactor 2 for retina.
Scales by looping, not by infrastructure
Each capture is an independent synchronous call, so a whole directory is just a loop over your URLs — you never stand up or scale a browser fleet.
RELATED
Same API, more jobs
The one call behind website thumbnails powers these too.
Generate a share card for every page
Render a per-page Open Graph image from your own HTML in one call.
View use caseCapture a whole page, top to bottom
Capture an entire long page, top to bottom, in a single image.
View use caseUnfurl pasted links into rich cards
Unfurl any pasted URL into a rich preview card with a thumbnail.
View use caseFAQ
Website thumbnails — common questions
- How do I generate a website thumbnail from a URL?
- POST { "url": "..." } to https://api.apiscreenshot.com/v1/screenshot with your API key, plus a viewport and format: "jpeg" for a compact image. The image bytes come straight back — no browser to run yourself and no SDK to install.
- How do I keep thumbnails consistent across many sites?
- Pin the same viewport (for example 1280×800) on every request. Each site is then captured at the identical frame, so the cards in your directory or dashboard grid line up rather than each rendering at a different width.
- Can I get a smaller, lighter image for a card?
- Yes. Set format: "jpeg" and a quality between 1 and 100, and the thumbnail comes back already compressed and card-sized — no separate resize-and-recompress step. PNG is also available if you need lossless output.
- How do I make thumbnails sharp on retina screens?
- Set viewport.deviceScaleFactor to 2. The page is captured at higher pixel density, so the thumbnail stays crisp on retina displays without you rendering the whole page at double the dimensions.
- Can I generate thumbnails for a whole directory at once?
- Yes. Each capture is an independent synchronous call, so you loop over your listings and POST one request per URL. Because the engine runs a managed browser for you, you never stand up or scale a browser fleet of your own.
- Are the captured pages stored on your servers?
- No. Each page is rendered to produce the thumbnail, the bytes are streamed back in the response, and nothing of the page or image is persisted on our side.
Add thumbnails to my directory
One endpoint, the asset back in one call. 100 free screenshots to start, no credit card to begin.
Cancel anytime · no long-term contract