{
  "$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"
      ]
    },
    "har_captures_navigation": {
      "default": null,
      "description": "Include full navigation session in HAR output when using LLM navigation.\nBy default (false), HAR only captures network activity from the final page\nafter navigation succeeds. When true, captures all network activity from\nthe entire navigation session including intermediate pages.",
      "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_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. A `file:` start is its\nfolder under every scope."
    },
    "navigator_max_steps": {
      "default": null,
      "description": "Maximum navigation steps before giving up. Default is 10.",
      "format": "uint32",
      "minimum": 0,
      "type": [
        "integer",
        "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- 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",
        "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_robots_txt": {
      "default": null,
      "description": "Skip robots.txt checking (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."
    },
    "warc_captures_navigation": {
      "default": null,
      "description": "Include full navigation session in WARC output when using LLM navigation.\nBy default (false), WARC only captures network activity from the final page\nafter navigation succeeds. When true, captures all network activity from\nthe entire navigation session including intermediate pages.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "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_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",
            "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"
        }
      ]
    }
  }
}