{
  "openapi": "3.0.1",
  "info": {
    "title": "Full Page Screenshot & URL to PDF: Bulk Website Screenshot",
    "description": "Full page screenshots and URL to PDF in bulk: $3 per 1,000, failed pages free. PNG, JPEG, WebP or PDF of any URL list or sitemap, on desktop, tablet and phone screens. Cookie banners hidden, ads blocked.",
    "version": "0.1",
    "x-build-id": "VF85bVLJ0xxJjtbzq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowsmithhq~website-screenshot-pdf-snapshotter/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowsmithhq-website-screenshot-pdf-snapshotter",
        "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/rowsmithhq~website-screenshot-pdf-snapshotter/runs": {
      "post": {
        "operationId": "runs-sync-rowsmithhq-website-screenshot-pdf-snapshotter",
        "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/rowsmithhq~website-screenshot-pdf-snapshotter/run-sync": {
      "post": {
        "operationId": "run-sync-rowsmithhq-website-screenshot-pdf-snapshotter",
        "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": {
          "startUrls": {
            "title": "Website URLs",
            "type": "array",
            "description": "The pages to capture, one per line. You can paste many at once, upload a text file, or link to a text file of URLs. Links without http(s):// get https:// added.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sitemapUrls": {
            "title": "Sitemap URLs (optional)",
            "type": "array",
            "description": "Capture the pages listed in a sitemap, e.g. https://example.com/sitemap.xml. Sitemap index files and .xml.gz files work too. Limited by 'Max pages from sitemaps'.",
            "items": {
              "type": "string"
            }
          },
          "maxUrlsFromSitemaps": {
            "title": "Max pages from sitemaps",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop reading sitemaps after this many pages. Links you paste directly are always all captured.",
            "default": 100
          },
          "formats": {
            "title": "Output formats",
            "uniqueItems": true,
            "type": "array",
            "description": "Pick one or more. Each format is a separate file (and a separate charge). PNG is sharpest, JPEG and WebP are much smaller, PDF gives a printable document.",
            "items": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp",
                "pdf"
              ],
              "enumTitles": [
                "PNG image (sharpest)",
                "JPEG image (small files)",
                "WebP image (smallest files)",
                "PDF document"
              ]
            },
            "default": [
              "png"
            ]
          },
          "devices": {
            "title": "Devices",
            "uniqueItems": true,
            "type": "array",
            "description": "Each page is captured on every device you pick. Phone and tablet presets load the real mobile layout (mobile screen size, touch, mobile browser identity).",
            "items": {
              "type": "string",
              "enum": [
                "desktop",
                "desktopHd",
                "laptop",
                "tablet",
                "iphone",
                "android",
                "custom"
              ],
              "enumTitles": [
                "Desktop (1440 x 900)",
                "Full HD desktop (1920 x 1080)",
                "Laptop (1366 x 768)",
                "Tablet, iPad (820 x 1180)",
                "iPhone (393 x 852)",
                "Android phone, Pixel (412 x 915)",
                "Custom size (set below)"
              ]
            },
            "default": [
              "desktop"
            ]
          },
          "fullPage": {
            "title": "Capture the full page",
            "type": "boolean",
            "description": "Off (default): only the first screen, exactly what a visitor sees before scrolling. On: the whole page from top to bottom, with lazy-loaded images scrolled into view. A full-page image includes the first 5,000 px of height; each further 5,000 px is charged as one extra-height event.",
            "default": false
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "networkidle",
              "domcontentloaded"
            ],
            "type": "string",
            "description": "'Page loaded' suits most sites. 'Network idle' waits until the page stops downloading (best for heavy JavaScript apps and charts). 'HTML ready' is fastest.",
            "default": "load"
          },
          "waitForSelector": {
            "title": "Wait for this element (CSS selector)",
            "type": "string",
            "description": "Optional. Wait until this element is visible before capturing, e.g. #main-chart or .product-grid. If it never appears, the page is still captured with a warning."
          },
          "delaySecs": {
            "title": "Extra delay before capture",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Extra seconds to wait after loading, for animations or late content.",
            "default": 1
          },
          "scrollPage": {
            "title": "Scroll through the page first",
            "type": "boolean",
            "description": "Scrolls to the bottom and back before capturing, so lazy-loaded images and scroll animations appear in the full-page image instead of blank boxes.",
            "default": true
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Best effort: clicks the banner's accept button (OneTrust, Cookiebot, Didomi, Quantcast, Usercentrics and many more), then hides any consent box that is left.",
            "default": true
          },
          "hideChatWidgets": {
            "title": "Hide live-chat bubbles",
            "type": "boolean",
            "description": "Hides floating chat buttons and windows (Intercom, HubSpot, Drift, Zendesk, Tidio, Crisp and others).",
            "default": true
          },
          "blockAds": {
            "title": "Block ads and trackers",
            "type": "boolean",
            "description": "Stops well-known ad, analytics and tracking services from loading, so pages load faster and the image shows the page's own content. The site you capture is never blocked itself. Turn off to see the page exactly as a visitor without an ad blocker does.",
            "default": true
          },
          "blockMedia": {
            "title": "Block videos",
            "type": "boolean",
            "description": "Skips video and audio downloads; a background video shows its cover image instead. Faster captures. A link that points straight to a video file is not blocked.",
            "default": true
          },
          "hideSelectors": {
            "title": "Hide these elements (CSS selectors)",
            "type": "array",
            "description": "Optional. Anything else to remove before capturing, one CSS selector per line, e.g. .newsletter-popup or #promo-bar.",
            "items": {
              "type": "string"
            }
          },
          "skipErrorPages": {
            "title": "Skip error pages",
            "type": "boolean",
            "description": "Off: pages that answer with an HTTP error (like 404) are captured as they look. On: they are reported as failed instead, and not charged.",
            "default": false
          },
          "deviceScaleFactor": {
            "title": "Pixel density",
            "enum": [
              "auto",
              "1",
              "2",
              "3"
            ],
            "type": "string",
            "description": "Auto: 1x for desktop and laptop, 2x (Retina sharp) for tablet and phones. Higher density means sharper but larger images.",
            "default": "auto"
          },
          "imageQuality": {
            "title": "JPEG / WebP quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1-100. Higher is sharper with bigger files. Not used for PNG.",
            "default": 80
          },
          "maxPageHeight": {
            "title": "Maximum page height",
            "minimum": 1000,
            "maximum": 100000,
            "type": "integer",
            "description": "Full-page images stop at this height (in screen pixels before density), so endless pages cannot produce giant files. The result row says when an image was cut.",
            "default": 15000
          },
          "customWidth": {
            "title": "Custom device: width",
            "minimum": 240,
            "maximum": 3840,
            "type": "integer",
            "description": "Used only when 'Custom size' is chosen in Devices.",
            "default": 1280
          },
          "customHeight": {
            "title": "Custom device: height",
            "minimum": 240,
            "maximum": 2160,
            "type": "integer",
            "description": "Used only when 'Custom size' is chosen in Devices. For full-page captures this is only the first screen's height.",
            "default": 800
          },
          "customIsMobile": {
            "title": "Custom device: behave like a phone",
            "type": "boolean",
            "description": "Turn on to get the mobile layout at your custom size (touch screen, mobile browser identity).",
            "default": false
          },
          "pdfFormat": {
            "title": "Paper size",
            "enum": [
              "A4",
              "Letter",
              "Legal",
              "A3",
              "Tabloid"
            ],
            "type": "string",
            "description": "Page size of the PDF.",
            "default": "A4"
          },
          "pdfLandscape": {
            "title": "Landscape",
            "type": "boolean",
            "description": "Wide pages instead of tall pages.",
            "default": false
          },
          "pdfPrintBackground": {
            "title": "Print background colors and images",
            "type": "boolean",
            "description": "Keeps the site's colors and background images in the PDF.",
            "default": true
          },
          "pdfMedia": {
            "title": "PDF look",
            "enum": [
              "print",
              "screen"
            ],
            "type": "string",
            "description": "'Print version' uses the site's own print styles, like a browser's Save as PDF. 'Screen version' keeps the page looking like the website.",
            "default": "print"
          },
          "pdfMarginMm": {
            "title": "Margins",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Blank border on every side of each PDF page.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Pages at the same time",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "The most pages captured in parallel. The run lowers it automatically to what its memory and CPU can handle (for example 2 at the default 2 GB of memory, 4 at 4 GB), so it never crashes or queues up pages for nothing.",
            "default": 10
          },
          "pageTimeoutSecs": {
            "title": "Page load timeout",
            "minimum": 10,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for a page to load before giving up on that attempt.",
            "default": 60
          },
          "maxRetries": {
            "title": "Retries for failed pages",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Pages that fail for a temporary reason (timeout, connection reset) are tried again, waiting a bit longer each time. Permanent problems (unknown domain, file download links, bot walls) are not retried.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}