{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot & PDF: Full Page, Element, Mobile, Bulk",
    "description": "Capture websites in bulk as full-page PNG or JPEG screenshots or PDFs in real Chrome. Shoot one element by CSS selector, use mobile or tablet views, dark mode, hide cookie banners and wait for content. Get a link to every file. Failed pages are free.",
    "version": "0.0",
    "x-build-id": "96MYNSuo9ChgDENjB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/charlesmarkette~website-screenshot-pdf-full-page-element-bulk/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-charlesmarkette-website-screenshot-pdf-full-page-element-bulk",
        "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/charlesmarkette~website-screenshot-pdf-full-page-element-bulk/runs": {
      "post": {
        "operationId": "runs-sync-charlesmarkette-website-screenshot-pdf-full-page-element-bulk",
        "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/charlesmarkette~website-screenshot-pdf-full-page-element-bulk/run-sync": {
      "post": {
        "operationId": "run-sync-charlesmarkette-website-screenshot-pdf-full-page-element-bulk",
        "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": "Pages to capture, one per line. Bare domains (example.com) get https://. In JSON you can also pass objects: {\"url\": \"https://example.com\", \"label\": \"Home\", \"selector\": \"#pricing\"} to name a row or capture one element of that page only.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset with URLs",
            "type": "string",
            "description": "Optional. Capture the URL in each item of a dataset (for example from a scraper or sitemap run). Use {{resource.defaultDatasetId}} in an integration."
          },
          "urlField": {
            "title": "URL field",
            "type": "string",
            "description": "The item field that holds the URL. Dotted paths work (page.url). Default: url.",
            "default": "url"
          },
          "keepItemFields": {
            "title": "Keep the item's original fields",
            "type": "boolean",
            "description": "On: each output row is the dataset item plus the screenshot columns. Off: only the screenshot columns.",
            "default": true
          },
          "format": {
            "title": "Format",
            "enum": [
              "png",
              "jpeg",
              "pdf"
            ],
            "type": "string",
            "description": "PNG (sharp, lossless), JPEG (smaller files) or PDF (printed like Chrome's 'Save as PDF', with selectable text).",
            "default": "png"
          },
          "fullPage": {
            "title": "Full page",
            "type": "boolean",
            "description": "On: the whole scrollable page (cut at 16,384 px tall; such rows get truncated: true). Off: only the visible viewport. Not used for PDF.",
            "default": true
          },
          "selector": {
            "title": "Only this element (CSS selector)",
            "type": "string",
            "description": "Optional. Capture just the first element matching this CSS selector, for example #pricing or .hero. A page without a match gets a free row with error selectorNotFound. Images only (not PDF)."
          },
          "jpegQuality": {
            "title": "JPEG quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1–100. Only used for JPEG.",
            "default": 80
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "mobile",
              "tablet"
            ],
            "type": "string",
            "description": "Desktop uses the viewport size below. Mobile is 390×844 at 3× (touch, mobile user agent). Tablet is 820×1180 at 2×.",
            "default": "desktop"
          },
          "viewportWidth": {
            "title": "Viewport width (desktop)",
            "minimum": 320,
            "maximum": 3840,
            "type": "integer",
            "description": "Browser window width in CSS pixels, 320–3840.",
            "default": 1280
          },
          "viewportHeight": {
            "title": "Viewport height (desktop)",
            "minimum": 240,
            "maximum": 4320,
            "type": "integer",
            "description": "Browser window height in CSS pixels, 240–4320. This is the screenshot height when Full page is off.",
            "default": 800
          },
          "deviceScaleFactor": {
            "title": "Device scale factor",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Optional. Pixel density, 1–4: 2 gives retina-sharp images twice as wide and tall. Overrides the device preset's value (mobile 3, tablet 2, desktop 1)."
          },
          "darkMode": {
            "title": "Dark mode",
            "type": "boolean",
            "description": "Tell the page the system prefers a dark colour scheme (prefers-color-scheme: dark). Only sites that support dark mode change.",
            "default": false
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle"
            ],
            "type": "string",
            "description": "When the page counts as loaded. 'load' suits most sites; 'networkidle' waits until there is no network traffic for 0.5 s (good for dashboards, can be slow); 'domcontentloaded' is fastest. If the moment never comes within the navigation timeout, the page is still captured and the row gets navigationTimedOut: true.",
            "default": "load"
          },
          "waitForSelector": {
            "title": "Wait for element (CSS selector)",
            "type": "string",
            "description": "Optional. Wait until an element matching this selector is visible before capturing. Pages where it never appears get a free row with error waitForSelectorTimeout."
          },
          "delayMs": {
            "title": "Extra delay (ms)",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Extra wait before capturing, for animations and late content. 0–30000.",
            "default": 500
          },
          "scrollToLoad": {
            "title": "Scroll to load lazy images",
            "type": "boolean",
            "description": "Scroll down the page in steps before capturing so lazy-loaded images appear, then scroll back to the top. Capped at 40 steps. Used for full-page, element and PDF captures.",
            "default": true
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Hide common cookie and consent pop-ups (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast and others) with CSS. Nothing is clicked, so no consent is given. Best effort: unknown banners stay visible.",
            "default": true
          },
          "hideSelectors": {
            "title": "Hide elements (CSS selectors)",
            "type": "array",
            "description": "Optional. Elements to make invisible before capturing, for example chat widgets or ads: #intercom-container, .ad-slot. Their space is kept, so the layout doesn't move.",
            "items": {
              "type": "string"
            }
          },
          "blockMedia": {
            "title": "Block video and audio",
            "type": "boolean",
            "description": "Don't download video and audio files. Faster pages with autoplay videos; the player area may show as empty.",
            "default": false
          },
          "pdfPaperFormat": {
            "title": "PDF paper size",
            "enum": [
              "A4",
              "Letter"
            ],
            "type": "string",
            "description": "Only used for PDF.",
            "default": "A4"
          },
          "pdfPrintBackground": {
            "title": "Print backgrounds in PDF",
            "type": "boolean",
            "description": "Include background colours and images in the PDF.",
            "default": true
          },
          "concurrency": {
            "title": "Pages in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many pages to load at the same time in the browser (1–10). Each extra page needs more memory; heavy sites need more than simple ones. If pages crash, lower this or raise the run's memory.",
            "default": 3
          },
          "navigationTimeoutSecs": {
            "title": "Navigation timeout (seconds)",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for a page to respond and load (5–180). Each URL as a whole (loading, waits and capture) gets at most twice this plus the extra delay and 60 seconds.",
            "default": 45
          },
          "maxResults": {
            "title": "Max output rows",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap on output rows (each row is one URL)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}