Skip to content
AAPIScreenshot

Turn any URL into a preview thumbnail

website thumbnail API

POST a URL to the screenshot API with a fixed viewport and a compact JPEG, and get a tidy preview thumbnail back in one request. Pin the same frame on every call so a directory or dashboard grid lines up, then loop over your listings to build the whole set. No browser farm to run or scale yourself.

No credit card · 100 free screenshots to start

curl https://api.apiscreenshot.com/v1/screenshot \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "format": "jpeg",
    "quality": 80,
    "viewport": { "width": 1280, "height": 800, "deviceScaleFactor": 2 }
  }' \
  -o thumbnail.jpg

BUY VS BUILD

Building this yourself means…

Doing it in-house is owning a browser fleet and every edge case around it. Here is the work you skip.

  • Maintaining a headless-browser fleet just to take a small picture of a page.
  • Capturing hundreds or thousands of URLs for a directory and keeping memory under control.
  • Getting consistent framing across sites that load at wildly different widths.
  • Shrinking and recompressing full-page captures when all you wanted was a card-sized preview.

HOW IT WORKS

One request, the asset back

Same shape every time: send the request, it renders on a managed browser engine, you get the image back to store or serve.

  1. 01

    Send the request

    POST your payload to /v1/screenshot with your API key — a URL or your own HTML, plus the options this job needs.

  2. 02

    It renders

    A managed browser engine loads the page, waits for it to settle, and captures it — no headless browser of your own to run or scale.

  3. 03

    Get the asset

    The response body is the image bytes, synchronously — write them to a file, push them to your bucket, or hand them to a diff. No queue to poll.

THE CALL

The exact request for website thumbnails

The parameters this job needs, ready to paste. Full reference in the docs.

  • Consistent framing. Pin a viewport (e.g. 1280×800) and every site is captured at the same frame, so the cards in your grid line up instead of each rendering at a different width.
  • Compact JPEG output. Set format to jpeg with a quality between 1 and 100 and the thumbnail comes back already small — no resize-and-recompress step for a card-sized image.
  • Sharp on retina with deviceScaleFactor. Set viewport.deviceScaleFactor to 2 to capture at higher density, so the thumbnail stays crisp on retina displays without rendering the whole page at double size.
curl https://api.apiscreenshot.com/v1/screenshot \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "format": "jpeg",
    "quality": 80,
    "viewport": { "width": 1280, "height": 800, "deviceScaleFactor": 2 }
  }' \
  -o thumbnail.jpg

WHY IT HOLDS UP

What actually makes this work

The concrete parts: the formats, the edge cases it handles, the way it scales. Nothing here is a number we can't show you.

Consistent framing across sites

Pin one viewport (e.g. 1280×800) and every site is captured at the same frame, so the cards in a grid line up instead of each rendering at a different width.

Already card-sized

Set JPEG with a quality value and the thumbnail comes back compressed and small — no separate resize-and-recompress step for a card image. Add deviceScaleFactor 2 for retina.

Scales by looping, not by infrastructure

Each capture is an independent synchronous call, so a whole directory is just a loop over your URLs — you never stand up or scale a browser fleet.

FAQ

Website thumbnails — common questions

How do I generate a website thumbnail from a URL?
POST { "url": "..." } to https://api.apiscreenshot.com/v1/screenshot with your API key, plus a viewport and format: "jpeg" for a compact image. The image bytes come straight back — no browser to run yourself and no SDK to install.
How do I keep thumbnails consistent across many sites?
Pin the same viewport (for example 1280×800) on every request. Each site is then captured at the identical frame, so the cards in your directory or dashboard grid line up rather than each rendering at a different width.
Can I get a smaller, lighter image for a card?
Yes. Set format: "jpeg" and a quality between 1 and 100, and the thumbnail comes back already compressed and card-sized — no separate resize-and-recompress step. PNG is also available if you need lossless output.
How do I make thumbnails sharp on retina screens?
Set viewport.deviceScaleFactor to 2. The page is captured at higher pixel density, so the thumbnail stays crisp on retina displays without you rendering the whole page at double the dimensions.
Can I generate thumbnails for a whole directory at once?
Yes. Each capture is an independent synchronous call, so you loop over your listings and POST one request per URL. Because the engine runs a managed browser for you, you never stand up or scale a browser fleet of your own.
Are the captured pages stored on your servers?
No. Each page is rendered to produce the thumbnail, the bytes are streamed back in the response, and nothing of the page or image is persisted on our side.

Add thumbnails to my directory

One endpoint, the asset back in one call. 100 free screenshots to start, no credit card to begin.

Cancel anytime · no long-term contract