GET?src=shot:1 credit per call · 1-year immutable cache
// PRODUCT · SCREENSHOTS

Screenshots.

Capture any allowlisted web page as an image, then resize, recolor, compose and watermark it — a screenshot is just a fourth kind of src.

quick start
# Screenshot a page, resize to 1100-wide WebP
curl 'https://demo.imgapis.com/transform?src=shot:https://stripe.com&w=1100&format=webp'
Live preview of Screenshots
Live preview · streamed from demo.imgapis.com
Variant · 01GET ?src=shot:

The shot: scheme.

A screenshot is a fourth kind of src. The browser viewport (shot-*) is independent from the output transform (w / h / format / q).

Screenshot a page, resize to 1100-wide WebP
Screenshot a page, resize to 1100-wide WebP
src=shot:https://stripe.com
w=1100format=webp
// parameters1fields
srcRequired
stringType
Default

Prefix any http(s) URL with shot:. The target host must be in the account externalSources allowlist, or the request is rejected with 403.

Variant · 02GET ?src=shot:&shot-device=

Viewport & devices.

One URL, every viewport — swap shot-device.

iPhone 15 viewport
iPhone 15 viewport
src=shot:https://stripe.com
shot-device=iphone-15w=420
iPad viewport
iPad viewport
src=shot:https://stripe.com
shot-device=ipadw=600
// parameters6fields
shot-deviceOptional
stringType
Default

Device preset: desktop (default), ipad, iphone-15, macbook, pixel-8. Sets viewport + user agent in one shot. Unknown names resolve to desktop.

shot-wOptional
numberType
Default

Viewport width in px (clamped 1–3840).

shot-hOptional
numberType
Default

Viewport height in px (clamped 1–3840).

shot-dprOptional
numberType
1Default

Device pixel ratio (1–3).

shot-mobileOptional
booleanType
Default

Emulate a mobile device (also enables touch).

shot-landscapeOptional
booleanType
Default

Render in landscape orientation.

Variant · 03GET ?src=shot:&shot-full=1

Capture options.

Full page, a clipped region, or a single element. Navigation timeout is fixed at 30s.

Full scrollable page
Full scrollable page
src=shot:https://stripe.com
shot-full=1w=600
// parameters7fields
shot-fullOptional
booleanType
Default

Capture the full scrollable page instead of the viewport. Takes precedence over shot-clip.

shot-clipOptional
stringType
Default

Capture a region x,y,width,height. A malformed or off-canvas region is ignored.

shot-selectorOptional
stringType
Default

Capture a single element by CSS selector.

shot-scrollOptional
booleanType
Default

Scroll the page before capture to trigger lazy-loaded content.

shot-waitOptional
stringType
loadDefault

Navigation wait: load, domcontentloaded, networkidle0, networkidle2.

loaddomcontentloadednetworkidle0networkidle2
shot-wait-forOptional
stringType
Default

Wait until a CSS selector appears before capture.

shot-delayOptional
numberType
Default

Fixed delay before capture in ms (0–10000).

Variant · 04GET ?src=shot:&v=

Versioning & caching.

Content-addressed by render inputs + v, cached forever. One render serves every transform and /info of that screenshot.

Bump the version to re-render after a redesign
Bump the version to re-render after a redesign
src=shot:https://stripe.com
w=600v=2026-06
// parameters1fields
vOptional
stringType
Default

Cache-bust token. Forces re-fetch of remote sources, re-capture of screenshots, and recomputation of the response. Default: omitted (cached).

Variant · 05GET /transform?src=shot:

Transform a screenshot.

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.

Resize the capture to 1200-wide WebP
Resize the capture to 1200-wide WebP
src=shot:https://stripe.com
w=1200format=webp
Square crop, saliency-aware gravity
Square crop, saliency-aware gravity
src=shot:https://stripe.com
w=600h=600fit=covergravity=auto
Open Graph card — 1200×630
Open Graph card — 1200×630
src=shot:https://stripe.com
w=1200h=630fit=cover
// parameters9fields
bgOptional
stringType
Default

Background color for pad fit or transparent regions of the page.

blurOptional
numberType
Default

Gaussian blur radius applied to the screenshot.

fitOptional
stringType
Default

How the screenshot fits the output w / h box.

containcovercroppadscale-downsqueeze
formatOptional
stringType
Default

Output format. Omit to let the Accept header negotiate (avif > webp > source).

avifjpegpngwebpnocompress
gravityOptional
stringType
Default

Focal point when cropping — center, auto (saliency) or face.

autocenterface
hOptional
numberType
Default

Output height in px, 1–2048 (the final image, not the shot-h viewport).

markOptional
stringType
Default

Watermark overlay URL. The whole mark-* family (mark-w, mark-align, mark-opacity, mark-repeat, …) works exactly as on /transform.

qOptional
numberType
Default

Encoder quality, 1–100. Defaults to 95.

wOptional
numberType
Default

Output width in px, 1–2048 (the final image, not the shot-w viewport).

Variant · 06GET /info?src=shot:

Inspect a screenshot with /info.

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.

/info/colors — the brand palette of the live page, ready to self-theme a card
response
{
  "colors": [
    { "hex": "#635bff", "rgb": "rgb(99, 91, 255)", "area": 0.21 }
  ],
  "palette": {
    "vibrant": { "hex": "#635bff" },
    "darkMuted": { "hex": "#0a2540" }
  }
}
src=shot:https://stripe.com
/info/blurhash — a placeholder hash for the capture
response
{
  "blurhash": "U2TI:j]9fQ]9]9jtfQjtfQfQfQfQ]9jtfQjt"
}
src=shot:https://stripe.com
// parameters1fields
selectOptional
csvType
Default

Comma-separated subset of fields to return. Omit for the full payload (metadata + blurhash + colors + palette).

blurhashcolorsmetadatapalette
// COOL USAGES

Turn any URL into an image pipeline.

// 01

Dynamic OG & social images

Render shot: + w=1200&h=630 + your mark for dynamic Open Graph / social cards. No headless Chrome to run yourself.

// 02

Link & bookmark previews

Thumbnail any submitted URL for link previews, bookmarks, directories and "made with" galleries — cached forever per v.

// 03

Competitive teardowns

Capture competitor or client homepages and compose them into one /grid board for teardowns and portfolios.

// 04

Steal the palette

Pipe a screenshot into /info/colors to steal a brand palette, then self-theme cards and embeds from the live page.