# Screenshot a page (GET): `GET /v1/screenshot`

Cost: from 1 credit (1 for most pages, 5 for a site that refuses standard requests or with `country`, 75 with `premium` (5 or 75 held while it runs); a non-2xx page and failed requests are free). Docs: https://scrapercompany.com/docs/reference/screenshot-get

Quickest call (the body is the image):

```bash
curl -f "https://api.scrapercompany.com/v1/screenshot?api_key=$SCRAPERCOMPANY_API_KEY&url=https%3A%2F%2Fexample.com&format=webp" -o screenshot.webp
```

Sample answer: https://scrapercompany.com/samples/screenshot-example.webp (A real answer, from the one-line call: example.com at the default 1440 x 900 viewport, WebP, 35 KB, 1 credit. Captured 27 October 2026.)

By default the body is the image itself (image/png, image/jpeg or image/webp, as format asks), with the site’s status in the X-Upstream-Status header and the final URL in X-Final-Url. An error is always JSON, never an image. With response_type: json the answer is JSON instead, carrying the same image base64-encoded.

Capture one public URL as it looks to a visitor and return the image.

The page runs its JavaScript and loads its images, styles and fonts, then is
waited on until
`wait_until` (`load` by default) and any `wait_for` selector or `wait_ms`,
then captured: the viewport (`width` x `height`, 1440 x 900 by default, at
`scale` 1-3), the whole page (`full_page`), or one element (`selector`).
`format` is `png`, `jpeg` (or `jpg`) or `webp`, with `quality` for the last
two. GET takes the same fields as query parameters (`fullPage` is read as
`full_page`) and the key as `api_key`.

The default answer is the image itself, with the site's own status in
`X-Upstream-Status`; `response_type=json` returns it base64-encoded with
that status and metadata. A refused request is retried automatically;
`premium=true` uses the premium network from the first attempt, `country`
loads the page from that country, and `session_id` keeps one IP address.

1 credit for most pages; 5 for a site that refuses standard requests (the
capture moves to the fallback network) and with `country`; 75 with
`premium`. 5 (75) is held while the capture runs, so that
much must be available; `x-credits-charged` says what was charged. Only a 2xx
page that produced an image is charged: a non-2xx page is still returned,
free. A site that
refuses every attempt, a `timeout_s` that runs out, or a `wait_for` or
`selector` that never appears is a free 503; private and internal
addresses are refused (422).

Parameters:

- `url` (string; required; min length 1, max length 2048): The page to capture: an absolute `http://` or `https://` URL on port 80, 443, 8080 or 8443. Private, loopback and cloud-metadata addresses, and hosts on the scrape denylist, are refused (422), as is any redirect to one.
- `format` (string; optional; default png; one of png, jpeg, webp): Image format: `png` (default, lossless), `jpeg` (`jpg` accepted) or `webp`.
- `quality` (integer | null; optional; min 1, max 100): JPEG or WebP quality, 1-100 (default 80). Not for `png`, which is lossless (422).
- `full_page` (boolean; optional; default false): Capture the whole scrollable page instead of the viewport. Not with `selector`.
- `width` (integer; optional; default 1440; min 320, max 3840): Viewport width in CSS pixels, 320-3840 (default 1440).
- `height` (integer; optional; default 900; min 240, max 2160): Viewport height in CSS pixels, 240-2160 (default 900). With `full_page` the image is as tall as the page.
- `scale` (number; optional; default 1; min 1, max 3): Device pixel ratio, 1-3: `2` gives a retina image twice the viewport's size in pixels.
- `wait_until` (string; optional; default load; one of domcontentloaded, load, networkidle): When the page counts as loaded: `domcontentloaded` (HTML parsed), `load` (default: images and styles in) or `networkidle` (no requests for 500 ms). `load` and `networkidle` are waited for as long as `timeout_s` allows; a page that never settles is captured as it stands.
- `wait_for` (string | null; optional; min length 1, max length 500): CSS selector to wait for before the capture, e.g. `#prices .row`. Never appearing within `timeout_s` is a free 503: retry, or allow more time.
- `wait_ms` (integer; optional; default 0; min 0, max 10000): A further fixed wait, in milliseconds (0-10000), before the capture.
- `selector` (string | null; optional; min length 1, max length 500): Capture only the first element matching this CSS selector (waited for until it is visible), e.g. `#chart`.
- `premium` (boolean; optional; default false): Use the premium network from the first attempt, for sites that block standard requests. 75 credits instead of 1-5.
- `country` (string | null; optional; one of AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UK, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW): Two-letter country (ISO 3166-1) the page must be loaded from, e.g. `DE`, for local prices, language and consent banners. 5 credits.
- `timeout_s` (integer; optional; default 45; min 1, max 90): Seconds the whole capture may take, every attempt included: at most 90 (default 45). Running out is a free 503 with Retry-After.
- `session_id` (string | null; optional; pattern ^[A-Za-z0-9_-]{1,64}$): Keep the same IP address across requests that share this id (letters, digits, `_`, `-`; up to 64); ids are scoped to your API key.
- `response_type` (string; optional; default image; one of image, json): `image` (default): the image itself, with the site's status in `X-Upstream-Status`. `json`: a JSON object with the image base64-encoded in `image`, plus the status and metadata.

Base URL: `https://api.scrapercompany.com`. Auth: send your key in the `x-api-key` header. A failed request (4xx or 5xx) or an empty result costs 0 credits.

- [Full API reference as one Markdown file](https://scrapercompany.com/llms-full.txt)
- [OpenAPI spec](https://scrapercompany.com/openapi.json)
