{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot API: URL to PNG and PDF",
    "description": "Capture full-page screenshots (PNG/JPEG) and PDFs of any public web page, built for AI agents and automations. Set viewport and device scale, capture one element, hide cookie banners, block ads and set PDF margins. Files land in the key-value store with direct URLs.",
    "version": "0.1",
    "x-build-id": "4DwaKLwNII7tRujce"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zovo-one~website-screenshot-pdf-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zovo-one-website-screenshot-pdf-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/zovo-one~website-screenshot-pdf-api/runs": {
      "post": {
        "operationId": "runs-sync-zovo-one-website-screenshot-pdf-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/zovo-one~website-screenshot-pdf-api/run-sync": {
      "post": {
        "operationId": "run-sync-zovo-one-website-screenshot-pdf-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "URLs to capture",
            "type": "array",
            "description": "Public http(s) pages to capture, one per line, for example https://example.com/pricing. Each URL gives one dataset row and, on success, one file. Up to 50 per run. Localhost, private IP addresses and internal hostnames are refused. Duplicates (same page with a trailing slash or a different host case) are rendered once. The two sample URLs render in about 10 seconds.",
            "default": [
              "https://apify.com",
              "https://news.ycombinator.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "output": {
            "title": "Output format",
            "enum": [
              "png",
              "jpeg",
              "pdf"
            ],
            "type": "string",
            "description": "File type for every URL in this run. PNG is lossless, JPEG is smaller, PDF prints the page on paper-sized pages. Each saved file is one $0.001 event. To get both an image and a PDF, run twice.",
            "default": "png"
          },
          "fullPage": {
            "title": "Full page",
            "type": "boolean",
            "description": "On: capture the whole scrollable page. Off: capture only the visible viewport. Ignored for PDF (always the whole page) and when a CSS selector is set. Images are cut at 16384 device pixels of height and 7680 of width, and the row then says clipped: true.",
            "default": true
          },
          "viewportWidth": {
            "title": "Viewport width (px)",
            "minimum": 320,
            "maximum": 3840,
            "type": "integer",
            "description": "Browser width in CSS pixels. 390 is a typical phone, 1280 a laptop, 1920 a desktop. Width times device scale factor may be at most 7680.",
            "default": 1280
          },
          "viewportHeight": {
            "title": "Viewport height (px)",
            "minimum": 240,
            "maximum": 2160,
            "type": "integer",
            "description": "Browser height in CSS pixels. Only matters when Full page is off; full-page captures grow to the content height.",
            "default": 800
          },
          "deviceScaleFactor": {
            "title": "Device scale factor",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Pixel density. 1 is standard, 2 gives retina-sharp images at double the pixel size, 3 is the maximum. Width times this value may be at most 7680.",
            "default": 1
          },
          "quality": {
            "title": "JPEG quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "JPEG compression quality from 1 to 100. Higher is sharper and larger. Used only when Output format is JPEG image.",
            "default": 90
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle",
              "commit"
            ],
            "type": "string",
            "description": "When the page counts as loaded. Network idle (no requests for 500 ms) works best for JavaScript-heavy pages but can time out on pages that poll or keep a websocket open. Use DOM content loaded for those.",
            "default": "networkidle"
          },
          "delay": {
            "title": "Extra delay before capture (ms)",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Extra wait in milliseconds after the page loads and banners are hidden, so animations, lazy images and fonts can settle. 0 to 30000. It counts toward the page timeout. If it leaves less than 5 s and you kept the default timeout, the timeout is raised for you; an explicit timeout that is too short is refused.",
            "default": 0
          },
          "selector": {
            "title": "Capture only this element (CSS selector)",
            "type": "string",
            "description": "Optional CSS selector, for example #pricing or main article. Only the first matching element is captured and Full page is ignored. PNG and JPEG only (ignored for PDF). The element must become visible within the page timeout, or the row fails."
          },
          "hideSelectors": {
            "title": "Hide selectors (cookie banners, chat widgets)",
            "type": "array",
            "description": "CSS selectors of elements to hide before capture, such as cookie banners and chat widgets. Example: #onetrust-banner-sdk, .cookie-banner, [aria-label=\"Cookie banner\"]. Up to 20. Braces, semicolons and angle brackets are refused. Send an empty list to hide nothing.",
            "default": [
              "#onetrust-banner-sdk",
              ".cookie-banner"
            ],
            "items": {
              "type": "string"
            }
          },
          "blockAds": {
            "title": "Block ads and trackers",
            "type": "boolean",
            "description": "Abort requests to common ad, analytics and tracker hosts (DoubleClick, Google Ads, Facebook, Taboola, Criteo, Hotjar and others) for cleaner, faster captures. The page you asked for and requests to its own host are never blocked.",
            "default": true
          },
          "pdfFormat": {
            "title": "PDF page format",
            "enum": [
              "A4",
              "Letter",
              "Legal",
              "A3",
              "Tabloid"
            ],
            "type": "string",
            "description": "Paper size for PDF output. Ignored for PNG and JPEG.",
            "default": "A4"
          },
          "pdfLandscape": {
            "title": "PDF landscape",
            "type": "boolean",
            "description": "Print the PDF in landscape orientation. Ignored for PNG and JPEG.",
            "default": false
          },
          "pdfPrintBackground": {
            "title": "PDF print background",
            "type": "boolean",
            "description": "Keep background colours and images in the PDF. Leave it on for dark or colourful sites; without it they print as dark text on white.",
            "default": true
          },
          "pdfMarginTop": {
            "title": "PDF top margin",
            "type": "string",
            "description": "Top margin of each PDF page. 0 or a length in mm, cm, in, px or pt, for example 1cm, 12mm, 0.5in or 12pt. Ignored for PNG and JPEG.",
            "default": "1cm"
          },
          "pdfMarginRight": {
            "title": "PDF right margin",
            "type": "string",
            "description": "Right margin of each PDF page. 0 or a length in mm, cm, in, px or pt, for example 1cm, 12mm, 0.5in or 12pt. Ignored for PNG and JPEG.",
            "default": "1cm"
          },
          "pdfMarginBottom": {
            "title": "PDF bottom margin",
            "type": "string",
            "description": "Bottom margin of each PDF page. 0 or a length in mm, cm, in, px or pt, for example 1cm, 12mm, 0.5in or 12pt. Ignored for PNG and JPEG.",
            "default": "1cm"
          },
          "pdfMarginLeft": {
            "title": "PDF left margin",
            "type": "string",
            "description": "Left margin of each PDF page. 0 or a length in mm, cm, in, px or pt, for example 1cm, 12mm, 0.5in or 12pt. Ignored for PNG and JPEG.",
            "default": "1cm"
          },
          "maxUrls": {
            "title": "Max URLs per run",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Safety cap on how many URLs one run accepts, 1 to 50. If the list is longer, the run stops before the browser starts and nothing is charged. 50 is also the hard maximum.",
            "default": 50
          },
          "pageTimeoutSecs": {
            "title": "Timeout per page (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Time limit for one URL, 5 to 120 seconds, covering navigation, delay and capture. A page that times out becomes a failed row (not charged) and the run moves on.",
            "default": 30
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Pages rendered in parallel, 1 to 4. Lowered automatically when the run has little memory (about 512 MB per page, 1 GB per page above 2560 device pixels of width).",
            "default": 2
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}