{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot & PDF API",
    "description": "Capture full-page screenshots (PNG, JPEG, WebP) and PDFs of any URL. Removes cookie banners, loads lazy images, fixes sticky headers, renders emoji and CJK text. Desktop, tablet, and mobile presets. You pay only for successful captures.",
    "version": "1.0",
    "x-build-id": "Hpo08hBzBqOn4bppq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/catalyst-labs~website-screenshot-pdf-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-catalyst-labs-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/catalyst-labs~website-screenshot-pdf-api/runs": {
      "post": {
        "operationId": "runs-sync-catalyst-labs-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/catalyst-labs~website-screenshot-pdf-api/run-sync": {
      "post": {
        "operationId": "run-sync-catalyst-labs-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",
            "minItems": 1,
            "type": "array",
            "description": "Web pages to capture. Each URL gives one file per format. https:// is added if missing; duplicates are removed and invalid entries are reported for free. Example: [\"https://apify.com\", \"example.com/pricing\"]",
            "items": {
              "type": "string"
            }
          },
          "formats": {
            "title": "Output formats",
            "type": "array",
            "description": "Output formats per URL: \"png\", \"jpeg\", \"webp\" (screenshots) and/or \"pdf\". Each format is a separate file and charge. Default: [\"png\"]. Example: [\"webp\", \"pdf\"]",
            "items": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp",
                "pdf"
              ],
              "enumTitles": [
                "PNG",
                "JPEG",
                "WebP",
                "PDF"
              ]
            },
            "default": [
              "png"
            ]
          },
          "fullPage": {
            "title": "Full-page capture",
            "type": "boolean",
            "description": "Capture the whole scrollable page (true) or only the first screen/viewport (false). Default: true. Example: false for a quick above-the-fold thumbnail.",
            "default": true
          },
          "device": {
            "title": "Device preset",
            "enum": [
              "desktop",
              "desktop-hd",
              "laptop",
              "tablet",
              "mobile"
            ],
            "type": "string",
            "description": "Viewport preset: \"desktop\" (1440x900), \"desktop-hd\" (1920x1080), \"laptop\" (1280x800), \"tablet\" (820x1180 @2x) or \"mobile\" (iPhone 390x844 @3x, mobile user agent). Default: \"desktop\". Example: \"mobile\"",
            "default": "desktop"
          },
          "width": {
            "title": "Viewport width (px)",
            "minimum": 200,
            "maximum": 3840,
            "type": "integer",
            "description": "Custom viewport width in CSS pixels; overrides the preset width. Example: 1366"
          },
          "height": {
            "title": "Viewport height (px)",
            "minimum": 200,
            "maximum": 4320,
            "type": "integer",
            "description": "Custom viewport height in CSS pixels; overrides the preset. With fullPage false this is the image height. Example: 768"
          },
          "deviceScaleFactor": {
            "title": "Pixel density (1–3)",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Pixel density (1-3). 2 or 3 gives retina-sharp images but larger files. Default: from the preset (desktop 1, mobile 3). Example: 2"
          },
          "maxHeight": {
            "title": "Max image height (CSS px)",
            "minimum": 200,
            "maximum": 50000,
            "type": "integer",
            "description": "Longest page part to capture, in CSS pixels. Leave empty for the default: the whole page up to 36,000 device pixels (36,000 px on desktop, 18,000 on tablet, 12,000 on mobile), which covers almost every real page, including very long news front pages and Wikipedia lists. Longer pages are cut here and flagged with truncatedAtMaxHeight: true. Max 50,000 (PNG/JPEG are also limited to 60,000 device pixels, WebP to 16,383). Example: 8000 for smaller, faster files."
          },
          "quality": {
            "title": "JPEG/WebP quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "JPEG/WebP quality, 1-100. Ignored for PNG and PDF. Default: 80. Example: 60 for smaller files.",
            "default": 80
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle"
            ],
            "type": "string",
            "description": "When the page counts as loaded: \"domcontentloaded\" (fastest), \"load\" (default, waits up to 15 s for images) or \"networkidle\" (slowest, for heavy single-page apps). Example: \"networkidle\"",
            "default": "load"
          },
          "waitForSelector": {
            "title": "Wait for CSS selector",
            "type": "string",
            "description": "Wait until this CSS selector is visible before capturing (up to navigationTimeoutSecs). Use it for apps that render data late. Fails as SELECTOR_NOT_FOUND (not charged) if it never appears. Example: \"#main-chart\""
          },
          "captureSelector": {
            "title": "Capture only this element (CSS selector)",
            "type": "string",
            "description": "Capture only this element instead of the page (screenshots only). Fails as SELECTOR_NOT_FOUND (not charged) if missing. Example: \"article\", \"#pricing-table\""
          },
          "delayMs": {
            "title": "Extra delay (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Extra wait in milliseconds after loading and before capturing, for animations or late widgets. Max 60000. Default: 0. Example: 2000",
            "default": 0
          },
          "scrollToBottom": {
            "title": "Auto-scroll to load lazy content",
            "type": "boolean",
            "description": "Scroll through the page in steps (with short pauses) so lazy images, scroll-triggered sections and content loaded on scroll appear; keeps going while the page grows (bounded), then returns to the top. Default: true. Example: false for faster captures of short pages.",
            "default": true
          },
          "freezeAnimations": {
            "title": "Finish animations before capture",
            "type": "boolean",
            "description": "Put CSS animations, transitions and scroll-reveal effects (fade-ins, slide-ins, animated cards) in their final state, so the screenshot shows the finished page instead of half-faded or empty sections. Default: true. Example: false to capture the page exactly mid-animation.",
            "default": true
          },
          "dismissCookieBanners": {
            "title": "Remove cookie banners",
            "type": "boolean",
            "description": "Click \"Accept\" on cookie/consent banners (about 20 platforms such as OneTrust, Didomi, Sourcepoint, Cookiebot and Usercentrics, plus accept buttons in 18 languages) and hide what is left. Default: true. Example: false to capture the banner itself.",
            "default": true
          },
          "hidePopups": {
            "title": "Hide popups and overlays",
            "type": "boolean",
            "description": "Hide newsletter popups, full-screen overlays and chat widgets (Intercom, Drift, HubSpot, Zendesk and others). Default: true.",
            "default": true
          },
          "stickyElements": {
            "title": "Sticky/fixed elements (full-page)",
            "enum": [
              "static",
              "hide",
              "keep"
            ],
            "type": "string",
            "description": "How to handle sticky/fixed headers in full-page captures: \"static\" (show once at the top, default), \"hide\" (remove them) or \"keep\" (leave as the browser draws them; may repeat). Example: \"hide\"",
            "default": "static"
          },
          "hideSelectors": {
            "title": "Hide these CSS selectors",
            "type": "array",
            "description": "CSS selectors of elements to hide before capturing. Example: [\".ad-slot\", \"#promo-bar\"]",
            "items": {
              "type": "string"
            }
          },
          "customCss": {
            "title": "Custom CSS",
            "type": "string",
            "description": "CSS injected before capturing. Example: \"body { font-size: 18px } .banner { display: none }\""
          },
          "headers": {
            "title": "Extra HTTP headers",
            "type": "object",
            "description": "Extra HTTP headers sent with every request (Host, Content-Length and similar are ignored). Example: {\"Accept-Language\": \"de-DE\", \"Authorization\": \"Bearer abc\"}"
          },
          "cookies": {
            "title": "Cookies",
            "type": "array",
            "description": "Cookies set before loading, for logged-in or region-specific pages. Each needs name and value; domain defaults to the URL host. Example: [{\"name\": \"session\", \"value\": \"abc123\", \"domain\": \".example.com\"}]"
          },
          "darkMode": {
            "title": "Dark mode",
            "type": "boolean",
            "description": "Emulate the dark color scheme (prefers-color-scheme: dark). Only changes sites that support dark mode. Default: false.",
            "default": false
          },
          "blockAds": {
            "title": "Block ads and trackers",
            "type": "boolean",
            "description": "Block common ad and tracking hosts. Faster, cleaner captures. Default: true.",
            "default": true
          },
          "pdfFormat": {
            "title": "PDF paper size",
            "enum": [
              "A4",
              "Letter",
              "Legal",
              "A3",
              "A5",
              "Tabloid"
            ],
            "type": "string",
            "description": "PDF paper size: \"A4\" (default), \"Letter\", \"Legal\", \"A3\" or \"Tabloid\". Example: \"Letter\"",
            "default": "A4"
          },
          "pdfLandscape": {
            "title": "PDF landscape",
            "type": "boolean",
            "description": "Landscape PDF pages. Default: false.",
            "default": false
          },
          "pdfMargin": {
            "title": "PDF margin",
            "type": "string",
            "description": "PDF page margin on all sides, in CSS units. Default: \"10mm\". Example: \"0\" or \"0.5in\"",
            "default": "10mm"
          },
          "pdfPrintBackground": {
            "title": "PDF background graphics",
            "type": "boolean",
            "description": "Include background colors and images in PDFs. Default: true.",
            "default": true
          },
          "pdfMediaType": {
            "title": "PDF CSS media",
            "enum": [
              "screen",
              "print"
            ],
            "type": "string",
            "description": "CSS media for PDFs: \"screen\" (looks like the website, default) or \"print\" (uses the site's print stylesheet, often cleaner for articles). Example: \"print\"",
            "default": "screen"
          },
          "pdfSinglePage": {
            "title": "PDF as one long page",
            "type": "boolean",
            "description": "Make the PDF one long page with the full page height and no page breaks, like a full-page screenshot in vector form. Default: false.",
            "default": false
          },
          "captureErrorPages": {
            "title": "Capture HTTP error pages (4xx/5xx)",
            "type": "boolean",
            "description": "Capture and charge pages that return HTTP 4xx/5xx (for example to document a 404). Default: false, so error pages fail as HTTP_ERROR and are not charged.",
            "default": false
          },
          "captureBlockedPages": {
            "title": "Capture bot-check / captcha pages",
            "type": "boolean",
            "description": "Capture and charge bot-check/challenge pages (Cloudflare, DataDome...) instead of failing as BLOCKED. Default: false, so blocked pages are not charged.",
            "default": false
          },
          "retryBlockedWithProxy": {
            "title": "Retry bot-blocked pages through Apify Proxy",
            "type": "boolean",
            "description": "When a site answers with a bot check and you did not set your own proxy, retry that URL once through Apify Proxy (datacenter) with a fresh, regular browser. Blocked pages are never charged, whether or not the retry works. Default: true. Example: false to fail fast on blocked sites.",
            "default": true
          },
          "navigationTimeoutSecs": {
            "title": "Navigation timeout (s)",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "Seconds to wait for the page to start loading and for waitForSelector. Default: 45. Example: 90 for slow sites.",
            "default": 45
          },
          "pageTimeoutSecs": {
            "title": "Total time limit per URL (s)",
            "minimum": 15,
            "maximum": 600,
            "type": "integer",
            "description": "Time limit in seconds for one URL (load, scroll and capture). Leave empty for 120 s, or up to 240 s automatically on runs with less than 4 GB memory (less than 1 vCPU). Very tall pages automatically get extra time (up to +120 s) once their height is known."
          },
          "maxRetries": {
            "title": "Retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for temporary errors (timeouts, network, crashes, blank pages). DNS, HTTP and selector errors are not retried. Default: 1. Example: 2",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Parallel pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many pages to load in parallel. Leave empty for automatic: 1 below 2 GB memory, 2 at 2–4 GB, then 1 per 2 GB (4 at 8 GB, max 8). New pages also wait while memory is above 70% or CPU is saturated, and only one very tall page per vCPU is laid out at a time."
          },
          "perHostConcurrency": {
            "title": "Max parallel pages per website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Max parallel pages on the same website, to stay polite and avoid rate limits. Default: 2.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy for all requests. Not needed for most sites; for sites that block data centers use Apify residential proxy. Example: {\"useApifyProxy\": true, \"apifyProxyGroups\": [\"RESIDENTIAL\"]}"
          },
          "fileNamePrefix": {
            "title": "File name prefix",
            "type": "string",
            "description": "Prefix for file keys in the key-value store. Example: \"release-42\" gives keys like \"release-42-0000-example.com.png\""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}