{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot Generator: Full Page, Mobile & PDF",
    "description": "Screenshot any list of URLs in real Chromium: full page, viewport or one element, on desktop, laptop, iPad, iPhone or Android, as PNG, JPEG or PDF. Hides cookie banners, blocks ads, dark mode, custom CSS. Pay per saved file; failed pages are free.",
    "version": "0.1",
    "x-build-id": "cOabMzFpKgJovUXII"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~website-screenshot-generator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-website-screenshot-generator",
        "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/rjmacarthy~website-screenshot-generator/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-website-screenshot-generator",
        "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/rjmacarthy~website-screenshot-generator/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-website-screenshot-generator",
        "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",
            "type": "array",
            "description": "Web pages to capture, one per line, e.g. https://apify.com. Bare domains like example.com get https:// added. Duplicates are removed.",
            "default": [
              "https://apify.com",
              "https://example.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "devices": {
            "title": "Devices",
            "type": "array",
            "description": "Capture every URL on each of these devices (one screenshot per URL per device). Desktop 1920x1080, Laptop 1366x768, Tablet = iPad (810x1080, 2x), Mobile = iPhone 15 Pro (393x659, 3x, Safari user agent), Android = Pixel 7 (412x839), Custom = the width and height below.",
            "items": {
              "type": "string",
              "enum": [
                "desktop",
                "laptop",
                "tablet",
                "mobile",
                "android",
                "custom"
              ],
              "enumTitles": [
                "Desktop (1920x1080)",
                "Laptop (1366x768)",
                "Tablet (iPad)",
                "Mobile (iPhone)",
                "Mobile (Android, Pixel 7)",
                "Custom size"
              ]
            },
            "default": [
              "desktop"
            ]
          },
          "customWidth": {
            "title": "Custom width",
            "minimum": 200,
            "maximum": 3840,
            "type": "integer",
            "description": "Viewport width in CSS pixels for the \"Custom size\" device.",
            "default": 1280
          },
          "customHeight": {
            "title": "Custom height",
            "minimum": 200,
            "maximum": 4320,
            "type": "integer",
            "description": "Viewport height in CSS pixels for the \"Custom size\" device (the visible area; full-page captures extend below it).",
            "default": 800
          },
          "deviceScaleFactor": {
            "title": "Pixel density (scale factor)",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Device pixel ratio. 0 = the device's own (1 for desktop/laptop/custom, 2 for iPad, 3 for iPhone). Use 2 for sharp \"retina\" desktop screenshots; higher values mean bigger files.",
            "default": 0
          },
          "output": {
            "title": "Output",
            "enum": [
              "screenshot",
              "pdf",
              "both"
            ],
            "type": "string",
            "description": "Screenshot image, PDF document, or both. A PDF is made once per URL (with the first device's browser settings), not once per device.",
            "default": "screenshot"
          },
          "fullPage": {
            "title": "Full page",
            "type": "boolean",
            "description": "Capture the whole scrollable page instead of just the visible viewport. Lazy-loaded images are triggered by scrolling first.",
            "default": false
          },
          "format": {
            "title": "Image format",
            "enum": [
              "png",
              "jpeg"
            ],
            "type": "string",
            "description": "PNG is lossless (crisp text, bigger files). JPEG is much smaller, good for long full-page captures.",
            "default": "png"
          },
          "jpegQuality": {
            "title": "JPEG quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1-100. Only used for JPEG.",
            "default": 80
          },
          "selector": {
            "title": "Element selector (capture one element)",
            "type": "string",
            "description": "Optional CSS selector, e.g. #pricing or .hero. If set, only the first visible matching element is captured (Full page is ignored). If nothing matches, that page fails and is not charged."
          },
          "maxFullPageHeight": {
            "title": "Max full-page height",
            "minimum": 1000,
            "maximum": 30000,
            "type": "integer",
            "description": "Full-page captures of very long or infinite-scroll pages are cut at this height (CSS pixels) to keep files reasonable.",
            "default": 15000
          },
          "pdfFormat": {
            "title": "PDF paper size",
            "enum": [
              "A4",
              "Letter",
              "Legal",
              "A3",
              "Tabloid"
            ],
            "type": "string",
            "description": "Paper size for PDF output.",
            "default": "A4"
          },
          "pdfLandscape": {
            "title": "PDF landscape",
            "type": "boolean",
            "description": "Landscape instead of portrait pages.",
            "default": false
          },
          "pdfPrintBackground": {
            "title": "PDF: print backgrounds",
            "type": "boolean",
            "description": "Include background colours and images, like the page looks on screen.",
            "default": true
          },
          "pdfMedia": {
            "title": "PDF: page styles",
            "enum": [
              "print",
              "screen"
            ],
            "type": "string",
            "description": "\"Print\" uses the site's print stylesheet, like Chrome's Save as PDF. \"Screen\" renders the page the way it looks in the browser.",
            "default": "print"
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle"
            ],
            "type": "string",
            "description": "When the page counts as loaded. \"Load\" suits most sites. \"Network idle\" waits until nothing has loaded for 0.5 s (max 15 s extra), useful for heavy JavaScript apps. \"DOM content loaded\" is fastest. If the page never gets there, it is captured anyway once the timeout runs out.",
            "default": "load"
          },
          "delayMs": {
            "title": "Extra delay before capture",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Wait this long after the page has loaded, e.g. for animations or charts to finish. 0 = no delay.",
            "default": 0
          },
          "waitForSelector": {
            "title": "Wait for selector",
            "type": "string",
            "description": "Optional CSS selector to wait for before capturing (up to 15 s), e.g. .product-grid. If it never appears, that page fails and is not charged."
          },
          "scrollToLoadLazyContent": {
            "title": "Scroll to load lazy images",
            "type": "boolean",
            "description": "Before full-page screenshots and PDFs, scroll through the page (max 10 s) so lazy-loaded images and sections appear.",
            "default": true
          },
          "navigationTimeoutSecs": {
            "title": "Navigation timeout",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for a page to load before giving up (or capturing what's there).",
            "default": 30
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Hide cookie/consent pop-ups (OneTrust, Cookiebot, Didomi, Quantcast, TrustArc, Usercentrics, Sourcepoint, CookieYes and many more, plus home-made banners) and unlock page scrolling. Nothing is clicked or accepted.",
            "default": true
          },
          "blockAds": {
            "title": "Block ads and trackers",
            "type": "boolean",
            "description": "Block requests to ~45 common ad, tracking and analytics domains (Google Ads/Tag Manager, Taboola, Outbrain, Criteo, Hotjar, ...). Cleaner and faster screenshots; rarely, a site depends on one of them.",
            "default": false
          },
          "hideSelectors": {
            "title": "Hide elements",
            "type": "array",
            "description": "CSS selectors of elements to remove before capture, e.g. chat widgets or sticky headers: #intercom-container, .newsletter-popup",
            "items": {
              "type": "string"
            }
          },
          "darkMode": {
            "title": "Dark mode",
            "type": "boolean",
            "description": "Tell the site the browser prefers a dark colour scheme (prefers-color-scheme: dark). Only sites that support dark mode change.",
            "default": false
          },
          "customCss": {
            "title": "Custom CSS",
            "type": "string",
            "description": "CSS injected into every page before capture, e.g. body { font-size: 18px !important; }"
          },
          "captureErrorPages": {
            "title": "Capture error pages (HTTP 4xx/5xx)",
            "type": "boolean",
            "description": "By default a page that returns an HTTP error (404, 500, 403...) is reported as failed and not charged. Turn this on to screenshot whatever the server shows instead (charged like any screenshot).",
            "default": false
          },
          "maxRetries": {
            "title": "Retries per page",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Retry a page this many times on timeouts, network errors, HTTP 429 or 5xx. Not-found, DNS and certificate errors are not retried.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Max parallel pages",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Upper limit on pages loaded at the same time. The Actor also scales this down to about one page per 512 MB of memory.",
            "default": 4
          },
          "maxUrls": {
            "title": "Max URLs",
            "minimum": 0,
            "type": "integer",
            "description": "Only capture the first this many URLs from the list (a safety limit). 0 = no limit.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed for most sites. Enable Apify Proxy if a site blocks Apify's servers (HTTP 403/429) or shows a different country's version. Datacenter proxy only: residential proxies are not supported (a rendered page downloads several MB, which residential traffic would make cost more than the screenshot); if you pick the Residential group, the Actor uses Apify datacenter proxy instead. Your own proxy URLs also work.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}