<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: alekseykazandaev</title>
    <description>The latest articles on DEV Community by alekseykazandaev (@alekseykazandaev).</description>
    <link>https://dev.to/alekseykazandaev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3864351%2Fc6242ca4-93a0-4fd4-8622-1b4ff3b7b930.png</url>
      <title>DEV Community: alekseykazandaev</title>
      <link>https://dev.to/alekseykazandaev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alekseykazandaev"/>
    <language>en</language>
    <item>
      <title>Cheapest Screenshot API in 2026 (Free Tiers Compared)</title>
      <dc:creator>alekseykazandaev</dc:creator>
      <pubDate>Wed, 15 Jul 2026 08:12:12 +0000</pubDate>
      <link>https://dev.to/alekseykazandaev/cheapest-screenshot-api-in-2026-free-tiers-compared-n93</link>
      <guid>https://dev.to/alekseykazandaev/cheapest-screenshot-api-in-2026-free-tiers-compared-n93</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the Site-Shot blog.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you're shopping purely on price, "cheapest screenshot API" has two different answers, and conflating&lt;br&gt;
them will cost you. The cheapest &lt;em&gt;raw&lt;/em&gt; price is Thum.io at $0.20 per 1,000 — but that price buys you&lt;br&gt;
viewport thumbnails with no full-page, no ad/cookie removal, and no geo proxy. The cheapest &lt;em&gt;full-featured&lt;/em&gt;&lt;br&gt;
Chromium API is a different question entirely. This guide ranks every option by cost per 1,000 &lt;strong&gt;and&lt;/strong&gt; by&lt;br&gt;
how generous the free tier is, so you can tell which "cheap" you're actually buying.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; this comparison is published by Site-Shot. We have kept the numbers accurate and the&lt;br&gt;
trade-offs honest — including where competitors beat us. Prices checked June 2026; confirm on each&lt;br&gt;
vendor pricing page before buying.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ranked by price per 1,000 (cheapest first)
&lt;/h2&gt;

