Very tall pages

Capture a very long page without one unusable image

A 40,000 pixel screenshot is technically one file and practically nothing you can open, send or diff.

full_pagefull_page_slicesfull_page_slice_heightfull_page_slice_overlap_heightfull_page_max_heightfull_page_algorithm
curl --fail-with-body "https://api.pagecapture.dev/v1/take" \
  -H "X-Access-Key: $PAGECAPTURE_KEY" \
  -H "Content-Type: application/json" \
  --data '{"url":"https://example.com","format":"jpg","full_page":true,"full_page_slices":true,"full_page_slice_height":2000,"full_page_slice_overlap_height":40}' \
  -o capture.jpg

Verified 2026-08-13 by running the published code against a fixture.

Configure it in the playground
What you are seeing

The full-page capture of a long article or an infinite feed either fails on size or produces a file no viewer will render.

Why the page does that

Browsers have a hard ceiling on how large a single rendered surface can be, and image encoders have their own. A tall document runs into both before it runs into your patience.

What it does

  • Renders the document in sections and returns the stitched image as the response body, exactly as a normal full-page capture does.
  • Also returns the individual slices when `full_page_slices` is on, so you can page through a long capture instead of scrolling one enormous file.
  • Stops at `full_page_max_height` when you set one, which is the honest way to bound an infinite feed.

What it does not do

  • Does not slice forever. Section rendering stops after 60 slices — a page that needs more is pathological, and the guard exists so one target cannot occupy a worker indefinitely.
  • Does not load lazy content by itself. Scrolling the page first is `full_page_scroll`, which is a separate parameter and a plan entitlement.
  • Does not change the response shape. The body is still one image; the slices are additional artifacts.
The contract

Every limit on this page is the one the API enforces

These rows are read from the same parameter table that validates your request. Nothing here is transcribed, so a number cannot drift from the behaviour it describes.

ParameterTypeDefaultRangeEndpointsCache key
full_page

Capture the entire scrollable document.

booleanfalse/v1/takeIn
full_page_slices

Return the page as several stitched slices instead of one image.

booleanfalse/v1/takeIn
full_page_slice_height

Height of each slice.

integer40001 – 16,000/v1/takeIn
full_page_slice_overlap_height

Overlap between consecutive slices.

integer00 – 2,000/v1/takeIn
full_page_max_height

Stop the capture at this document height.

integer1 – 60,000/v1/takeIn
full_page_algorithm

Full-page strategy: one capture of the whole document, or section-by-section for very tall pages.

enumdefault/v1/takeIn
Group: Full pageValues outside a documented range are rejected before a browser opens.

How it behaves next to the rest of the request

full_page_slice_overlap_height

Overlap between consecutive slices.

Overlap up to 2,000 px between consecutive slices. Without it, a line of text that lands exactly on a boundary is cut in half in both slices.

full_page_algorithm

Full-page strategy: one capture of the whole document, or section-by-section for very tall pages.

`by_sections` renders section by section rather than as one surface. It is the strategy that makes a very tall document possible at all, and slicing builds on it.

full_page_scroll

Scroll through the page first so lazy content loads.

Lazy images only load when something scrolls past them. This is the parameter that does the scrolling, and it requires the scrolling-screenshots entitlement.

Questions this raises

How many credits does a sliced capture cost?

One. Slices are artifacts of a single successful capture, not separate captures.

What if the page is infinite?

Set `full_page_max_height`, capped at 60,000 px. Without a ceiling you are asking the browser to render something with no end, and the timeout is what will decide it.

Why does my image still come back too large?

Height is only one axis. `device_scale_factor` multiplies every pixel, so a 2× retina capture of a tall page is four times the surface — lower the scale or set `image_width`.