Properties
| Name | Type | Description |
|---|---|---|
| url | string | Public http or https URL to capture. Private, localhost, and internal network addresses are blocked. |
| full_page | object | Capture the full scrollable page. When false, only the viewport area is captured. |
| viewport_width | object | Browser viewport width in pixels. |
| viewport_height | object | Browser viewport height in pixels. |
| wait_until | string | When to take the screenshot: 'load' (load event), 'domcontentloaded' (DOM ready, faster; use with post_load_wait to let the page settle), or 'networkidle' (no network activity for 500ms; can time out |
| timeout_seconds | object | Maximum seconds to wait for the page to load before failing. |
| post_load_wait | object | Extra seconds to wait after wait_until before capturing. Only valid when wait_until is domcontentloaded. Use this instead of networkidle when pages keep network activity. |
| format | string | Output image format. 'png' preserves lossless quality (default). 'jpeg' produces smaller files. |
| quality | object | JPEG compression quality from 0 (smallest) to 100 (best). Only applies when format is 'jpeg'; ignored for PNG. |
| dark_mode | object | 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. |
| block_cookie_banners | object | When true, attempt to dismiss common cookie consent banners and overlays before capture. Best-effort - custom or first-party banners may remain. |
| file_name | object | Optional account-relative storage path for the screenshot. If omitted, the file is stored under downloads/ with a generated name. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/vee3-io/json-schema/vee3-io-screenshot-request-schema.json",
"title": "ScreenshotRequest",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/vee3-io-openapi.json#/components/schemas/ScreenshotRequest",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"title": "Url",
"description": "Public http or https URL to capture. Private, localhost, and internal network addresses are blocked."
},
"full_page": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Full Page",
"description": "Capture the full scrollable page. When false, only the viewport area is captured.",
"default": false
},
"viewport_width": {
"anyOf": [
{
"type": "integer",
"maximum": 3840.0,
"minimum": 320.0
},
{
"type": "null"
}
],
"title": "Viewport Width",
"description": "Browser viewport width in pixels.",
"default": 1280
},
"viewport_height": {
"anyOf": [
{
"type": "integer",
"maximum": 2160.0,
"minimum": 240.0
},
{
"type": "null"
}
],
"title": "Viewport Height",
"description": "Browser viewport height in pixels.",
"default": 720
},
"wait_until": {
"type": "string",
"enum": [
"load",
"domcontentloaded",
"networkidle"
],
"title": "Wait Until",
"description": "When to take the screenshot: 'load' (load event), 'domcontentloaded' (DOM ready, faster; use with post_load_wait to let the page settle), or 'networkidle' (no network activity for 500ms; can time out on pages with ongoing requests).",
"default": "domcontentloaded"
},
"timeout_seconds": {
"anyOf": [
{
"type": "integer",
"maximum": 60.0,
"minimum": 5.0
},
{
"type": "null"
}
],
"title": "Timeout Seconds",
"description": "Maximum seconds to wait for the page to load before failing.",
"default": 30
},
"post_load_wait": {
"anyOf": [
{
"type": "integer",
"maximum": 20.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Post Load Wait",
"description": "Extra seconds to wait after wait_until before capturing. Only valid when wait_until is domcontentloaded. Use this instead of networkidle when pages keep network activity.",
"default": 0
},
"format": {
"type": "string",
"enum": [
"png",
"jpeg"
],
"title": "Format",
"description": "Output image format. 'png' preserves lossless quality (default). 'jpeg' produces smaller files.",
"default": "png"
},
"quality": {
"anyOf": [
{
"type": "integer",
"maximum": 100.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Quality",
"description": "JPEG compression quality from 0 (smallest) to 100 (best). Only applies when format is 'jpeg'; ignored for PNG.",
"default": 80
},
"dark_mode": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Dark Mode",
"description": "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_banners": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Block Cookie Banners",
"description": "When true, attempt to dismiss common cookie consent banners and overlays before capture. Best-effort - custom or first-party banners may remain.",
"default": false
},
"file_name": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
],
"title": "File Name",
"description": "Optional account-relative storage path for the screenshot. If omitted, the file is stored under downloads/ with a generated name."
}
},
"type": "object",
"required": [
"url"
]
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/vee3-io-screenshot-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.