&lt;p&gt;Cost per 1,000 is taken from each provider's &lt;em&gt;entry&lt;/em&gt; paid plan, then we note how low it goes at scale.&lt;br&gt;
The free-tier column is what you get without paying. Read the two right-hand columns together: a low price&lt;br&gt;
with no full-page or proxy support is only cheap if you never need those things.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;~Cost / 1,000 (entry)&lt;/th&gt;
&lt;th&gt;Lowest at scale&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Full-page&lt;/th&gt;
&lt;th&gt;Ad + cookie removal&lt;/th&gt;
&lt;th&gt;Geo proxy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Thum.io&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;1,000/mo, &lt;strong&gt;no signup&lt;/strong&gt; (branded)&lt;/td&gt;
&lt;td&gt;Paid tier only&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microlink&lt;/td&gt;
&lt;td&gt;$1.07 (at 46k)&lt;/td&gt;
&lt;td&gt;$1.07&lt;/td&gt;
&lt;td&gt;50/day&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Site-Shot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$2.50&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.80&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free online tool, &lt;strong&gt;no signup&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ (to 20,000px)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ (all plans)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ApiFlash&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;$1.80&lt;/td&gt;
&lt;td&gt;100/mo&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Enterprise only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CaptureKit&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;$1.78&lt;/td&gt;
&lt;td&gt;100/mo&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pro+ (stealth)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenshotOne&lt;/td&gt;
&lt;td&gt;$8.50&lt;/td&gt;
&lt;td&gt;$5.18&lt;/td&gt;
&lt;td&gt;100/mo&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Growth+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenshotAPI.net&lt;/td&gt;
&lt;td&gt;$9.00&lt;/td&gt;
&lt;td&gt;$1.75&lt;/td&gt;
&lt;td&gt;100 (7-day trial)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Paid tiers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urlbox&lt;/td&gt;
&lt;td&gt;$9.50&lt;/td&gt;
&lt;td&gt;~$3.00&lt;/td&gt;
&lt;td&gt;No free tier (7-day trial)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Proxy + geo emulation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt; Thum.io wins on raw price but it's a thumbnail service, not a full-featured renderer.&lt;br&gt;
Microlink is the cheapest &lt;em&gt;full-featured&lt;/em&gt; option once you're at volume ($1.07/1,000 at 46k/mo). Site-Shot&lt;br&gt;
is the cheapest full-featured Chromium API to &lt;em&gt;start&lt;/em&gt; with ($2.50/1,000 on a $5/mo plan) and the lowest at&lt;br&gt;
scale ($0.80/1,000) — plus it's the only one here with a genuinely free, no-signup browser tool and country&lt;br&gt;
proxies on every plan. Everyone from ApiFlash up is $7/1,000 or more at the entry tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tools, cheapest first
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Thum.io — cheapest raw price, but thumbnails only
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.thum.io/" rel="noopener noreferrer"&gt;Thum.io&lt;/a&gt; is the rock-bottom price leader at &lt;strong&gt;$0.20 per 1,000&lt;/strong&gt; ($2 per 10,000 hits,&lt;br&gt;
$1/mo minimum), dropping to $0.10/1,000 on the Better plan ($20/mo minimum). Its free tier is unusually&lt;br&gt;
generous — &lt;strong&gt;1,000 images/month with no signup&lt;/strong&gt; — but those free images are branded with a Thum.io loader&lt;br&gt;
and an animated initial render. The catch for "cheapest" shoppers: &lt;strong&gt;full-page is a paid feature&lt;/strong&gt;, and there&lt;br&gt;
is &lt;strong&gt;no ad/cookie removal, no geo proxy, and no MCP server&lt;/strong&gt;. &lt;em&gt;Best for:&lt;/em&gt; simple, high-volume thumbnails on a&lt;br&gt;
tight budget where viewport captures are all you need.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microlink — cheapest &lt;em&gt;full-featured&lt;/em&gt; option at volume
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://microlink.io/" rel="noopener noreferrer"&gt;Microlink&lt;/a&gt; is a "browser as API" with full Puppeteer/Playwright control, full-page,&lt;br&gt;
ad/cookie blocking (even on the free tier), automatic proxy resolution on Pro, an official MCP server, and a&lt;br&gt;
240-edge global cache. Its Pro plan is $49/mo for 46,000 requests ≈ &lt;strong&gt;$1.07/1,000&lt;/strong&gt; — the cheapest full-featured&lt;br&gt;
rate at volume on this list. The free tier is 50 requests/day. &lt;em&gt;Best for:&lt;/em&gt; high-volume workloads that need real&lt;br&gt;
rendering at the lowest per-shot price. &lt;em&gt;The honest call:&lt;/em&gt; if you're already doing tens of thousands of&lt;br&gt;
full-featured shots a month, Microlink beats Site-Shot's $1.50 Lite overage on price — though not Site-Shot's&lt;br&gt;
$0.80 Professional rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Site-Shot — cheapest full-featured Chromium API to start, with a free no-signup tool
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;Site-Shot&lt;/a&gt; renders in a real Chromium browser and returns a PNG/JPEG (or JSON&lt;br&gt;
with base64 + the target's response headers) from a single GET — no SDK. It includes full-page to 20,000px,&lt;br&gt;
device emulation, automatic ad + cookie-banner removal (&lt;code&gt;no_ads&lt;/code&gt;, &lt;code&gt;no_cookie_popup&lt;/code&gt;), and country-specific&lt;br&gt;
proxies (IP, language, time zone, geolocation) &lt;strong&gt;on every plan&lt;/strong&gt; — not gated behind a higher tier like most&lt;br&gt;
rivals. The &lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;API&lt;/a&gt; starts at &lt;strong&gt;$5/mo for 2,000 shots ($2.50/1,000)&lt;/strong&gt;, the&lt;br&gt;
$15 Lite plan includes 10,000, and the Professional plan drops to &lt;strong&gt;$0.0008/shot — $0.80 per 1,000&lt;/strong&gt;, the&lt;br&gt;
lowest full-featured rate in this comparison at scale. There's also an official MCP server&lt;br&gt;
(&lt;code&gt;npx -y site-shot-mcp&lt;/code&gt;) for AI agents. The catch some readers care about: only the&lt;br&gt;
&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;browser tool&lt;/a&gt; is free with no signup — the paid API needs an account and key,&lt;br&gt;
same as everyone else. &lt;em&gt;Gaps:&lt;/em&gt; no native client SDKs yet (you call plain HTTP). &lt;em&gt;Best for:&lt;/em&gt; developers who&lt;br&gt;
want full-featured, real-browser screenshots at the lowest entry price and the lowest at-scale price, with&lt;br&gt;
free prototyping in the browser. (Not to be confused with the unrelated "Siteshot Pro".)&lt;/p&gt;

&lt;h3&gt;
  
  
  ApiFlash — cheap, fast, but geo costs extra
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apiflash.com/" rel="noopener noreferrer"&gt;ApiFlash&lt;/a&gt; runs Chrome on AWS Lambda for fast, simple captures: $7/mo for 1,000&lt;br&gt;
($7.00/1,000), down to $1.80/1,000 on the Large plan, with a 100/mo free tier. Full-page and ad/cookie removal&lt;br&gt;
are on all paid plans — but &lt;strong&gt;managed proxies and IP geolocation are Enterprise-only&lt;/strong&gt;, and there's no official&lt;br&gt;
MCP (third-party wrappers only). &lt;em&gt;Best for:&lt;/em&gt; simple, fast, budget captures where you don't need geo-targeting.&lt;/p&gt;

&lt;h3&gt;
  
  
  CaptureKit — cheap, with content extraction for LLMs
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://capturekit.dev/" rel="noopener noreferrer"&gt;CaptureKit&lt;/a&gt; bundles screenshots with a Page Content API (HTML/Markdown/AI summaries)&lt;br&gt;
and edge caching from $7/mo for 1,000 credits ($7.00/1,000), dropping to $1.78/1,000 on Ultimate; the free tier&lt;br&gt;
is 100 credits/mo. Stealth proxies are Pro+ only. &lt;em&gt;Best for:&lt;/em&gt; indie devs who also need clean web content to feed&lt;br&gt;
an LLM alongside the screenshot.&lt;/p&gt;

&lt;h3&gt;
  
  
  ScreenshotOne — premium, deepest features, priced accordingly
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://screenshotone.com/" rel="noopener noreferrer"&gt;ScreenshotOne&lt;/a&gt; is the most-recommended premium option, with SDKs in 7 languages,&lt;br&gt;
PDF, video, JS/CSS injection, S3, webhooks, an official MCP server, and a dedicated AI-agents page. It's also&lt;br&gt;
one of the priciest at entry: $17/mo for 2,000 ($8.50/1,000), $0.009 overage, falling to $5.18/1,000 on Scale.&lt;br&gt;
Geo proxy is gated to the Growth ($79) and Scale ($259) plans — not the Basic plan. &lt;em&gt;Best for:&lt;/em&gt; teams that want&lt;br&gt;
the deepest, most polished feature set and don't mind paying for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  ScreenshotAPI.net — broad parameter set, mid free-tier
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://screenshotapi.net/" rel="noopener noreferrer"&gt;ScreenshotAPI.net&lt;/a&gt; offers a wide parameter set — element capture, video, PDF, data&lt;br&gt;
extraction, scrolling and 4K/5K captures — from $9/mo for 1,000 ($9.00/1,000), dropping to $1.75/1,000 on&lt;br&gt;
Business. The free tier is a 7-day, 100-shot trial, and there's no MCP. Proxy support is on the higher tiers only.&lt;br&gt;
&lt;em&gt;Best for:&lt;/em&gt; developers who want a broad feature set and don't need MCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Urlbox — no free tier, but forensic-grade
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://urlbox.com/" rel="noopener noreferrer"&gt;Urlbox&lt;/a&gt; is the most expensive at entry ($19/mo for 2,000 = $9.50/1,000) and the only&lt;br&gt;
option here with &lt;strong&gt;no free tier&lt;/strong&gt; — just a 7-day trial and a $100/10K refund guarantee. What you pay for is&lt;br&gt;
compliance-grade context: cryptographic timestamps/hashes, change detection, an official MCP server, and many&lt;br&gt;
output formats. &lt;em&gt;Best for:&lt;/em&gt; legal, compliance, and archival use cases where defensibility matters more than price.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose the cheapest option for &lt;em&gt;your&lt;/em&gt; needs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cheapest possible, thumbnails are fine?&lt;/strong&gt; Thum.io at $0.20/1,000. Accept branded free images and no
full-page/proxy/ad-removal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheapest full-featured at high volume (tens of thousands/mo)?&lt;/strong&gt; Microlink at $1.07/1,000 — unless you reach
Site-Shot's Professional tier, which is lower at $0.80/1,000.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheapest full-featured to &lt;em&gt;start&lt;/em&gt; (low commitment)?&lt;/strong&gt; &lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;Site-Shot&lt;/a&gt; at
$5/mo for 2,000 ($2.50/1,000), with full-page, ad/cookie removal, and country proxies included on every plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most generous free tier with no signup?&lt;/strong&gt; Thum.io (1,000/mo, branded) for the API; Site-Shot for an
unlimited free browser tool with no registration at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheapest that also works with &lt;a href="https://www.site-shot.com/ai-agents/" rel="noopener noreferrer"&gt;AI agents&lt;/a&gt; via MCP?&lt;/strong&gt; Microlink and
Site-Shot both ship official MCP servers and sit at the low end on price — Site-Shot's is &lt;code&gt;npx -y site-shot-mcp&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the cheapest screenshot API with a free tier in 2026?&lt;/strong&gt;&lt;br&gt;
On raw price, Thum.io is cheapest at $0.20 per 1,000, and it has a 1,000/month no-signup free tier (branded). But&lt;br&gt;
Thum.io is viewport-only — full-page is paid, and there's no ad/cookie removal or geo proxy. If you need a&lt;br&gt;
full-featured renderer, Site-Shot is the cheapest to start ($2.50/1,000 on a $5/mo plan, down to $0.80/1,000 at&lt;br&gt;
scale) and Microlink is cheapest at high volume ($1.07/1,000 at 46,000/mo).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there a free screenshot API with no signup?&lt;/strong&gt;&lt;br&gt;
Two options. Thum.io offers a no-signup free API tier (1,000/month, with Thum.io branding on the images).&lt;br&gt;
Site-Shot offers a free online screenshot tool with no registration, no API key, and no credit card — but note&lt;br&gt;
that's the browser tool; Site-Shot's paid API, like every other API here, still needs an account and key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why isn't the cheapest raw price the best value?&lt;/strong&gt;&lt;br&gt;
Because the $0.20/1,000 headline (Thum.io) only covers basic viewport thumbnails. The moment you need full-page&lt;br&gt;
capture, country/geo proxies, or ad and cookie-banner removal, you either can't get them or you pay extra. A&lt;br&gt;
full-featured Chromium API that includes those out of the box (Site-Shot from $2.50/1,000, Microlink from&lt;br&gt;
$1.07/1,000 at volume) is usually cheaper overall than bolting features onto a thumbnail service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the cheapest full-featured screenshot API?&lt;/strong&gt;&lt;br&gt;
At volume, Microlink at roughly $1.07 per 1,000 (its $49/mo plan covers 46,000 requests). At the lowest entry&lt;br&gt;
commitment, Site-Shot at $5/mo for 2,000 ($2.50/1,000), which also drops to $0.80/1,000 on its Professional plan —&lt;br&gt;
the lowest full-featured rate in this comparison. Both include full-page, ad/cookie removal, and geo/proxy support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which cheap screenshot APIs include geo proxies on the entry plan?&lt;/strong&gt;&lt;br&gt;
Site-Shot includes country proxies (IP, language, time zone, geolocation) on every plan, including the $5 entry&lt;br&gt;
plan. Most rivals tier-gate proxies: ScreenshotOne (Growth+), CaptureKit (Pro+), ScreenshotAPI.net (higher&lt;br&gt;
tiers), and ApiFlash (Enterprise only). Thum.io has no geo proxy at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which cheap screenshot API works with AI agents (MCP)?&lt;/strong&gt;&lt;br&gt;
Among the lower-priced options, Site-Shot and Microlink both ship official MCP servers — Site-Shot's installs with&lt;br&gt;
&lt;code&gt;npx -y site-shot-mcp&lt;/code&gt; (registry id &lt;code&gt;io.github.site-shot/site-shot-mcp&lt;/code&gt;). CaptureKit, ScreenshotOne, and Urlbox&lt;br&gt;
also have official MCP servers. ApiFlash relies on third-party wrappers; ScreenshotAPI.net and Thum.io have none.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Capture your first screenshot free in your browser — no signup, no key — at&lt;br&gt;
&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;site-shot.com&lt;/a&gt;. When you're ready to automate, the cheapest full-featured plan&lt;br&gt;
starts at $5/mo on the &lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;; see the&lt;br&gt;
&lt;a href="https://www.site-shot.com/#documentation" rel="noopener noreferrer"&gt;API docs&lt;/a&gt; or the &lt;a href="https://www.site-shot.com/ai-agents/" rel="noopener noreferrer"&gt;AI-agents guide&lt;/a&gt;.&lt;br&gt;
For more, compare the &lt;a href="https://www.site-shot.com/blog/best-website-screenshot-api-2026/" rel="noopener noreferrer"&gt;8 best screenshot APIs&lt;/a&gt;,&lt;br&gt;
read about &lt;a href="https://www.site-shot.com/blog/screenshot-api-for-ai-agents-mcp/" rel="noopener noreferrer"&gt;AI agents and MCP&lt;/a&gt;, or see the&lt;br&gt;
head-to-head &lt;a href="https://www.site-shot.com/blog/site-shot-vs-apiflash-2026/" rel="noopener noreferrer"&gt;Site-Shot vs ApiFlash&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>screenshot</category>
      <category>api</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Give AI Agents Website Screenshots with MCP (2026)</title>
      <dc:creator>alekseykazandaev</dc:creator>
      <pubDate>Wed, 15 Jul 2026 08:09:57 +0000</pubDate>
      <link>https://dev.to/alekseykazandaev/how-to-give-ai-agents-website-screenshots-with-mcp-2026-2bma</link>
      <guid>https://dev.to/alekseykazandaev/how-to-give-ai-agents-website-screenshots-with-mcp-2026-2bma</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the Site-Shot blog.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you're building an AI agent that needs to &lt;em&gt;see&lt;/em&gt; a web page — to drive a browser, run visual QA, or&lt;br&gt;
feed a screenshot into a vision model — you need a screenshot API that the agent can call on its own.&lt;br&gt;
In 2026 the clean way to wire that up is the Model Context Protocol (MCP): you point your agent at an&lt;br&gt;
MCP server and it gets a screenshot tool it can invoke directly. This guide explains what MCP is, why&lt;br&gt;
agents need screenshots, shows a copy-paste Claude Desktop config for Site-Shot's official MCP server,&lt;br&gt;
and lists which screenshot APIs actually ship an official MCP server versus those that don't.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; this comparison is published by Site-Shot. We have kept the numbers accurate and the&lt;br&gt;
trade-offs honest — including where competitors beat us. Prices checked June 2026; confirm on each&lt;br&gt;
vendor pricing page before buying.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  What is MCP, and why would an agent need screenshots?
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol (MCP) is an open standard for connecting AI assistants to external tools and&lt;br&gt;
data. An MCP &lt;em&gt;server&lt;/em&gt; exposes one or more &lt;strong&gt;tools&lt;/strong&gt; (each with a name, a description, and a JSON input&lt;br&gt;
schema); an MCP &lt;em&gt;client&lt;/em&gt; — Claude Desktop, Cursor, Claude Code, and a growing list of agent frameworks —&lt;br&gt;
discovers those tools and lets the model call them. The agent never sees your API key or HTTP plumbing;&lt;br&gt;
it just sees a tool like "capture a screenshot of this URL" and decides when to use it.&lt;/p&gt;

&lt;p&gt;Agents reach for screenshots in three recurring patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vision pipelines.&lt;/strong&gt; A multimodal model can't reliably reason about a page from raw HTML. Hand it a
rendered PNG and it can read layout, find a button, check a chart, or verify that a deploy looks right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web automation.&lt;/strong&gt; An agent driving a flow (login, checkout, form fill) needs to &lt;em&gt;look&lt;/em&gt; between steps
to confirm what happened before it clicks again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual QA and monitoring.&lt;/strong&gt; Capture a page on a schedule or after a change, then diff or describe it
to catch broken layouts, missing images, or unexpected content.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Why ad and cookie-banner removal cuts vision-model cost
&lt;/h3&gt;

&lt;p&gt;There's a money angle specific to AI agents. Vision models bill by image tokens, and token count scales&lt;br&gt;
with the image. A full-page capture cluttered with ad iframes, sticky cookie-consent overlays, and&lt;br&gt;
newsletter modals is &lt;em&gt;more pixels and more visual noise&lt;/em&gt; for the model to encode — you pay for tokens&lt;br&gt;
spent encoding junk, and the noise can degrade the answer. Removing ads and cookie banners at capture&lt;br&gt;
time (Site-Shot's &lt;code&gt;no_ads&lt;/code&gt; and &lt;code&gt;no_cookie_popup&lt;/code&gt; parameters, and equivalents on most competitors) gives&lt;br&gt;
the model a cleaner, often smaller image: lower token cost per call and fewer wrong answers from a popup&lt;br&gt;
covering the content. For an agent that captures thousands of pages, that adds up.&lt;/p&gt;
&lt;h2&gt;
  
  
  Setting up Site-Shot's MCP server (copy-paste config)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;Site-Shot&lt;/a&gt; ships an official MCP server published as &lt;code&gt;site-shot-mcp&lt;/code&gt;&lt;br&gt;
(registry id &lt;code&gt;io.github.site-shot/site-shot-mcp&lt;/code&gt;). It runs over &lt;code&gt;npx&lt;/code&gt;, so there's nothing to install&lt;br&gt;
globally. Drop this into your Claude Desktop config file (&lt;code&gt;claude_desktop_config.json&lt;/code&gt; —&lt;br&gt;
&lt;em&gt;Settings → Developer → Edit Config&lt;/em&gt;), restart Claude Desktop, and the tools appear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"site-shot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"site-shot-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SITESHOT_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server exposes two tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;capture_screenshot&lt;/code&gt;&lt;/strong&gt; — a viewport screenshot of a URL, with the usual options (dimensions, device
emulation, format, ad/cookie removal, country proxy).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;capture_full_page&lt;/code&gt;&lt;/strong&gt; — a full-length capture that scrolls and stitches the entire page (up to
20,000px tall on Site-Shot), ideal for handing a whole article or dashboard to a vision model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same config shape works in other MCP clients (Cursor, Claude Code, etc.) — they all read a&lt;br&gt;
&lt;code&gt;command&lt;/code&gt; / &lt;code&gt;args&lt;/code&gt; / &lt;code&gt;env&lt;/code&gt; block. Under the hood each tool is a single GET request to Site-Shot's real&lt;br&gt;
Chromium renderer, returning a PNG/JPEG or JSON (base64 image plus the target's response headers).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Honest scoping:&lt;/strong&gt; the MCP server requires an API key. Site-Shot's &lt;em&gt;free, no-signup&lt;/em&gt; offering is the&lt;br&gt;
&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;browser-based online tool&lt;/a&gt; — great for one-off captures, but it does not&lt;br&gt;
issue an API key. To use the MCP server (or the HTTP API at all) you need an account and a key from the&lt;br&gt;
&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;, starting at $5/mo for 2,000 screenshots. See the&lt;br&gt;
&lt;a href="https://www.site-shot.com/ai-agents/" rel="noopener noreferrer"&gt;AI agents page&lt;/a&gt; for the full agent setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Which screenshot APIs ship an official MCP server?
&lt;/h2&gt;

&lt;p&gt;Plenty of screenshot APIs exist; far fewer maintain an &lt;em&gt;official, first-party&lt;/em&gt; MCP server you can trust&lt;br&gt;
to track their feature set. This table sorts by that distinction.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Official MCP server?&lt;/th&gt;
&lt;th&gt;Entry plan&lt;/th&gt;
&lt;th&gt;~Cost / 1,000&lt;/th&gt;
&lt;th&gt;Ad + cookie removal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Site-Shot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Official (&lt;code&gt;site-shot-mcp&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;$5/mo · 2,000&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$2.50&lt;/strong&gt; → $0.80 at scale&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenshotOne&lt;/td&gt;
&lt;td&gt;✅ Official&lt;/td&gt;
&lt;td&gt;$17/mo · 2,000&lt;/td&gt;
&lt;td&gt;$8.50&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urlbox&lt;/td&gt;
&lt;td&gt;✅ Official&lt;/td&gt;
&lt;td&gt;$19/mo · 2,000&lt;/td&gt;
&lt;td&gt;$9.50&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microlink&lt;/td&gt;
&lt;td&gt;✅ Official&lt;/td&gt;
&lt;td&gt;$49/mo · 46,000&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1.07&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CaptureKit&lt;/td&gt;
&lt;td&gt;✅ Official&lt;/td&gt;
&lt;td&gt;$7/mo · 1,000&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ApiFlash&lt;/td&gt;
&lt;td&gt;⚠️ 3rd-party wrappers only&lt;/td&gt;
&lt;td&gt;$7/mo · 1,000&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenshotAPI.net&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;$9/mo · 1,000&lt;/td&gt;
&lt;td&gt;$9.00&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thum.io&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;$2 / 10,000 hits&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cost per 1,000 is from each provider's cheapest paid plan. For an agent, "official MCP" matters: a&lt;br&gt;
first-party server stays in sync with the API and is maintained by the vendor; a third-party wrapper can&lt;br&gt;
lag or vanish.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP-ready options, one by one
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Site-Shot
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;Site-Shot&lt;/a&gt;'s official server (&lt;code&gt;npx -y site-shot-mcp&lt;/code&gt;) exposes&lt;br&gt;
&lt;code&gt;capture_screenshot&lt;/code&gt; and &lt;code&gt;capture_full_page&lt;/code&gt;, backed by real Chromium with device emulation, country&lt;br&gt;
proxies (IP, language, time zone, geolocation on every plan), full-page to 20,000px, and ad/cookie&lt;br&gt;
removal that keeps vision-model images clean. It's the lowest entry commitment with an official MCP —&lt;br&gt;
$5/mo for 2,000 shots, dropping to $0.80/1,000 at scale — and the only one here with a genuinely free,&lt;br&gt;
no-signup browser tool to prototype against. &lt;em&gt;Best for:&lt;/em&gt; agents that want full-featured real-browser&lt;br&gt;
captures without premium per-shot pricing. &lt;em&gt;Gap:&lt;/em&gt; no native client SDKs yet — the HTTP API is a plain&lt;br&gt;
GET, so for non-MCP code you call it directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  ScreenshotOne
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://screenshotone.com/" rel="noopener noreferrer"&gt;ScreenshotOne&lt;/a&gt; ships an official MCP server (the &lt;code&gt;render-website-screenshot&lt;/code&gt;&lt;br&gt;
tool, env &lt;code&gt;SCREENSHOTONE_API_KEY&lt;/code&gt;) alongside the deepest feature set in this list: SDKs in seven&lt;br&gt;
languages, PDF and video rendering, JS/CSS injection, S3 upload, webhooks, and a dedicated AI-agents&lt;br&gt;
page. It is genuinely the most polished, integration-rich option — and the priciest per shot at&lt;br&gt;
$8.50/1,000 ($17/mo for 2,000; geo proxy is gated to its Growth and Scale tiers). &lt;em&gt;Best for:&lt;/em&gt; teams that&lt;br&gt;
want the richest agent tooling and don't mind paying for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Urlbox
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://urlbox.com/" rel="noopener noreferrer"&gt;Urlbox&lt;/a&gt; maintains an official MCP server (&lt;code&gt;@urlbox/screenshot-mcp&lt;/code&gt;, a &lt;code&gt;render&lt;/code&gt;&lt;br&gt;
tool that returns PNG/PDF/MP4 plus HTML/metadata, env &lt;code&gt;SECRET_KEY&lt;/code&gt;). Its differentiator is&lt;br&gt;
forensic-grade output: cryptographic timestamps and hashes, change detection, and many formats. There's&lt;br&gt;
no free tier — a 7-day trial and a $100/10K refund guarantee instead — and entry pricing is $9.50/1,000&lt;br&gt;
($19/mo for 2,000). &lt;em&gt;Best for:&lt;/em&gt; agents in legal, compliance, or archival workflows where a defensible,&lt;br&gt;
verifiable capture matters more than price.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microlink
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://microlink.io/" rel="noopener noreferrer"&gt;Microlink&lt;/a&gt; offers an official MCP integration over a "browser as API" with full&lt;br&gt;
Puppeteer/Playwright control and global edge caching. Its volume pricing is the cheapest full-featured&lt;br&gt;
option here — $49/mo for 46,000 requests (~$1.07/1,000) — with adblock and cookie-banner handling&lt;br&gt;
available even on the free 50-req/day tier. &lt;em&gt;Best for:&lt;/em&gt; high-volume agents that want headless-browser&lt;br&gt;
control and the lowest full-featured price at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  CaptureKit
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://capturekit.dev/" rel="noopener noreferrer"&gt;CaptureKit&lt;/a&gt; ships an official MCP server and pairs screenshots with a Page&lt;br&gt;
Content API (HTML/Markdown/AI summaries) and stealth proxies, from $7/mo for 1,000 credits. That content&lt;br&gt;
side is handy when your agent needs both a screenshot &lt;em&gt;and&lt;/em&gt; clean page text to reason over. &lt;em&gt;Best for:&lt;/em&gt;&lt;br&gt;
indie developers building agents that need clean web content for an LLM alongside captures.&lt;/p&gt;

&lt;h3&gt;
  
  
  ApiFlash, ScreenshotAPI.net, Thum.io — no official MCP
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apiflash.com/" rel="noopener noreferrer"&gt;ApiFlash&lt;/a&gt; is fast and cheap (Chrome on AWS Lambda, $7/mo for 1,000) but has only&lt;br&gt;
third-party MCP wrappers — fine for a quick experiment, riskier for production. &lt;a href="https://screenshotapi.net/" rel="noopener noreferrer"&gt;ScreenshotAPI.net&lt;/a&gt;&lt;br&gt;
has a broad parameter set (element capture, video, PDF, data extraction) from $9/mo but no MCP server at&lt;br&gt;
all. &lt;a href="https://www.thum.io/" rel="noopener noreferrer"&gt;Thum.io&lt;/a&gt; is the cheapest raw price ($0.20/1,000) with a no-signup branded free&lt;br&gt;
tier, but full-page is a paid feature, there's no ad/cookie removal or geo proxy, and no MCP. With these&lt;br&gt;
three you'd hand-roll your own tool wrapper around the HTTP API for an agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose for an AI agent
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Want the lowest-commitment official MCP with real-browser quality?&lt;/strong&gt; Site-Shot — $5/mo, official
&lt;code&gt;site-shot-mcp&lt;/code&gt;, ad/cookie removal to keep vision tokens down, and a free browser tool to test first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Want the richest, most integration-heavy agent tooling regardless of price?&lt;/strong&gt; ScreenshotOne.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need verifiable, forensic-grade captures for compliance or archival agents?&lt;/strong&gt; Urlbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High volume and want the cheapest full-featured option?&lt;/strong&gt; Microlink at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need clean page content plus screenshots for your LLM?&lt;/strong&gt; CaptureKit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No official MCP, but cheap or simple is the priority?&lt;/strong&gt; ApiFlash (fast/budget, 3rd-party wrapper),
ScreenshotAPI.net (broad params), or Thum.io (cheapest thumbnails) — expect to write the tool wrapper
yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more detail, see our &lt;a href="https://www.site-shot.com/blog/best-website-screenshot-api-2026/" rel="noopener noreferrer"&gt;8-tool screenshot API comparison&lt;/a&gt;,&lt;br&gt;
the &lt;a href="https://www.site-shot.com/blog/cheapest-screenshot-api-2026/" rel="noopener noreferrer"&gt;cheapest screenshot API guide&lt;/a&gt;, and&lt;br&gt;
&lt;a href="https://www.site-shot.com/blog/full-page-vs-viewport-screenshot/" rel="noopener noreferrer"&gt;full-page vs. viewport screenshots&lt;/a&gt;&lt;br&gt;
when deciding which tool your agent should call.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is a screenshot API for AI agents?&lt;/strong&gt;&lt;br&gt;
It's a hosted service that renders a web page in a real browser and returns an image (PNG/JPEG), which an&lt;br&gt;
AI agent calls to "see" a page — for vision-model reasoning, web automation, or visual QA. The&lt;br&gt;
agent-friendly way to expose it is an MCP server, so the model can invoke a screenshot tool directly&lt;br&gt;
instead of you writing custom HTTP glue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a screenshot MCP server?&lt;/strong&gt;&lt;br&gt;
An MCP server that exposes screenshot capture as one or more tools an AI agent can call. Site-Shot's&lt;br&gt;
official server (&lt;code&gt;npx -y site-shot-mcp&lt;/code&gt;, registry id &lt;code&gt;io.github.site-shot/site-shot-mcp&lt;/code&gt;) exposes&lt;br&gt;
&lt;code&gt;capture_screenshot&lt;/code&gt; and &lt;code&gt;capture_full_page&lt;/code&gt;; ScreenshotOne, Urlbox, Microlink, and CaptureKit ship&lt;br&gt;
official servers too. ApiFlash has only third-party wrappers; ScreenshotAPI.net and Thum.io have none.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I take a website screenshot programmatically for an agent?&lt;/strong&gt;&lt;br&gt;
Two ways. Over MCP: add the vendor's MCP server to your client config (for Site-Shot, the &lt;code&gt;npx&lt;/code&gt;/&lt;code&gt;args&lt;/code&gt;/&lt;br&gt;
&lt;code&gt;env&lt;/code&gt; block above with your &lt;code&gt;SITESHOT_API_KEY&lt;/code&gt;) and let the agent call the tool. Or directly: send a&lt;br&gt;
single HTTP GET to the screenshot API with the target URL and options, and read back the PNG/JPEG or a&lt;br&gt;
JSON payload. Site-Shot supports both; the HTTP API is a plain GET with no SDK required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need an API key to use a screenshot MCP server?&lt;/strong&gt;&lt;br&gt;
Yes. The MCP server authenticates with an API key (&lt;code&gt;SITESHOT_API_KEY&lt;/code&gt; for Site-Shot), which requires an&lt;br&gt;
account. Site-Shot's &lt;em&gt;free, no-signup&lt;/em&gt; option is its browser-based online tool only — that tool does not&lt;br&gt;
issue an API key. The paid API, which the MCP server uses, starts at $5/mo for 2,000 screenshots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why remove ads and cookie banners before sending a screenshot to a vision model?&lt;/strong&gt;&lt;br&gt;
Vision models bill by image tokens, and ads, cookie overlays, and modals add pixels and visual noise you&lt;br&gt;
pay to encode — and they can hide the content you actually want analyzed. Removing them at capture time&lt;br&gt;
(Site-Shot's &lt;code&gt;no_ads&lt;/code&gt; and &lt;code&gt;no_cookie_popup&lt;/code&gt;) yields a cleaner, often smaller image: lower token cost per&lt;br&gt;
call and more accurate answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which screenshot API is best for building an AI agent in 2026?&lt;/strong&gt;&lt;br&gt;
If you want the lowest-commitment official MCP with real-browser quality and ad/cookie removal, Site-Shot&lt;br&gt;
($5/mo, &lt;code&gt;site-shot-mcp&lt;/code&gt;). For the richest agent tooling and SDKs, ScreenshotOne. For forensic/compliance&lt;br&gt;
captures, Urlbox. For cheapest at volume, Microlink. For screenshots plus clean page content, CaptureKit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Capture your first screenshot free in your browser — no signup — at&lt;br&gt;
&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;site-shot.com&lt;/a&gt;. Building an agent? See the&lt;br&gt;
&lt;a href="https://www.site-shot.com/ai-agents/" rel="noopener noreferrer"&gt;AI agents page&lt;/a&gt;, grab an API key on the&lt;br&gt;
&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;, and read the&lt;br&gt;
&lt;a href="https://www.site-shot.com/#documentation" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>screenshot</category>
      <category>api</category>
    </item>
    <item>
      <title>Best Website Screenshot API in 2026 — 8 Tools Compared</title>
      <dc:creator>alekseykazandaev</dc:creator>
      <pubDate>Wed, 15 Jul 2026 08:07:27 +0000</pubDate>
      <link>https://dev.to/alekseykazandaev/best-website-screenshot-api-in-2026-8-tools-compared-mgo</link>
      <guid>https://dev.to/alekseykazandaev/best-website-screenshot-api-in-2026-8-tools-compared-mgo</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the Site-Shot blog.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Picking a website screenshot API in 2026 comes down to a few things: price per screenshot at your&lt;br&gt;
volume, whether there's a usable free tier, the quality of full-page rendering, geo/proxy support, and —&lt;br&gt;
increasingly — whether it works with AI agents (MCP). This guide compares eight of the most-recommended&lt;br&gt;
screenshot APIs with current pricing and features, so you can pick the right one fast.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; this comparison is published by Site-Shot. We've tried to keep the numbers accurate&lt;br&gt;
and the trade-offs honest — including where competitors beat us. All prices were checked in June 2026;&lt;br&gt;
always confirm on each vendor's pricing page before you buy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Quick comparison table
&lt;/h2&gt;

&lt;p&gt;Cost per 1,000 is calculated from each provider's cheapest paid plan (lower is cheaper). "Full-page",&lt;br&gt;
"Ad/cookie removal", and "Geo proxy" reflect availability on entry-level plans where noted.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Entry plan&lt;/th&gt;
&lt;th&gt;~Cost / 1,000&lt;/th&gt;
&lt;th&gt;Full-page&lt;/th&gt;
&lt;th&gt;Ad + cookie removal&lt;/th&gt;
&lt;th&gt;Geo proxy&lt;/th&gt;
&lt;th&gt;MCP server&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Site-Shot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free online tool, &lt;strong&gt;no signup&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$5/mo · 2,000&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$2.50&lt;/strong&gt; → $0.80 at scale&lt;/td&gt;
&lt;td&gt;✅ (to 20,000px)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ (official)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenshotOne&lt;/td&gt;
&lt;td&gt;100/mo&lt;/td&gt;
&lt;td&gt;$17/mo · 2,000&lt;/td&gt;
&lt;td&gt;$8.50&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urlbox&lt;/td&gt;
&lt;td&gt;7-day trial (no free tier)&lt;/td&gt;
&lt;td&gt;$19/mo · 2,000&lt;/td&gt;
&lt;td&gt;$9.50&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;BYO proxy&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ApiFlash&lt;/td&gt;
&lt;td&gt;100/mo&lt;/td&gt;
&lt;td&gt;$7/mo · 1,000&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Enterprise only&lt;/td&gt;
&lt;td&gt;3rd-party&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ScreenshotAPI.net&lt;/td&gt;
&lt;td&gt;100 (trial)&lt;/td&gt;
&lt;td&gt;$9/mo · 1,000&lt;/td&gt;
&lt;td&gt;$9.00&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Paid tiers&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CaptureKit&lt;/td&gt;
&lt;td&gt;100/mo&lt;/td&gt;
&lt;td&gt;$7/mo · 1,000&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ (stealth)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microlink&lt;/td&gt;
&lt;td&gt;50/day&lt;/td&gt;
&lt;td&gt;$49/mo · 46,000&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1.07&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thum.io&lt;/td&gt;
&lt;td&gt;1,000/mo, no signup (branded)&lt;/td&gt;
&lt;td&gt;$2 / 10,000 hits&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Paid tier&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt; ScreenshotOne and Urlbox are the premium, feature-dense options (and the priciest&lt;br&gt;
per shot). Thum.io and Microlink are the cheapest on raw price. Site-Shot sits in the sweet spot — a&lt;br&gt;
full-featured Chromium API (full-page, country proxies, ad/cookie removal, and an official MCP server) at&lt;br&gt;
under a third of ScreenshotOne's or Urlbox's entry price, plus the only genuinely free, no-signup browser&lt;br&gt;
tool in the list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tools, one by one
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Site-Shot — best value full-featured API, free no-signup tool + MCP
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;Site-Shot&lt;/a&gt; renders pages in a real Chromium browser and returns a PNG/JPEG&lt;br&gt;
(or JSON with base64 + the target's response headers) from a single GET request — no SDK required.&lt;br&gt;
Full-page capture up to 20,000px, device emulation, country-specific proxies (IP, language, time zone,&lt;br&gt;
geolocation), and automatic ad + cookie-banner removal (&lt;code&gt;no_ads&lt;/code&gt;, &lt;code&gt;no_cookie_popup&lt;/code&gt;) that also keeps&lt;br&gt;
images clean for AI vision pipelines. An official MCP server (&lt;code&gt;npx -y site-shot-mcp&lt;/code&gt;) exposes the same&lt;br&gt;
capture tools to Claude, Cursor, and other AI agents. The browser tool is &lt;strong&gt;free with no registration&lt;/strong&gt;;&lt;br&gt;
the &lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;API&lt;/a&gt; starts at &lt;strong&gt;$5/mo for 2,000 screenshots&lt;/strong&gt; (the $15 Lite&lt;br&gt;
plan includes 10,000) and drops to &lt;strong&gt;$0.0008/shot — $0.80 per 1,000&lt;/strong&gt; on the Professional plan.&lt;br&gt;
&lt;em&gt;Best for:&lt;/em&gt; developers who want full-featured, real-browser screenshots without paying premium per-shot&lt;br&gt;
rates. &lt;em&gt;Gaps:&lt;/em&gt; no native SDKs yet (on the roadmap) — you call the plain HTTP API directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  ScreenshotOne — the developer-favorite premium API
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://screenshotone.com/" rel="noopener noreferrer"&gt;ScreenshotOne&lt;/a&gt; is the most-recommended option, with a deep feature set&lt;br&gt;
(PDF, video, JS/CSS injection, dark mode, S3, webhooks), native SDKs in 7 languages, an official MCP&lt;br&gt;
server, and a dedicated AI-agents page. You pay for it: $17/mo for 2,000 shots ($8.50/1,000), $0.009&lt;br&gt;
overage. &lt;em&gt;Best for:&lt;/em&gt; teams that want the most polished, integration-rich option and don't mind the price.&lt;/p&gt;

&lt;h3&gt;
  
  
  Urlbox — premium, compliance-grade
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://urlbox.com/" rel="noopener noreferrer"&gt;Urlbox&lt;/a&gt; targets "revenue-generating businesses" with forensic-grade context&lt;br&gt;
(cryptographic timestamps/hashes), change detection, bring-your-own proxy support (route through your own&lt;br&gt;
provider) with built-in geolocation emulation, and many output formats. No free tier — a 7-day trial and&lt;br&gt;
a $100/10K guarantee instead. From $19/mo for 2,000 renders ($9.50/1,000).&lt;br&gt;
&lt;em&gt;Best for:&lt;/em&gt; legal, compliance, and archival use cases where defensibility matters more than price.&lt;/p&gt;

&lt;h3&gt;
  
  
  ApiFlash — cheap and fast
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apiflash.com/" rel="noopener noreferrer"&gt;ApiFlash&lt;/a&gt; runs Chrome on AWS Lambda for fast captures, with a simple feature set&lt;br&gt;
and a low $7/mo entry (1,000 shots). Geolocation/managed proxies are Enterprise-only. &lt;em&gt;Best for:&lt;/em&gt; simple,&lt;br&gt;
fast, budget screenshots where you don't need geo-targeting.&lt;/p&gt;

&lt;h3&gt;
  
  
  ScreenshotAPI.net — broad feature set, developer-focused
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://screenshotapi.net/" rel="noopener noreferrer"&gt;ScreenshotAPI.net&lt;/a&gt; offers a wide parameter set, element capture, video output,&lt;br&gt;
PDF, data extraction, and cron scheduling from $9/mo (1,000); proxy support arrives on its higher tiers.&lt;br&gt;
No MCP. &lt;em&gt;Best for:&lt;/em&gt; developers who want a broad parameter set at a low entry price.&lt;/p&gt;

&lt;h3&gt;
  
  
  CaptureKit — cheap, with content extraction
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://capturekit.dev/" rel="noopener noreferrer"&gt;CaptureKit&lt;/a&gt; bundles screenshots with a Page Content API (HTML/Markdown/AI&lt;br&gt;
summaries), stealth proxies, and edge caching from $7/mo (1,000 credits), and now ships an official MCP&lt;br&gt;
server too. &lt;em&gt;Best for:&lt;/em&gt; indie devs who also need clean web content to feed an LLM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microlink — cheapest at volume, full headless control
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://microlink.io/" rel="noopener noreferrer"&gt;Microlink&lt;/a&gt; is a "browser as API" with full Puppeteer/Playwright control, an&lt;br&gt;
official MCP server, global edge caching, and excellent volume pricing ($49/mo for 46,000 ≈ $1.07/1,000).&lt;br&gt;
Free tier is 50 req/day. &lt;em&gt;Best for:&lt;/em&gt; high-volume workloads and AI agents that want the cheapest&lt;br&gt;
full-featured option at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thum.io — cheapest raw price, real-time streaming
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.thum.io/" rel="noopener noreferrer"&gt;Thum.io&lt;/a&gt; streams an animated render while capturing, with a generous 1,000/mo&lt;br&gt;
no-signup free tier and $0.20/1,000 pricing. But the free tier is branded, full-page is a paid feature,&lt;br&gt;
and there's no ad/cookie removal or geo proxy. &lt;em&gt;Best for:&lt;/em&gt; simple, high-volume thumbnails on a tight budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Want a free screenshot with no signup?&lt;/strong&gt; Use Site-Shot's online tool (or Thum.io's branded free tier).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheapest full-featured API?&lt;/strong&gt; Microlink at volume; Site-Shot for the lowest entry commitment ($5/mo)
— and an even lower $0.80/1,000 at scale — with a free browser tool to prototype against.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most features / integrations regardless of price?&lt;/strong&gt; ScreenshotOne or Urlbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building an &lt;a href="https://www.site-shot.com/ai-agents/" rel="noopener noreferrer"&gt;AI agent&lt;/a&gt; today?&lt;/strong&gt; Site-Shot, ScreenshotOne, Urlbox,
Microlink, and CaptureKit all ship official MCP servers right now — Site-Shot's is &lt;code&gt;npx -y site-shot-mcp&lt;/code&gt;
(API key from the &lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best value for real-browser quality on a budget?&lt;/strong&gt; Site-Shot — under a third of the premium APIs'
per-shot price, with full-page, proxies, ad/cookie removal, and an official MCP server included.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best website screenshot API in 2026?&lt;/strong&gt;&lt;br&gt;
For most developers it's a trade-off between ScreenshotOne/Urlbox (most features, premium price),&lt;br&gt;
Microlink/Thum.io (cheapest), and Site-Shot (best value for full-featured, real-Chromium screenshots with&lt;br&gt;
a free no-signup tool and an official MCP server). Pick by your volume and whether you need MCP today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the cheapest screenshot API?&lt;/strong&gt;&lt;br&gt;
On raw per-shot price, Thum.io ($0.20/1,000) is cheapest. Among full-featured Chromium APIs, Site-Shot&lt;br&gt;
starts at $2.50/1,000 on its $5/mo plan and drops to $0.80/1,000 at scale — undercutting Microlink's&lt;br&gt;
$1.07/1,000 — while keeping a free no-signup browser tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there a free screenshot API with no signup?&lt;/strong&gt;&lt;br&gt;
Site-Shot offers a free online screenshot tool with no registration; Thum.io offers a no-signup free API&lt;br&gt;
tier (with branding). Most other APIs require a free account to get an API key. Site-Shot's paid API,&lt;br&gt;
like the others, still requires an account and API key (from the&lt;br&gt;
&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which screenshot APIs work with AI agents / MCP?&lt;/strong&gt;&lt;br&gt;
Site-Shot, ScreenshotOne, Urlbox, Microlink, and CaptureKit ship official MCP servers today — Site-Shot's&lt;br&gt;
is &lt;code&gt;npx -y site-shot-mcp&lt;/code&gt; (registry id &lt;code&gt;io.github.site-shot/site-shot-mcp&lt;/code&gt;). ApiFlash is available via&lt;br&gt;
third-party MCP wrappers. ScreenshotAPI.net and Thum.io have no MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a screenshot API remove ads and cookie banners?&lt;/strong&gt;&lt;br&gt;
Yes — Site-Shot (&lt;code&gt;no_ads&lt;/code&gt;, &lt;code&gt;no_cookie_popup&lt;/code&gt;), ScreenshotOne, Urlbox, ApiFlash, ScreenshotAPI.net,&lt;br&gt;
CaptureKit, and Microlink all support removing ads and cookie-consent banners for cleaner captures.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Capture your first screenshot free in your browser — no signup — at&lt;br&gt;
&lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;site-shot.com&lt;/a&gt;. Ready to automate? Get an API key on the&lt;br&gt;
&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;, or read the&lt;br&gt;
&lt;a href="https://www.site-shot.com/#documentation" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>screenshot</category>
      <category>api</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to Take a Website Screenshot with PHP</title>
      <dc:creator>alekseykazandaev</dc:creator>
      <pubDate>Mon, 06 Apr 2026 18:09:26 +0000</pubDate>
      <link>https://dev.to/alekseykazandaev/how-to-take-a-website-screenshot-with-php-454f</link>
      <guid>https://dev.to/alekseykazandaev/how-to-take-a-website-screenshot-with-php-454f</guid>
      <description>&lt;p&gt;PHP still powers a lot of real-world web applications, so screenshot generation fits naturally into CMS plugins, monitoring tools, and link preview workflows. This Dev.to version keeps the original examples intact while tightening the framing for developers who want a straightforward API-based approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PHP 7.4+ with the cURL extension enabled&lt;/li&gt;
&lt;li&gt;A Site-Shot API key (&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Basic Screenshot Capture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;http_build_query&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'url'&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'https://example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'userkey'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'width'&lt;/span&gt;   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'height'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'format'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://api.site-shot.com/?&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$params&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLOPT_TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$httpCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_getinfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLINFO_HTTP_CODE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$httpCode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'screenshot.png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Screenshot saved.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: HTTP &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$httpCode&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API returns the raw image bytes. Just save them to a file or serve them to the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Page Screenshot
&lt;/h2&gt;

&lt;p&gt;To capture the entire scrollable page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;http_build_query&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'url'&lt;/span&gt;        &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'https://example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'userkey'&lt;/span&gt;    &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'full_size'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'max_height'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;15000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'format'&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JSON Response with Base64
&lt;/h2&gt;

&lt;p&gt;If you need the image as base64 along with HTTP metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;http_build_query&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'url'&lt;/span&gt;           &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'https://example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'userkey'&lt;/span&gt;       &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'width'&lt;/span&gt;         &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'height'&lt;/span&gt;        &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'format'&lt;/span&gt;        &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'response_type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'json'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://api.site-shot.com/?&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$params&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLOPT_TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'error'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"API error: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'error'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$base64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'image'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$base64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$base64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$base64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nb"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'screenshot.png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;base64_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$base64&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Screenshot saved.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Serving Screenshots in a Web Application
&lt;/h2&gt;

&lt;p&gt;Generate and serve a thumbnail screenshot directly to the browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$targetUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'url'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$targetUrl&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;http_response_code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Missing url parameter'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;http_build_query&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'url'&lt;/span&gt;          &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$targetUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'userkey'&lt;/span&gt;      &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'width'&lt;/span&gt;        &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'height'&lt;/span&gt;       &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'format'&lt;/span&gt;       &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'jpeg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'scaled_width'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://api.site-shot.com/?&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$params&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLOPT_TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$httpCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_getinfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;CURLINFO_HTTP_CODE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;curl_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$httpCode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Content-Type: image/jpeg'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Cache-Control: public, max-age=3600'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;http_response_code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;502&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Screenshot failed'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  WordPress Integration
&lt;/h2&gt;

&lt;p&gt;You can integrate the screenshot API into a WordPress plugin or theme:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;site_shot_capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$defaults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'url'&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'userkey'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;defined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SITE_SHOT_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="no"&gt;SITE_SHOT_API_KEY&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'width'&lt;/span&gt;   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'height'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'format'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;http_build_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;array_merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$defaults&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$options&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

    &lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;wp_remote_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s2"&gt;"https://api.site-shot.com/?&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$params&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'timeout'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;is_wp_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;wp_remote_retrieve_body&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage:&lt;/span&gt;
&lt;span class="nv"&gt;$image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;site_shot_capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'full_size'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/tmp/screenshot.png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Target web page&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;userkey&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your API key&lt;/td&gt;
&lt;td&gt;&lt;code&gt;abc123&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;width&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Viewport width (100–8000)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1280&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;height&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Viewport height (100–20000)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;full_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Capture full page&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Output format&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;png&lt;/code&gt; or &lt;code&gt;jpeg&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;response_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Response format&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;image&lt;/code&gt; or &lt;code&gt;json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scaled_width&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resize output&lt;/td&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;See the &lt;a href="https://www.site-shot.com/#documentation" rel="noopener noreferrer"&gt;full API documentation&lt;/a&gt; for all available parameters.&lt;/p&gt;




&lt;p&gt;Try Site-Shot free — no registration needed: &lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;https://www.site-shot.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>How to Take a Website Screenshot with Node.js</title>
      <dc:creator>alekseykazandaev</dc:creator>
      <pubDate>Mon, 06 Apr 2026 18:07:11 +0000</pubDate>
      <link>https://dev.to/alekseykazandaev/how-to-take-a-website-screenshot-with-nodejs-1071</link>
      <guid>https://dev.to/alekseykazandaev/how-to-take-a-website-screenshot-with-nodejs-1071</guid>
      <description>&lt;p&gt;If you are building link previews, monitoring dashboards, or visual testing tools in Node.js, a screenshot API gives you a clean HTTP-based workflow without browser orchestration. This version is tuned for the Dev.to audience and keeps the examples focused on the most common production use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 18+ (for built-in &lt;code&gt;fetch&lt;/code&gt;) or any version with &lt;code&gt;axios&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A Site-Shot API key (&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using Built-in Fetch (Node.js 18+)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;captureScreenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;outputPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;screenshot.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;userkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1280&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1024&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`https://api.site-shot.com/?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`API returned &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arrayBuffer&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outputPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Screenshot saved to &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;outputPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;captureScreenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Axios
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;captureScreenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;outputPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;screenshot.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;userkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;responseType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;arraybuffer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;70000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outputPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Screenshot saved to &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;outputPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;captureScreenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Full Page Scrolling Screenshot
&lt;/h2&gt;

&lt;p&gt;Capture the entire page, not just the viewport:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;userkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;full_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;max_height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;15000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s2"&gt;`https://api.site-shot.com/?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JSON Response with Base64
&lt;/h2&gt;

&lt;p&gt;Get the screenshot as base64-encoded data along with HTTP metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;userkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1280&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1024&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s2"&gt;`https://api.site-shot.com/?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Remove data URL prefix if present&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;base64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;base64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;base64&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;screenshot.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Express.js Integration
&lt;/h2&gt;

&lt;p&gt;Serve screenshots dynamically in an Express app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/preview&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Missing url parameter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;targetUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;userkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1280&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;800&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jpeg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;scaled_width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;400&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`https://api.site-shot.com/?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;502&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Screenshot failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arrayBuffer&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image/jpeg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cache-Control&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public, max-age=3600&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a &lt;code&gt;/preview?url=https://example.com&lt;/code&gt; endpoint that returns a thumbnail screenshot — useful for link preview cards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capturing Multiple URLs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://wikipedia.org&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://github.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;userkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1280&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1024&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="s2"&gt;`https://api.site-shot.com/?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arrayBuffer&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/https&lt;/span&gt;&lt;span class="se"&gt;?&lt;/span&gt;&lt;span class="sr"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\/\/&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Saved:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number of concurrent requests depends on your plan's dedicated worker count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Target web page&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;userkey&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your API key&lt;/td&gt;
&lt;td&gt;&lt;code&gt;abc123&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;width&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Viewport width (100–8000)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1280&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;height&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Viewport height (100–20000)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;full_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Capture full page&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Output format&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;png&lt;/code&gt; or &lt;code&gt;jpeg&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;response_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Response format&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;image&lt;/code&gt; or &lt;code&gt;json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scaled_width&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resize output image&lt;/td&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;See the &lt;a href="https://www.site-shot.com/#documentation" rel="noopener noreferrer"&gt;full API documentation&lt;/a&gt; and &lt;a href="https://www.site-shot.com/#samples" rel="noopener noreferrer"&gt;all code samples&lt;/a&gt; for more details.&lt;/p&gt;




&lt;p&gt;Try Site-Shot free — no registration needed: &lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;https://www.site-shot.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>How to Take a Website Screenshot with Python</title>
      <dc:creator>alekseykazandaev</dc:creator>
      <pubDate>Mon, 06 Apr 2026 18:01:28 +0000</pubDate>
      <link>https://dev.to/alekseykazandaev/how-to-take-a-website-screenshot-with-python-56a0</link>
      <guid>https://dev.to/alekseykazandaev/how-to-take-a-website-screenshot-with-python-56a0</guid>
      <description>&lt;p&gt;If you are building monitoring dashboards, link previews, or visual QA tooling in Python, a screenshot API is a practical way to avoid browser automation overhead. This post walks through the common capture patterns Dev.to readers usually care about: basic screenshots, full-page capture, JSON output, mobile emulation, geolocation, and batch jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.7+&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;requests&lt;/code&gt; library (&lt;code&gt;pip install requests&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A Site-Shot API key (&lt;a href="https://www.site-shot.com/pricing/" rel="noopener noreferrer"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Basic Screenshot Capture
&lt;/h2&gt;

&lt;p&gt;The simplest approach — send a GET request to the API and save the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;userkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screenshot.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The API renders the page in a real Chromium browser and returns the screenshot image directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Page Screenshot
&lt;/h2&gt;

&lt;p&gt;To capture the entire scrollable page, not just the viewport:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;userkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;full_size&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;full_size=1&lt;/code&gt; parameter tells the API to scroll through the entire document. &lt;code&gt;max_height&lt;/code&gt; caps the capture at 15,000 pixels (max 20,000).&lt;/p&gt;

&lt;h2&gt;
  
  
  JSON Response with Base64 Image
&lt;/h2&gt;

&lt;p&gt;If you need the image as base64 along with HTTP response metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;userkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;image_b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;image_b64&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;image_b64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screenshot.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_b64&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The JSON response includes the &lt;code&gt;image&lt;/code&gt; field (base64-encoded), HTTP &lt;code&gt;status_code&lt;/code&gt;, and &lt;code&gt;response_headers&lt;/code&gt; from the target URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile Device Screenshot
&lt;/h2&gt;

&lt;p&gt;Emulate a mobile viewport by setting width, height, and user agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;userkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;375&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;812&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;zoom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AppleWebKit/605.1.15 (KHTML, like Gecko) &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Version/16.0 Mobile/15E148 Safari/604.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Screenshot from a Specific Country
&lt;/h2&gt;

&lt;p&gt;Route the request through a country-specific proxy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;userkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Germany&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;language&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;de&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;country&lt;/code&gt; parameter automatically sets a proxy IP, default language, time zone, and geolocation for that country.&lt;/p&gt;

&lt;h2&gt;
  
  
  Batch Screenshots
&lt;/h2&gt;

&lt;p&gt;To capture multiple URLs, loop through them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://wikipedia.org&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://github.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.site-shot.com/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;userkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;_&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Saved &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For higher throughput, use &lt;code&gt;concurrent.futures.ThreadPoolExecutor&lt;/code&gt; to capture multiple URLs in parallel — the API supports concurrent requests based on your plan's dedicated worker count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The Site-Shot API makes it straightforward to capture website screenshots with Python. Key parameters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Target web page&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;userkey&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your API key&lt;/td&gt;
&lt;td&gt;&lt;code&gt;abc123&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;width&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Viewport width (100–8000)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1280&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;height&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Viewport height (100–20000)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;full_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Capture full page&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Output format&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;png&lt;/code&gt; or &lt;code&gt;jpeg&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;response_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Response format&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;image&lt;/code&gt; or &lt;code&gt;json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;country&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Proxy country&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Germany&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;delay_time&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wait before capture (ms)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Check the &lt;a href="https://www.site-shot.com/#documentation" rel="noopener noreferrer"&gt;full API documentation&lt;/a&gt; for all available parameters.&lt;/p&gt;




&lt;p&gt;Try Site-Shot free — no registration needed: &lt;a href="https://www.site-shot.com/" rel="noopener noreferrer"&gt;https://www.site-shot.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>api</category>
    </item>
  </channel>
</rss>
