?src=shot:1 credit per call · 1-year immutable cacheScreenshots.
Capture any allowlisted web page as an image, then resize, recolor, compose and watermark it — a screenshot is just a fourth kind of src.
# Screenshot a page, resize to 1100-wide WebP
curl 'https://demo.imgapis.com/transform?src=shot:https://stripe.com&w=1100&format=webp'GET ?src=shot:A screenshot is a fourth kind of src. The browser viewport (shot-*) is independent from the output transform (w / h / format / q).
srcRequired—DefaultPrefix any http(s) URL with shot:. The target host must be in the account externalSources allowlist, or the request is rejected with 403.
GET ?src=shot:&shot-device=One URL, every viewport — swap shot-device.
shot-deviceOptional—DefaultDevice preset: desktop (default), ipad, iphone-15, macbook, pixel-8. Sets viewport + user agent in one shot. Unknown names resolve to desktop.
shot-wOptional—DefaultViewport width in px (clamped 1–3840).
shot-hOptional—DefaultViewport height in px (clamped 1–3840).
shot-dprOptional1DefaultDevice pixel ratio (1–3).
shot-mobileOptional—DefaultEmulate a mobile device (also enables touch).
shot-landscapeOptional—DefaultRender in landscape orientation.
GET ?src=shot:&shot-full=1Full page, a clipped region, or a single element. Navigation timeout is fixed at 30s.
shot-fullOptional—DefaultCapture the full scrollable page instead of the viewport. Takes precedence over shot-clip.
shot-clipOptional—DefaultCapture a region x,y,width,height. A malformed or off-canvas region is ignored.
shot-selectorOptional—DefaultCapture a single element by CSS selector.
shot-scrollOptional—DefaultScroll the page before capture to trigger lazy-loaded content.
shot-waitOptionalloadDefaultNavigation wait: load, domcontentloaded, networkidle0, networkidle2.
loaddomcontentloadednetworkidle0networkidle2shot-wait-forOptional—DefaultWait until a CSS selector appears before capture.
shot-delayOptional—DefaultFixed delay before capture in ms (0–10000).
GET ?src=shot:&v=Content-addressed by render inputs + v, cached forever. One render serves every transform and /info of that screenshot.
vOptional—DefaultCache-bust token. Forces re-fetch of remote sources, re-capture of screenshots, and recomputation of the response. Default: omitted (cached).
GET /transform?src=shot:The screenshot becomes an ordinary PNG, so the ENTIRE /transform parameter set applies unchanged — resize, crop, fit, gravity, format, quality, blur, background, dpr, bg-remove and the full mark-* overlay family. Nothing is screenshot-specific; see the Transform API for every parameter.
bgOptional—DefaultBackground color for pad fit or transparent regions of the page.
blurOptional—DefaultGaussian blur radius applied to the screenshot.
fitOptional—DefaultHow the screenshot fits the output w / h box.
containcovercroppadscale-downsqueezeformatOptional—DefaultOutput format. Omit to let the Accept header negotiate (avif > webp > source).
avifjpegpngwebpnocompressgravityOptional—DefaultFocal point when cropping — center, auto (saliency) or face.
autocenterfacehOptional—DefaultOutput height in px, 1–2048 (the final image, not the shot-h viewport).
markOptional—DefaultWatermark overlay URL. The whole mark-* family (mark-w, mark-align, mark-opacity, mark-repeat, …) works exactly as on /transform.
qOptional—DefaultEncoder quality, 1–100. Defaults to 95.
wOptional—DefaultOutput width in px, 1–2048 (the final image, not the shot-w viewport).
GET /info?src=shot:Point /info (and /info/colors, /info/blurhash, /info/metadata) at a shot: src to read the captured page itself — pull its palette to self-theme UI, a BlurHash placeholder, or its dimensions. Same 24-hour /info cache as any other source.
{
"colors": [
{ "hex": "#635bff", "rgb": "rgb(99, 91, 255)", "area": 0.21 }
],
"palette": {
"vibrant": { "hex": "#635bff" },
"darkMuted": { "hex": "#0a2540" }
}
}{
"blurhash": "U2TI:j]9fQ]9]9jtfQjtfQfQfQfQ]9jtfQjt"
}selectOptional—DefaultComma-separated subset of fields to return. Omit for the full payload (metadata + blurhash + colors + palette).
blurhashcolorsmetadatapaletteTurn any URL into an image pipeline.
Dynamic OG & social images
Render shot: + w=1200&h=630 + your mark for dynamic Open Graph / social cards. No headless Chrome to run yourself.
Link & bookmark previews
Thumbnail any submitted URL for link previews, bookmarks, directories and "made with" galleries — cached forever per v.
Competitive teardowns
Capture competitor or client homepages and compose them into one /grid board for teardowns and portfolios.
Steal the palette
Pipe a screenshot into /info/colors to steal a brand palette, then self-theme cards and embeds from the live page.