Website Screenshot API
Turn any URL into a PNG or JPG with one GET request. Full-page captures, retina output and cookie banners removed — from $0.40 per 1,000 screenshots.
100 free credits every month · No credit card · Sign up with Google in seconds
One request. A screenshot URL back.
Send the page URL and your API key as query parameters. JsonLink renders the page in a real Chromium browser, waits for the network to settle and returns a link to the image.
- Create a free account and copy your API key
- Call
/api/screenshotwith a URL - Download the image from the returned
url
curl "https://jsonlink.io/api/screenshot?url=https://github.com&full_page=true&api_key=YOUR_API_KEY"
const params = new URLSearchParams({
url: 'https://github.com',
full_page: 'true',
api_key: process.env.JSONLINK_KEY,
});
const res = await fetch(`https://jsonlink.io/api/screenshot?${params}`);
const { url } = await res.json();import requests
res = requests.get("https://jsonlink.io/api/screenshot", params={
"url": "https://github.com",
"full_page": "true",
"api_key": JSONLINK_KEY,
})
print(res.json()["url"])$query = http_build_query([
'url' => 'https://github.com',
'full_page' => 'true',
'api_key' => getenv('JSONLINK_KEY'),
]);
$data = json_decode(file_get_contents(
'https://jsonlink.io/api/screenshot?' . $query
), true);
echo $data['url'];{
"message": "Screenshot taken successfully",
"path": "screenshots/5afc57bb-0e31.jpg",
"url": "https://jsonlink.io/screenshots/5afc57bb-0e31.jpg"
}Everything you need to capture real-world pages
Full-page screenshots
Capture the whole page, top to bottom. Add full_page_scroll=true to load lazy images first — or capture a single element with selector.
Devices and retina
Presets like iphone_15, pixel_8 or ipad_pro, or any width and height with a device scale factor up to 3× for crisp images.
PNG, JPG or WebP
Lossless PNG for UI work, JPG or WebP with adjustable quality, and image_width for ready-to-use thumbnails.
Clean, no clutter
Cookie banners hidden by default. Block ads, trackers and chat widgets, hide any element or inject your own CSS.
Wait for dynamic content
A real Chromium browser waits until the network is idle — or for your selector. Dark mode and reduced motion on request.
One key for the whole web
The same API key and credits also give you link metadata, Markdown for LLMs, links and images from any URL.
Parameters
All options are query parameters on GET https://jsonlink.io/api/screenshot, and every one is included in every plan. Full reference →
| Parameter | Default | Description |
|---|---|---|
| urlrequired | — | The page to capture. The scheme is optional. |
| api_keyrequired | — | Your JsonLink API key. |
| viewport_width | 1920 | Browser width in pixels. |
| viewport_height | 1080 | Browser height in pixels. |
| device_scale_factor | 1 | 1 to 3. Use 2 for retina screenshots. |
| full_page | false | Capture the entire scrollable page. |
| full_page_scroll | false | Scroll first so lazy-loaded content appears. |
| viewport_device | — | Device preset: iphone_15, pixel_8, ipad_pro, macbook_air… |
| selector | — | Capture one element by CSS selector. |
| format | jpg | jpg, png or webp. |
| quality | 80 | JPG / WebP quality, 1 to 100. |
| image_width | — | Output width in pixels, for thumbnails. |
| block_ads · block_trackers | true | Remove ads and trackers. Set false to keep them. |
| block_chats | false | Remove chat widgets. |
| hide_selectors · styles | — | Hide elements or inject custom CSS. |
| dark_mode | false | Capture the dark theme. |
| wait_for_selector | — | Wait for an element before capturing. |
| delay | 0 | Seconds to wait before capturing. |
| wait_until · timeout | networkidle2 · 15 | Load event to wait for and max seconds. |
Screenshot pricing that scales
A screenshot costs 2 credits. Every plan includes every feature — full page, retina, formats — and the rest of the JsonLink API.
How JsonLink compares
Entry plans, from each provider's public pricing page (October 2026). Full comparison at every volume →
| Provider | Entry plan | Screenshots / mo | Per 1,000 | Free tier |
|---|---|---|---|---|
| JsonLink | $15 | 25,000 | $0.60 | 50 / month |
| ScreenshotOne | $17 | 2,000 | $8.50 | 100 / month |
| Urlbox | $19 | 2,000 | $9.50 | 7-day trial |
| ApiFlash | $7 | 1,000 | $7.00 | 100 / month |
| ScreenshotAPI.net | $9 | 1,000 | $9.00 | 7-day trial |
What developers build with it
Link preview thumbnails
Show a real image of any shared link in chats, CMSs and bookmarking apps.
Visual monitoring
Capture pages on a schedule to spot layout breaks, price changes or defacements.
Archiving and compliance
Keep a dated visual record of landing pages, ads or terms of service.
Context for AI agents
Give vision models a screenshot alongside the page's Markdown from the same API.
Frequently asked questions
Is there a free screenshot API?
Yes. Every JsonLink account gets 100 free credits every month — enough for 50 screenshots — with no credit card. Credits renew automatically.
Do I need an API key?
Yes. Sign up with Google or email and your key is ready on the dashboard right away. Pass it as the api_key query parameter.
How do I take a full-page screenshot?
Add full_page=true to the request. JsonLink scrolls the full page height and returns one tall image.
Can I capture the mobile version of a website?
Yes. Set a narrow viewport such as viewport_width=390 and viewport_height=844, and device_scale_factor=2 or 3 for a sharp image.
How long are screenshots stored?
Images stay available for 7 days at the returned URL. Download them to your own storage if you need them longer.
What happens if a capture fails?
You get a JSON error such as REQUEST_TIMEOUT and no credits are charged. You only pay for screenshots that succeed.
Take your first screenshot in a minute
50 free screenshots every month. No credit card, one GET request.