Website screenshots

Capture any public URL - viewport, full page, signed PNG or JPEG.

← All Website Screenshots endpoints · Capability overview

POST/v1/website-screenshots/screenshot

https://api.vee3.io/v1/website-screenshots/screenshot

20 tokens

Capture any public URL - viewport, full page, signed PNG or JPEG.

Authorization

Send your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

MCP

The same capability is available as an MCP tool on Vee3 hosted MCP.

Tool name

capture_website_screenshot
Parameters11 fields
urlstringRequired

Public http or https URL to capture. Private, localhost, and internal network addresses are blocked.

max length 2048

full_pagebooleanOptional

Capture the full scrollable page. When false, only the viewport area is captured.

Default: false

viewport_widthintegerOptional

Browser viewport width in pixels.

Default: 1280 · min 320, max 3840

viewport_heightintegerOptional

Browser viewport height in pixels.

Default: 720 · min 240, max 2160

wait_until"load" | "domcontentloaded" | "networkidle"Optional

When to take the screenshot: 'load' (load event), 'domcontentloaded' (DOM ready, faster), or 'networkidle' (no network activity for 500ms, slowest but most complete).

Default: "domcontentloaded"

timeout_secondsintegerOptional

Maximum seconds to wait for the page to load before failing.

Default: 30 · min 5, max 60

format"png" | "jpeg"Optional

Output image format. 'png' preserves lossless quality (default). 'jpeg' produces smaller files.

Default: "png"

qualityintegerOptional

JPEG compression quality from 0 (smallest) to 100 (best). Only applies when format is 'jpeg'; ignored for PNG.

Default: 80 · min 0, max 100

dark_modebooleanOptional

When true, emulate prefers-color-scheme: dark so sites with dark-mode CSS render in dark mode. Has no effect on sites without dark-mode styling.

Default: false

block_cookie_bannersbooleanOptional

When true, attempt to dismiss common cookie consent banners and overlays before capture. Best-effort - custom or first-party banners may remain.

Default: false

return_mode"url" | "image" | "both"Optional

How to deliver the result. 'url' returns JSON with a signed screenshot_url (valid ~1 hour). 'image' returns an inline image the agent can view directly. 'both' returns JSON metadata plus an inline image (default). Inline images over 10 MB fall back to the signed URL.

Default: "both"

Response19 fields
screenshot_idstring

Unique identifier, prefix ss_.

statusstring

Always "completed" for synchronous capture.

urlstring

Echo of requested URL.

screenshot_urlstring

Signed GCS URL, valid for about 1 hour.

viewport_widthinteger

Actual viewport width used.

viewport_heightinteger

Actual viewport height used.

full_pageboolean

Whether full page was captured.

dark_modeboolean

Echo of whether dark color scheme emulation was used.

block_cookie_bannersboolean

Echo of whether cookie banner dismissal was attempted.

formatenum

Echo of the requested output format (png or jpeg).

qualityinteger

Echo of JPEG quality used when format is jpeg.

file_size_bytesinteger

Image file size in bytes.

created_atstring

ISO 8601 timestamp.

return_modeenum

Echo of the requested return mode.

inline_imageboolean

Whether an inline image is included in inline_image_data.

inline_image_datastring

Base64-encoded image when return_mode is image or both.

inline_image_skip_reasonstring

Reason the inline image was omitted when over the size limit.

errorstring

Present on HTTP 200 when return_mode is "image" and the image exceeds the inline size limit. Value is "inline_image_unavailable".

messagestring

Human-readable detail when error is set on an otherwise successful capture.

HTTP errors: unauthorized, url_blocked, screenshot_timeout, validation_error, site_unreachable, insufficient_tokens, payment_required

On HTTP 200 (success body): inline_image_unavailable