{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot API - Full Page Screenshot & URL to PDF",
    "description": "Bulk website screenshots: full page screenshot, one element, mobile or tablet, several widths. URL to PDF (website to PDF) and clean Markdown in one run. Hides ads and cookie banners. Failures free.",
    "version": "0.1",
    "x-build-id": "LMmILI29BMnuzFUKz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~website-screenshot-pdf-markdown/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-website-screenshot-pdf-markdown",
        "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/tidytools~website-screenshot-pdf-markdown/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-website-screenshot-pdf-markdown",
        "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/tidytools~website-screenshot-pdf-markdown/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-website-screenshot-pdf-markdown",
        "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",
        "properties": {
          "urls": {
            "title": "URLs",
            "type": "array",
            "description": "Main input (fill this, or `startUrls`). Pages to capture, one per line. Bare domains (example.com) are fine; blank or invalid lines are skipped and listed in the results (not charged). Only public http(s) URLs are supported.",
            "items": {
              "type": "string"
            }
          },
          "outputs": {
            "title": "Outputs",
            "type": "array",
            "description": "What to produce for each page. You are charged only for outputs that succeed.",
            "items": {
              "type": "string",
              "enum": [
                "screenshot",
                "pdf",
                "markdown"
              ],
              "enumTitles": [
                "Screenshot (PNG/JPEG/WebP)",
                "PDF",
                "Markdown (LLM-ready text)"
              ]
            },
            "default": [
              "screenshot"
            ]
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "laptop",
              "tablet",
              "mobile",
              "custom"
            ],
            "type": "string",
            "description": "Emulate a device. Mobile and tablet use a touch screen, mobile layout and high pixel density. Choose \"Custom\" to use the width and height below.",
            "default": "desktop"
          },
          "devices": {
            "title": "Responsive: several devices",
            "type": "array",
            "description": "Capture every URL once per device (one dataset item and one screenshot each, with a \"variant\" field). Overrides Device. PDF and Markdown are made once per URL, with the first device.",
            "items": {
              "type": "string",
              "enum": [
                "desktop",
                "laptop",
                "tablet",
                "mobile"
              ],
              "enumTitles": [
                "Desktop (1280×800)",
                "Laptop (1440×900)",
                "Tablet (820×1180, 2x)",
                "Mobile (390×844, 3x)"
              ]
            }
          },
          "viewportWidths": {
            "title": "Responsive: several widths (px)",
            "type": "array",
            "description": "Capture every URL once per width, e.g. 375, 768, 1920 (200–3840). Combined with the devices above, at most 10 variants. Each screenshot is charged separately.",
            "items": {
              "type": "string"
            }
          },
          "fullPage": {
            "title": "Full-page screenshot",
            "type": "boolean",
            "description": "Capture the whole scrollable page instead of only the viewport (very long pages are cut at 16,384 px).",
            "default": false
          },
          "maxScreenshotHeight": {
            "title": "Max full-page height (px)",
            "minimum": 0,
            "maximum": 16384,
            "type": "integer",
            "description": "Cut full-page screenshots at this height, e.g. 3000 for a preview of the top of long pages. 0 = no limit (pages are still cut at 16,384 px). Ignored for viewport and element screenshots.",
            "default": 0
          },
          "viewportWidth": {
            "title": "Viewport width (px)",
            "minimum": 200,
            "maximum": 3840,
            "type": "integer",
            "description": "Used when Device is \"Custom\". 1280 is a typical laptop.",
            "default": 1280
          },
          "viewportHeight": {
            "title": "Viewport height (px)",
            "minimum": 200,
            "maximum": 3840,
            "type": "integer",
            "description": "Used when Device is \"Custom\". Also the screenshot height when full-page is off.",
            "default": 800
          },
          "pixelDensity": {
            "title": "Pixel density (retina)",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Device pixel ratio: 2 or 3 gives sharp retina images. Leave empty to use the device default (desktop 1x, tablet 2x, mobile 3x)."
          },
          "screenshotFormat": {
            "title": "Image format",
            "enum": [
              "png",
              "jpeg",
              "webp"
            ],
            "type": "string",
            "description": "PNG is lossless; JPEG and WebP are much smaller files.",
            "default": "png"
          },
          "screenshotQuality": {
            "title": "Image quality (JPEG/WebP only)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Compression quality for JPEG and WebP. Ignored for PNG.",
            "default": 80
          },
          "darkMode": {
            "title": "Dark mode",
            "type": "boolean",
            "description": "Ask the page for its dark theme (prefers-color-scheme: dark). Only affects sites that support dark mode.",
            "default": false
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Remove cookie and consent pop-ups (OneTrust, Cookiebot, Didomi, Quantcast and many more) before capturing. Applies to screenshots, PDFs and Markdown.",
            "default": true
          },
          "hidePopups": {
            "title": "Hide login & newsletter pop-ups",
            "type": "boolean",
            "description": "Hide sign-in walls, newsletter and discount pop-ups, push-notification prompts, country pickers and the dark backdrop behind them, and unlock page scrolling. Site headers, hero sections and page content are never hidden. The item reports how many elements were hidden in \"popupsHidden\".",
            "default": true
          },
          "fixStickyHeaders": {
            "title": "Sticky headers only once (full page)",
            "type": "boolean",
            "description": "For full-page screenshots: fixed and sticky headers, bottom bars and chat buttons are pinned so they appear once (headers at the top, bottom bars at the end of the page) instead of covering content in the middle of the page.",
            "default": true
          },
          "selectorsToHide": {
            "title": "Hide these elements (CSS selectors)",
            "type": "string",
            "description": "Comma-separated CSS selectors to hide before capturing, e.g. \".chat-widget, #newsletter-popup\". Also removed from the Markdown."
          },
          "pdfFormat": {
            "title": "Paper size",
            "enum": [
              "A4",
              "Letter",
              "Legal"
            ],
            "type": "string",
            "description": "Paper size of the generated PDF.",
            "default": "A4"
          },
          "pdfLandscape": {
            "title": "Landscape",
            "type": "boolean",
            "description": "Print the PDF in landscape orientation.",
            "default": false
          },
          "pdfPrintBackground": {
            "title": "Print background graphics",
            "type": "boolean",
            "description": "Include background colours and images in the PDF.",
            "default": true
          },
          "markdownCssSelector": {
            "title": "Only convert this part of the page (CSS selector)",
            "type": "string",
            "description": "Optional, e.g. \"article\" or \"main\". Leave empty to convert the whole page."
          },
          "markdownRemoveBoilerplate": {
            "title": "Remove navigation, headers and footers",
            "type": "boolean",
            "description": "On by default (also for API calls). Drops nav bars, site headers and footers, sidebars, breadcrumbs, cookie notices and \"Skip to main content\" links from the Markdown. Screenshots and PDFs are not affected. Set to false to convert the whole page.",
            "default": true
          },
          "markdownRemoveSelectors": {
            "title": "Also remove these elements from the Markdown (CSS selectors)",
            "type": "string",
            "description": "Optional comma-separated CSS selectors, e.g. \".related-posts, #comments\". Works with or without the option above."
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle0",
              "networkidle2"
            ],
            "type": "string",
            "description": "When the page counts as loaded. \"networkidle2\" works for most sites; use \"load\" for faster captures.",
            "default": "networkidle2"
          },
          "delaySecs": {
            "title": "Extra delay after load (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Wait this many seconds after the page loads before capturing (useful for animations or lazy content).",
            "default": 0
          },
          "timeoutSecs": {
            "title": "Page load timeout (seconds)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "If the page has not finished loading by then, whatever has loaded is captured.",
            "default": 30
          },
          "scrollToBottom": {
            "title": "Scroll to the bottom first (lazy-loaded content)",
            "type": "boolean",
            "description": "Scroll through the page before capturing so lazy-loaded images and sections appear, then scroll back to the top. Recommended with full-page screenshots.",
            "default": false
          },
          "scrollDelaySecs": {
            "title": "Wait after scrolling (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Used with \"Scroll to the bottom first\": how long to wait after scrolling back up.",
            "default": 1
          },
          "waitForSelector": {
            "title": "Wait for this element (CSS selector)",
            "type": "string",
            "description": "Optional, e.g. \"#pricing-table\". Waits until it appears (within the page load timeout). If it never appears the page is still captured and the item gets \"waitForSelectorTimedOut\": true."
          },
          "blockResources": {
            "title": "Don't load these resources",
            "type": "array",
            "description": "Skip images, fonts, media or stylesheets for faster, lighter captures (mostly useful for Markdown).",
            "items": {
              "type": "string",
              "enum": [
                "image",
                "font",
                "media",
                "stylesheet"
              ],
              "enumTitles": [
                "Images",
                "Fonts",
                "Audio & video",
                "Stylesheets"
              ]
            }
          },
          "maxConcurrency": {
            "title": "Parallel pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many pages are captured at the same time.",
            "default": 5
          },
          "screenshotSelector": {
            "title": "Screenshot only this element (CSS selector)",
            "type": "string",
            "description": "Optional, e.g. \"#pricing\" or \".chart\". The screenshot shows only the first matching element (the full-page option is ignored). If the element is not on the page, a normal screenshot is taken and the item gets \"selectorNotFound\": true. Priced as one screenshot."
          },
          "blockAds": {
            "title": "Block ads and trackers",
            "type": "boolean",
            "description": "Don't load requests to about 50 common ad, analytics and tracking hosts (Google Ads, DoubleClick, Facebook pixel, Hotjar and more). Cleaner, faster screenshots and Markdown. The page itself is never blocked.",
            "default": false
          },
          "startUrls": {
            "title": "URLs (request list, optional)",
            "type": "array",
            "description": "Same as the list above, in Apify's request-list format. Kept for older inputs; the plain list above is recommended, especially for API calls.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}