{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "HttpRequestParams",
  "description": "Parameters for a render request.\n\nUnknown/misspelled fields are rejected (`deny_unknown_fields`) so a typo or an\nunsupported field (e.g. `proxy_server`, which is server-startup-only) fails\nloudly with a 4xx rather than being silently ignored.",
  "type": "object",
  "properties": {
    "accept_language": {
      "description": "Accept-Language header value for the browser (e.g., \"en-US,en;q=0.9\").",
      "type": [
        "string",
        "null"
      ]
    },
    "archive_body_size_limit": {
      "default": null,
      "description": "Cap on the response-body bytes captured per entry in HAR output. When\nunset, bodies are captured without a size cap.",
      "format": "uint",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "archive_spill_max_bytes": {
      "default": null,
      "description": "Cap on total bytes spilled to disk during a crawl or sitemap walk. On reaching it\nthe walk stops and completes successfully, bounding disk use.",
      "format": "uint64",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "axtree_only_visible": {
      "default": null,
      "description": "The accessibility tree, as `axtree` output or `with_axtree`, holds only what a\nperson can see.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "bmp_pixel_format": {
      "anyOf": [
        {
          "$ref": "#/$defs/BmpPixelFormat"
        },
        {
          "type": "null"
        }
      ],
      "description": "Pixel format for BMP output: bgr24 (default), rgb565le, or gray8."
    },
    "browser_height": {
      "default": null,
      "description": "Height of the browser viewport in pixels (logical pixels).",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "browser_width": {
      "default": null,
      "description": "Width of the browser viewport in pixels.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "cookie": {
      "description": "Cookies to set in the browser. Each value should be a valid cookie string such as \"name=value; Domain=zshot-cli.com\".",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "crawl_allow_url": {
      "description": "Allow globs that re-permit a sitemap URL blocked by `crawl_deny_url`. Allow\nwins over deny; a lone allow is a no-op. Repeatable.",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "crawl_concurrency": {
      "default": null,
      "description": "Browsers a crawl or sitemap walk loads pages in at once, sharing one cache and one\nset of cookies. Defaults to the server's number of CPUs.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "crawl_delay": {
      "default": null,
      "description": "Least time in seconds between page loads on one host, across every browser of a\ncrawl or sitemap walk. A longer robots.txt Crawl-delay is honored; with an\nEnterprise license, this delay is followed instead. Defaults to 1.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "crawl_deny_url": {
      "description": "Deny globs that skip matching sitemap URLs. Repeatable.",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "crawl_link_depth": {
      "default": null,
      "description": "Hops to follow from the seed when crawling. Defaults to any depth.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "crawl_link_selector": {
      "description": "Additional CSS selectors for crawlable links, beyond `a[href]`. Repeatable.",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "crawl_links": {
      "default": null,
      "description": "Crawl links discovered on each captured page into the WARC, bounded by\n`crawl_link_depth`. Discovered links follow the same scope/robots/adblock\nrules; same-registrable-domain only by default.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "crawl_max_links": {
      "default": null,
      "description": "Cap on total pages fetched during a crawl or sitemap walk, counting the seed.\nOn reaching it the walk stops and completes successfully.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "crawl_media_sources": {
      "default": null,
      "description": "Fetch `<audio>`/`<video>` source URLs on each walked page so deferred media is archived.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "crawl_page_timeout": {
      "default": null,
      "description": "Per-page capture budget in seconds for warc output. Each URL gets its own\nbudget; a page that exceeds it keeps its captured network records. Defaults\nto the static page timeout.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "crawl_sitemap_max_depth": {
      "default": null,
      "description": "Levels of `<sitemapindex>` to follow when capturing a sitemap. Defaults to 1.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "crawl_url_is_sitemap": {
      "anyOf": [
        {
          "$ref": "#/$defs/SitemapFormat"
        },
        {
          "type": "null"
        }
      ],
      "description": "Treat the target as a manifest of URLs to capture into one WARC. `auto`\ninfers the format from the extension then Content-Type; `xml`/`text` force\nit. Plain-text URL lists require an explicit value. Requires `output_type=warc`."
    },
    "device": {
      "description": "Device preset for browser emulation. Sets viewport size, device scale factor,\nuser agent, platform, and mobile emulation based on the selected device.\nIndividual settings can override device defaults.",
      "type": [
        "string",
        "null"
      ]
    },
    "device_scale_factor": {
      "default": null,
      "description": "Device scale factor for rendering. Output dimensions will be ceil(browser_width × scale) × ceil(browser_height × scale).\nMust be greater than 0 and at most 5. Default is 1.0.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "diagnostics": {
      "default": null,
      "description": "Return diagnostic information about the server environment instead of rendering.\nUseful for debugging and support purposes.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "emulate_dark_mode": {
      "default": null,
      "description": "Emulate a dark color scheme (prefers-color-scheme: dark). Default is light.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "emulate_disable_bluetooth": {
      "default": null,
      "description": "Disable Web Bluetooth API (navigator.bluetooth → undefined).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "emulate_disable_serial": {
      "default": null,
      "description": "Disable Web Serial API (navigator.serial → undefined).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "emulate_disable_usb": {
      "default": null,
      "description": "Disable WebUSB API (navigator.usb → undefined).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "emulate_geolocation": {
      "description": "Override the browser's geolocation with a geo URI (RFC 5870).\nFormat: \"geo:latitude,longitude[,altitude][;u=uncertainty]\"\nExample: \"geo:37.7749,-122.4194;u=10\" (San Francisco with 10m uncertainty)",
      "type": [
        "string",
        "null"
      ]
    },
    "emulate_gpu_renderer": {
      "description": "Override WebGL unmasked renderer string.",
      "type": [
        "string",
        "null"
      ]
    },
    "emulate_gpu_vendor": {
      "description": "Override WebGL unmasked vendor string.",
      "type": [
        "string",
        "null"
      ]
    },
    "emulate_hardware_concurrency": {
      "default": null,
      "description": "Override navigator.hardwareConcurrency.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "emulate_media": {
      "description": "CSS media type to emulate (e.g., \"screen\", \"print\").",
      "type": [
        "string",
        "null"
      ]
    },
    "emulate_memory": {
      "default": null,
      "description": "Override navigator.deviceMemory (0 to set undefined).",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "emulate_mobile": {
      "default": null,
      "description": "Emulate a mobile device. This sets the mobile flag in DevTools,\naffecting navigator.userAgentData.mobile, touch events, and other mobile behaviors.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "emulate_timezone": {
      "description": "IANA timezone to emulate (e.g. \"Asia/Tokyo\"). Must exist in the system tz database.",
      "type": [
        "string",
        "null"
      ]
    },
    "emulate_touch_points": {
      "default": null,
      "description": "Max touch points to emulate (1–16). Sets navigator.maxTouchPoints and\nenables touch events. Values outside the range are rejected.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "emulate_vision_deficiency": {
      "anyOf": [
        {
          "$ref": "#/$defs/VisionDeficiency"
        },
        {
          "type": "null"
        }
      ],
      "description": "Emulate a vision deficiency for accessibility testing, given as one of\nthe exact string values: `blurredVision`, `reducedContrast`,\n`achromatopsia`, `deuteranopia`, `protanopia`, `tritanopia`.\n\nOmit this field for normal vision — do not send `null`. Only set it when\nyou specifically want to simulate a deficiency.",
      "examples": [
        "blurredVision",
        "reducedContrast",
        "achromatopsia",
        "deuteranopia",
        "protanopia",
        "tritanopia"
      ]
    },
    "fail": {
      "default": null,
      "description": "Whether to fail on non-2xx HTTP status codes (default: true).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "full_page": {
      "default": null,
      "description": "Capture the full scrollable page instead of just the visible viewport.\nThis will load the page twice: once to discover the scroll height, then again\nat the full height. Cannot be used with PDF output.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "har_capture_bodies": {
      "default": null,
      "description": "Capture full response bodies in HAR output. When unset (None), bodies are\ncaptured automatically when HAR is the primary output and skipped when HAR\nis auxiliary. The MCP `render` tool defaults this to `false` to keep\nresponses small enough to fit in a single JSON-RPC frame; HTTP REST callers\nkeep the legacy default unless they pass an explicit value.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "header": {
      "description": "HTTP headers to send with the request. Each value should be \"Name: Value\".",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "image_duration": {
      "default": null,
      "description": "Duration in seconds for animated image types (GIF, AVIF, APNG).",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "image_framerate": {
      "default": null,
      "description": "Framerate for animated image types. Default 5.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "image_height": {
      "default": null,
      "description": "Height of the output image in pixels (for image output types).",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "image_selector": {
      "description": "CSS selector to crop the image output to. The screenshot is\nlimited to the element's bounding rect at render-begin, and the\nrect's size becomes the default output dimensions (still\noverridable by `image_width`/`image_height`). Mutually exclusive\nwith `full_page`. Only meaningful when the output type is an\nimage or animated image.",
      "type": [
        "string",
        "null"
      ]
    },
    "image_width": {
      "default": null,
      "description": "Width of the output image in pixels (for image output types).",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "javascript": {
      "description": "JavaScript code to inject into the page after load.",
      "type": [
        "string",
        "null"
      ]
    },
    "llm_format_expects": {
      "description": "Validation expectations for LLM output. For llm_text, the strings the answer must\nmatch, as an array or one comma-delimited string. For llm_json, a JSON Schema object."
    },
    "llm_format_model": {
      "description": "LLM formatter connection string for `llm_text`/`llm_json` output. Overrides the\nserver's startup formatter for this request; if omitted, the server's configured\nformatter is used. May carry an API key in its userinfo. The `stdio` protocol is\nrejected over HTTP.\n\nFormat: `<protocol>://[api_key@][host][/base-path]?model=NAME[&options]`",
      "type": [
        "string",
        "null"
      ]
    },
    "llm_format_prompt": {
      "description": "User instructions for LLM-based output types (llm_text, llm_json).\nThis prompt is sent to the LLM along with the page screenshot and accessibility tree.",
      "type": [
        "string",
        "null"
      ]
    },
    "llm_no_screenshot_labels": {
      "default": null,
      "description": "Skip tagging elements in screenshots sent to vision LLMs with their\naccessibility refs. Tags are drawn by default.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "markdown_embed_content": {
      "default": null,
      "description": "Embed images in markdown output as data URIs so the document is self-contained.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "markdown_format": {
      "anyOf": [
        {
          "$ref": "#/$defs/MarkdownFormat"
        },
        {
          "type": "null"
        }
      ],
      "description": "Markdown format to use. \"common\" (default) for CommonMark, \"gfm\" for GitHub Flavored Markdown."
    },
    "markdown_no_title": {
      "default": null,
      "description": "Omit the page title from markdown output.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "markdown_selector": {
      "description": "CSS selector for markdown conversion. If provided, only matching elements are converted.\nIf not provided, document.body is used. Empty strings are rejected.",
      "type": [
        "string",
        "null"
      ]
    },
    "navigate": {
      "description": "Goal for navigator-driven navigation. When set, a navigator will interact with the\nbrowser to achieve this goal before rendering.",
      "type": [
        "string",
        "null"
      ]
    },
    "navigator_allow_url": {
      "description": "Additional URL globs the navigator may visit, beyond its initial scope\n(`navigator_initial_scope`), which is always allowed. Additive. A bare host\n(`*.zshot-cli.com`) means every path on it over https, or http and https\nwhen the request URL is http, on its default port unless one is written.\nA path alone (`/docs/*`) means that path on the request URL's host. A `*`\nbefore the first `/` stays within the host. Use `[\"*\"]` to allow any URL.\nURLs the allowlist rejects are filtered from the accessibility tree and\nblocked at navigation. Origin-less starts (`data:`, `file:`) with no\nglobs given leave navigation unrestricted.",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "navigator_credential": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Credentials the navigator may use, as a name→value map. The navigator\nreferences a credential by name (e.g. a form field labelled \"username\"\nresolves the `username` entry) without the value entering the model's\ncontext. Accepted on the JSON body and MCP only, not GET query strings.",
      "type": [
        "object",
        "null"
      ]
    },
    "navigator_credential_origin": {
      "additionalProperties": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "description": "URL globs per credential name or name pattern (`*`, `*_google`),\nreplacing the default scope of the request URL's site; a credential's\nscope is the union of every key that selects it. Keys select among\n`navigator_credential`; credentials configured at server startup keep\ntheir startup origins. Accepted on the JSON body and MCP only.",
      "type": [
        "object",
        "null"
      ]
    },
    "navigator_data": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Values the navigator sees by name in every prompt, to fill in or choose by, as a\nname→value map; a fill names one as `data:NAME`. Not secret: they reach the model's\nprovider. Applied over `navigator_data_json`. Accepted on the JSON body and MCP only.",
      "type": [
        "object",
        "null"
      ]
    },
    "navigator_data_json": {
      "description": "JSON objects of navigator data, each an object or an http(s) URL fetched before\nnavigating, each over the ones before. Nested names join with dots, as\n`address.city`; `null` removes a name. Accepted on the JSON body and MCP only.",
      "items": true,
      "type": [
        "array",
        "null"
      ]
    },
    "navigator_deny_url": {
      "description": "URL globs the navigator may not visit though `navigator_initial_scope` admits\nthem, as `navigator_allow_url` writes them. `navigator_allow_url` admits what a\ndeny refuses. `[\"www.zshot-cli.com\"]` keeps a start on `zshot-cli.com` off its\n`www.` host.",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "navigator_escalation_max": {
      "description": "The most actions a navigator escalated to takes before control returns to the one that\nescalated; its turn also ends when it leaves the page. Default 1; overrides the\nserver's `--navigator-escalation-max`.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "navigator_file": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Files the navigator may attach to file inputs, as a name→data-URL map.\nValues must be base64 data URLs; the navigator references a file by\nname without its content entering the model's context. Accepted on the\nJSON body and MCP only, not GET query strings.",
      "type": [
        "object",
        "null"
      ]
    },
    "navigator_goal": {
      "description": "Goal condition for navigation - determines when navigation is complete. Formats:\n- \"url:<pattern>\" - URL matches pattern (supports * wildcards)\n- \"css:<selector>\" - CSS selector exists in page\n- Any other string - LLM evaluates as yes/no question (requires LLM-capable navigator)",
      "type": [
        "string",
        "null"
      ]
    },
    "navigator_initial_scope": {
      "anyOf": [
        {
          "$ref": "#/$defs/NavigatorInitialScope"
        },
        {
          "type": "null"
        }
      ],
      "description": "Where the navigator may go before `navigator_allow_url` widens it:\n`origin` (the default) is the request URL's scheme, host, and port;\n`domain` is its registrable domain and every subdomain on any port;\n`path` is its folder and everything beneath it. Under `origin` and `path` a\nstart on `example.com` also admits `www.example.com`, and the other way round;\n`navigator_deny_url` takes either back. A `file:` start is its folder under\nevery scope."
    },
    "navigator_max_steps": {
      "default": null,
      "description": "Maximum navigation steps before giving up. Default is 10.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "navigator_renders_when_impossible": {
      "default": null,
      "description": "A navigator that reports the goal impossible ends the navigation, and the request\nrenders: a `goal` output is the navigator's reason, and an LLM formatter is told the\nnavigation's outcome.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "navigator_session_archived": {
      "default": null,
      "description": "Archives hold the whole navigator session, not only the page it ends on. Requires\n`navigate` and an archive: HAR, WARC, WACZ or SQLite output, or `with_har`,\n`with_warc` or `with_sqlite`.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "navigator_stall_escalation": {
      "default": null,
      "description": "Steps a navigator may take on one page, its URL unchanged, before it escalates to the\nnext navigator it can, or gives up when those steps repeat one action. 0 removes the\nlimit. Default is 10.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "navigator_step_timeout": {
      "default": null,
      "description": "Seconds a navigator's model has for each reply, and the page for each action.\nDefault is 30.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "navigator_type": {
      "default": null,
      "description": "Navigator connection strings for LLM-driven navigation: one string, or a list whose\nfirst acts and can hand the session to the others with ESCALATE for a turn. Each may\ncarry `name=` and `when=`; `writer=true` makes one write the text the others choose to\nwrite, and `escalate=false` keeps one from being escalated to. A formatter model with\n`escalate=true` joins them. If not specified, uses the server's --navigator-type.\n\nLocal navigators cannot be specified per-request due to expensive model initialization.\nUse this to specify remote navigators (OpenAI, Anthropic, etc.) or Apple navigator.\n\nFormat: `<protocol>://[api_key@][host][/base-path]?model=NAME[&options]`\n\nExamples:\n- `openai://sk-xxx@?model=gpt-4o` - OpenAI with API key\n- `anthropic://sk-ant-xxx@?model=claude-3-5-sonnet-20241022` - Anthropic\n- `anthropic` - bare provider name, default model and key from the env var",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "navigator_video_captions_position": {
      "description": "Where captions are drawn in the navigator video: `top`, `bottom` (the default),\n`center`, `rect(top right bottom left)` or `inset(top right bottom left)`, in % or px.",
      "type": [
        "string",
        "null"
      ]
    },
    "navigator_video_height": {
      "default": null,
      "description": "Height in pixels of the navigator session video (with_navigator_video).\nDefaults to the render height.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "navigator_video_shows_captions": {
      "default": null,
      "description": "Caption the actions the navigator explains in the navigator video, each held to be read.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "navigator_video_shows_pointer": {
      "default": null,
      "description": "Draw the pointer in the navigator video: an arrow, or a fingertip on a touch device.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "navigator_video_width": {
      "default": null,
      "description": "Width in pixels of the navigator session video (with_navigator_video).\nDefaults to the render width.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "no_timeout": {
      "default": null,
      "description": "Do not apply a timeout.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "output_type": {
      "anyOf": [
        {
          "$ref": "#/$defs/OutputType"
        },
        {
          "type": "null"
        }
      ],
      "default": "png",
      "description": "Output format, given as one of the exact string values below — pick by\nuser intent:\n- Visual: `png`, `jpg`, `webp`, `gif`, `avif`, `jxl`, `tiff`, `apng`\n- Document: `pdf`, `mhtml`, `html` (rendered DOM)\n- Text/data: `markdown`, `llm_text`, `llm_json` (structured extraction\n  with `llm_format_expects`)\n- Agent: `goal`, what the navigator said when it finished `navigate`\n- Diagnostics: `har` (network capture), `axtree` (accessibility tree)\n- Archive: `warc`, `wacz` (WARC + index + pages bundled for replay tools),\n  `sqlite` (pages, exchanges and links in one SQLite database, full-text indexed)\n- Video: `webm`, `mkv`, `mp4`\n\nDefaults to `png`, and to `goal` when `navigate` is set. To use the\ndefault, omit this field entirely — do not send `null`. To choose a\nformat, set it to one of the exact strings above (e.g. `\"markdown\"`,\n`\"pdf\"`).",
      "examples": [
        "png",
        "jpg",
        "webp",
        "gif",
        "avif",
        "jpegxl",
        "tiff",
        "apng",
        "pdf",
        "mhtml",
        "html",
        "markdown",
        "llm_text",
        "llm_json",
        "goal",
        "har",
        "axtree",
        "warc",
        "wacz",
        "sqlite",
        "webm",
        "mkv",
        "mp4"
      ]
    },
    "pdf_generate_document_outline": {
      "default": null,
      "description": "Whether to generate a document outline in the PDF.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "pdf_generate_tagged_pdf": {
      "default": null,
      "description": "Whether to generate a tagged PDF.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "pdf_height": {
      "default": null,
      "description": "PDF page height in inches.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "pdf_landscape": {
      "default": null,
      "description": "Whether to render PDF in landscape orientation.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "pdf_prefer_css_page_size": {
      "default": null,
      "description": "Whether to prefer CSS page size for PDF.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "pdf_scale": {
      "default": null,
      "description": "PDF scale factor, 0.1–2.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "pdf_width": {
      "default": null,
      "description": "PDF page width in inches.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "platform": {
      "description": "Platform to emulate (e.g., \"Win32\", \"MacIntel\", \"Linux x86_64\").",
      "type": [
        "string",
        "null"
      ]
    },
    "pprof_captures_navigation": {
      "default": null,
      "description": "When using a navigator, capture every page in the pprof. When false (default), the profile\ncovers only the final destination page.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "pprof_cpu_interval_us": {
      "default": null,
      "description": "CPU sampling interval in microseconds for `pprof_cpu`.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "pprof_memory_interval_bytes": {
      "default": null,
      "description": "Memory sampling interval in bytes for `pprof_memory`.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "pprof_no_gzip": {
      "default": null,
      "description": "Skip gzip compression for `pprof_cpu` / `pprof_memory` output. Gzip'd by default.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "remove_modals": {
      "default": null,
      "description": "Remove modal overlays, popups, and paywalls from the page (Pro only).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "skip_robot_instructions": {
      "default": null,
      "description": "Skip robots.txt and page robot directives (Enterprise only).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "storage_limit": {
      "default": null,
      "description": "Largest `with_storage` payload accepted and storage file written, in bytes. Writing\nreads localStorage, sessionStorage, IndexedDB, then Cache Storage, and leaves out each\nitem that would pass it. Default: 67108864.",
      "format": "uint64",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "timeout": {
      "default": null,
      "description": "Request timeout in seconds. 0 means no timeout.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "trace_captures_navigation": {
      "default": null,
      "description": "When using a navigator, capture the full navigation session in the trace. When false\n(default), the trace is trimmed to the final destination page.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "trace_no_gzip": {
      "default": null,
      "description": "Skip gzip compression for `trace` output. The trace is gzip'd by default.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "trace_no_screenshots": {
      "default": null,
      "description": "Omit the screenshot filmstrip from `trace` output.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "url": {
      "description": "The URL to render. Must be http://, https://, or data: URL.",
      "type": "string"
    },
    "user_agent": {
      "description": "User agent string for the browser.",
      "type": [
        "string",
        "null"
      ]
    },
    "video_duration": {
      "default": null,
      "description": "Duration in seconds for video output.",
      "format": "double",
      "type": [
        "number",
        "null"
      ]
    },
    "video_framerate": {
      "default": null,
      "description": "Framerate for video output.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "video_height": {
      "default": null,
      "description": "Height of the output video in pixels.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "video_selector": {
      "description": "CSS selector to crop the video output to. Every encoded frame is\ncropped to the element's bounding rect at render-begin (the rect\nis frozen — it does not follow the element if it moves).\nMutually exclusive with `full_page`. Only meaningful when the\noutput type is video.",
      "type": [
        "string",
        "null"
      ]
    },
    "video_width": {
      "default": null,
      "description": "Width of the output video in pixels.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "wait_for": {
      "anyOf": [
        {
          "$ref": "#/$defs/LoadWaitBoundary"
        },
        {
          "type": "null"
        }
      ],
      "description": "When to consider the page loaded."
    },
    "web_bot_auth": {
      "description": "Sign every request with Web Bot Auth, as \"AGENT=KEY\". AGENT is an https:// origin;\nKEY is an Ed25519 private key, PKCS#8 PEM or JWK, as a data: URI or an http(s) URL.\nReplaces the server's --web-bot-auth.",
      "type": [
        "string",
        "null"
      ]
    },
    "with_archive_cdx": {
      "default": null,
      "description": "Also produce a CDXJ index of the WARC as an additional asset (see\n`with_har`). Requires a WARC: `output_type=warc` or `with_warc=true`.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_axtree": {
      "anyOf": [
        {
          "$ref": "#/$defs/AxTreeFileFormat"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Also produce an accessibility tree as an additional asset (see `with_har`).\nCarries its form: `true`/`json` for the JSON tree (default), `text` for the\nindented snapshot, `false` to omit."
    },
    "with_har": {
      "default": null,
      "description": "Also produce a HAR network capture as an additional asset, linked from\nthe response via a `Link: <…>; rel=\"related\"` header and fetchable from\n`GET /assets`. Requires the server to have additional assets enabled.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_navigator_playwright": {
      "default": null,
      "description": "Also write the navigator's actions as a Playwright script that replays them, as an\nadditional asset (see `with_har`). Requires `navigate`.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_navigator_puppeteer": {
      "default": null,
      "description": "Also write the navigator's actions as a Puppeteer script that replays them, as an\nadditional asset (see `with_har`). Requires `navigate`.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_navigator_video": {
      "default": null,
      "description": "Also record a navigator video as an additional asset (see `with_har`).\nRequires `navigate`.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_network_log": {
      "default": null,
      "description": "Also produce a raw network-event log as an additional asset (see `with_har`).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_pprof_cpu": {
      "default": null,
      "description": "Also produce a CPU profile (pprof) as an additional asset (see `with_har`).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_pprof_memory": {
      "default": null,
      "description": "Also produce a memory profile (pprof) as an additional asset (see `with_har`).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_sqlite": {
      "default": null,
      "description": "Also produce a SQLite archive as an additional asset (see `with_har`).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_storage": {
      "description": "Browser storage to start from: a Playwright storageState object holding cookies,\nlocalStorage, sessionStorage, IndexedDB and Cache Storage; `true` for the server's storage default, or\nempty storage without one; `false` for none. Either form has the storage the render ends with\nreturned as an additional asset, as `with_har` is; left out, the request starts from the\nserver's default and nothing is returned. A `cookie` replaces a\nstorage cookie of the same name, domain and path."
    },
    "with_trace": {
      "default": null,
      "description": "Also produce a performance trace as an additional asset (see `with_har`).",
      "type": [
        "boolean",
        "null"
      ]
    },
    "with_warc": {
      "default": null,
      "description": "Also produce a WARC web archive as an additional asset (see `with_har`).",
      "type": [
        "boolean",
        "null"
      ]
    }
  },
  "additionalProperties": false,
  "required": [
    "url"
  ],
  "$defs": {
    "AxTreeFileFormat": {
      "description": "The serialized form of an accessibility tree written as an additional file.",
      "oneOf": [
        {
          "const": "json",
          "description": "Structured JSON tree with bounding boxes and full node detail.",
          "type": "string"
        },
        {
          "const": "text",
          "description": "Indented text snapshot.",
          "type": "string"
        }
      ]
    },
    "BmpPixelFormat": {
      "description": "Pixel format for BMP output, limited to the layouts FFmpeg's BMP encoder emits.",
      "oneOf": [
        {
          "const": "bgr24",
          "description": "24-bit blue, green, red — the byte order standard BMP stores.",
          "type": "string"
        },
        {
          "const": "rgb565le",
          "description": "16-bit 5-6-5 red/green/blue, little-endian.",
          "type": "string"
        },
        {
          "const": "gray8",
          "description": "8-bit grayscale.",
          "type": "string"
        }
      ]
    },
    "LoadWaitBoundary": {
      "description": "When the page is ready to capture. Time-based values are measured from the page's initial render (DOMContentLoaded), not the window load event. Values: a number (seconds after initial render), 'immediate' (capture at initial render), 'load' (window load event; may time out if a subresource hangs), 'networkidle0', 'networkidle0:N', 'networkidle2', 'networkidle2:N' (require the load event), 'js:eventName', or 'css:selector'",
      "examples": [
        "networkidle0"
      ],
      "type": "string"
    },
    "MarkdownFormat": {
      "description": "The markdown format to use for conversion.",
      "oneOf": [
        {
          "const": "common",
          "description": "CommonMark format (standard markdown without extensions).",
          "type": "string"
        },
        {
          "const": "gfm",
          "description": "GitHub Flavored Markdown (includes tables, strikethrough, autolinks, etc.).",
          "type": "string"
        }
      ]
    },
    "NavigatorInitialScope": {
      "description": "Where the navigator may travel before `--navigator-allow-url` widens it.",
      "oneOf": [
        {
          "const": "origin",
          "description": "The start URL's origin: its scheme, host, and port.",
          "type": "string"
        },
        {
          "const": "domain",
          "description": "The start URL's registrable domain and every subdomain of it, on any port.",
          "type": "string"
        },
        {
          "const": "path",
          "description": "The start URL's folder and everything beneath it.",
          "type": "string"
        }
      ]
    },
    "OutputType": {
      "oneOf": [
        {
          "enum": [
            "pdf",
            "png",
            "apng",
            "jpg",
            "webp",
            "jpegxl",
            "tiff",
            "bmp",
            "webm",
            "mkv",
            "avif",
            "gif",
            "mp4",
            "mhtml",
            "html",
            "markdown",
            "txt",
            "har",
            "warc",
            "wacz",
            "sqlite",
            "axtree",
            "axtree_json",
            "llm_text",
            "llm_json",
            "trace",
            "pprof_cpu",
            "pprof_memory",
            "download"
          ],
          "type": "string"
        },
        {
          "const": "goal",
          "description": "What the navigator said when it reported its goal achieved.",
          "type": "string"
        }
      ]
    },
    "SitemapFormat": {
      "description": "How the target manifest is interpreted.\n\n`Auto` is the value of a bare `--crawl-url-is-sitemap`; the concrete format is\nthen inferred from the target extension and Content-Type.",
      "oneOf": [
        {
          "const": "auto",
          "description": "Infer the format from the target extension, then its Content-Type.",
          "type": "string"
        },
        {
          "const": "xml",
          "description": "XML sitemap: `<urlset>` page list or `<sitemapindex>` of child sitemaps.",
          "type": "string"
        },
        {
          "const": "text",
          "description": "Plain text: one URL per line; blank lines and `#` comments ignored.",
          "type": "string"
        }
      ]
    },
    "VisionDeficiency": {
      "description": "Vision deficiency types that can be emulated.\n\nThese values correspond to the CDP `Emulation.setEmulatedVisionDeficiency`\nmethod's type parameter. The \"none\" value is excluded since it would have\nno effect and makes no sense as a CLI option.",
      "oneOf": [
        {
          "const": "blurredVision",
          "description": "Simulates blurred vision.",
          "type": "string"
        },
        {
          "const": "reducedContrast",
          "description": "Simulates reduced contrast sensitivity.",
          "type": "string"
        },
        {
          "const": "achromatopsia",
          "description": "Complete color blindness (monochromacy).",
          "type": "string"
        },
        {
          "const": "deuteranopia",
          "description": "Red-green color blindness (missing green cones).",
          "type": "string"
        },
        {
          "const": "protanopia",
          "description": "Red-green color blindness (missing red cones).",
          "type": "string"
        },
        {
          "const": "tritanopia",
          "description": "Blue-yellow color blindness (missing blue cones).",
          "type": "string"
        }
      ]
    }
  }
}