Thum.io API
Free website screenshot API with no key: put a page URL in the path and get a rendered PNG back, with width, viewport and full-page options. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Thum.io API?
Thum.io renders a screenshot of any public web page from a URL you put in the request path, with no API key on the free tier. The response is the rendered PNG image itself, sized to the width you specify.
Rendering a screenshot properly means running a headless browser somewhere, which is a real operational burden for what is usually a cosmetic feature. Thum.io removes that entirely: build a URL with the width you want and the page you want, put it in an `img` tag, done. There is no account, no queue to poll and no callback to handle.
The URL grammar is the unusual part — options are path segments rather than query parameters, so `/get/width/400/https://example.com` reads as a small command chain. That composes neatly: `/get/width/800/crop/600/noanimate/https://...` chains three options. The free tier watermarks images and rate limits by IP, and a paid tier removes both. Screenshots are cached, so the first request for a page is slow while a browser actually renders it and later ones are quick.
Quick facts
- Base URL
https://image.thum.io- Authentication
- No API key on the free tier, which watermarks images. Paid plans use an auth token in the path and remove the watermark.
- Rate limit
- Free tier is rate limited by IP; no figure is published. Screenshots are cached per URL and option set.
- Pricing
- Free tier with a watermark; paid plans for unwatermarked and higher-volume use.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Thum.io API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Screenshot a web page at a given width
GET https://image.thum.io/get/width/400/https://example.com
curl 'https://image.thum.io/get/width/400/https://example.com'const res = await fetch("https://image.thum.io/get/width/400/https://example.com");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://image.thum.io/get/width/400/https://example.com", timeout=20)
res.raise_for_status()
print(res.json())# This endpoint returns image/png, not JSON.
# The response body is the image itself, so it can be used directly as an
# <img src="..."> or saved to a file — there is nothing to parse.
#
# Verified: HTTP 200, Content-Type: image/pngParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
width/{n} | path | Optional | Output width in pixels, as a path segment pair. width/400 |
crop/{n} | path | Optional | Crop the screenshot to this height, for a card-sized preview rather than a full page. crop/600 |
fullpage | path | Optional | Capture the entire scrollable page rather than the viewport. |
viewportWidth/{n} | path | Optional | Browser viewport width used for rendering, which determines which responsive breakpoint is shown. viewportWidth/1280 |
(target url) | path | Required | The page to screenshot, as the final path segment, including its scheme. https://example.com |
Response fields
(body)image/png- The rendered screenshot. There is no JSON — the URL is the whole interface.
Content-Typeheader- `image/png`.
(watermark)visual- Free-tier images carry a Thum.io watermark. Removing it requires a paid plan.
(caching)behaviour- Results are cached per URL and option set, so the first request is slow and subsequent ones are fast.
What you can build with the Thum.io API
- Generate link preview thumbnails for a bookmarking tool
- Show visual previews in a directory of websites
- Capture a page at several viewport widths for a responsive review
- Illustrate a portfolio with live screenshots rather than stale images
Common errors and how to fix them
Blank or partial screenshot
The page renders content after load, or blocks headless browsers.
Fix: Try `fullpage`, and accept that pages behind a bot check or heavy client-side rendering will not capture cleanly.
Slow first request
An uncached page has to be rendered by a real browser.
Fix: Expect several seconds on a cold URL. Do not put it on a synchronous render path — lazy-load the image.
Watermark on the image
That is the free tier.
Fix: A paid plan with an auth token in the path removes it. There is no free way around it.
Stale screenshot
Results are cached per URL and option set.
Fix: Vary an option, or use the documented cache-control mechanism, when you need a fresh render.
Thum.io API — frequently asked questions
Is the Thum.io screenshot API free?
There is a free tier needing no key, which watermarks the images and rate limits by IP. Paid plans remove the watermark and raise the limits.
How do I set the image size?
With path segments rather than query parameters — `/get/width/400/https://example.com`. Options chain together in the path.
Why is the first request so slow?
Because a real headless browser has to load and render the page. Once rendered, the result is cached and subsequent requests are fast.
Can it capture the whole page?
Yes, with the `fullpage` option. Without it you get the viewport only, which is usually what you want for a thumbnail.
Tools that pair with this API
Screenshot Beautifier
Turn plain screenshots into share-ready images: gradient backgrounds, padding, rounded corners, drop shadow and a macOS-style window bar.
Screenshot Annotator
Mark up a screenshot with arrows, boxes, ellipses, numbered step badges, highlighter blocks, text and pixelated regions, then export a flat PNG.
Bulk Image Resizer
Resize up to 30 images at once by width, height, percentage or exact dimensions. Batch photo resizing that runs entirely in your browser.
Thum.io is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.