Website screenshots
Capture any public URL - viewport, full page, signed PNG or JPEG.
← All Website Screenshots endpoints · Capability overview
/v1/website-screenshots/screenshothttps://api.vee3.io/v1/website-screenshots/screenshot
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_screenshotParameters11 fields
urlstringRequiredPublic http or https URL to capture. Private, localhost, and internal network addresses are blocked.
max length 2048
full_pagebooleanOptionalCapture the full scrollable page. When false, only the viewport area is captured.
Default: false
viewport_widthintegerOptionalBrowser viewport width in pixels.
Default: 1280 · min 320, max 3840
viewport_heightintegerOptionalBrowser viewport height in pixels.
Default: 720 · min 240, max 2160
wait_until"load" | "domcontentloaded" | "networkidle"OptionalWhen 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_secondsintegerOptionalMaximum seconds to wait for the page to load before failing.
Default: 30 · min 5, max 60
format"png" | "jpeg"OptionalOutput image format. 'png' preserves lossless quality (default). 'jpeg' produces smaller files.
Default: "png"
qualityintegerOptionalJPEG compression quality from 0 (smallest) to 100 (best). Only applies when format is 'jpeg'; ignored for PNG.
Default: 80 · min 0, max 100
dark_modebooleanOptionalWhen 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_bannersbooleanOptionalWhen 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"OptionalHow 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_idstringUnique identifier, prefix ss_.
statusstringAlways "completed" for synchronous capture.
urlstringEcho of requested URL.
screenshot_urlstringSigned GCS URL, valid for about 1 hour.
viewport_widthintegerActual viewport width used.
viewport_heightintegerActual viewport height used.
full_pagebooleanWhether full page was captured.
dark_modebooleanEcho of whether dark color scheme emulation was used.
block_cookie_bannersbooleanEcho of whether cookie banner dismissal was attempted.
formatenumEcho of the requested output format (png or jpeg).
qualityintegerEcho of JPEG quality used when format is jpeg.
file_size_bytesintegerImage file size in bytes.
created_atstringISO 8601 timestamp.
return_modeenumEcho of the requested return mode.
inline_imagebooleanWhether an inline image is included in inline_image_data.
inline_image_datastringBase64-encoded image when return_mode is image or both.
inline_image_skip_reasonstringReason the inline image was omitted when over the size limit.
errorstringPresent on HTTP 200 when return_mode is "image" and the image exceeds the inline size limit. Value is "inline_image_unavailable".
messagestringHuman-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