{
  "openapi": "3.0.1",
  "info": {
    "title": "Full Page Screenshot API for Lazy-Loaded Pages",
    "description": "Full page screenshot API with a completeness check: it scrolls each page so lazy-loaded sections appear, finds blank bands in the image, repairs them and scores the result from 0 to 100. A page it cannot capture costs nothing.",
    "version": "0.1",
    "x-build-id": "WNl1WPAG1rZyykIlO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lone_rachis~full-page-website-screenshot/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lone_rachis-full-page-website-screenshot",
        "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/lone_rachis~full-page-website-screenshot/runs": {
      "post": {
        "operationId": "runs-sync-lone_rachis-full-page-website-screenshot",
        "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/lone_rachis~full-page-website-screenshot/run-sync": {
      "post": {
        "operationId": "run-sync-lone_rachis-full-page-website-screenshot",
        "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": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Page URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "Public web pages to capture, one screenshot per URL. Add them one by one, or paste a list with Bulk edit, one URL per line. Links to text files are not supported: paste the URLs instead. One run takes at most 1,000 URLs. Repeated addresses are captured once and listed as duplicates.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "fullPage": {
            "title": "Capture the full page",
            "type": "boolean",
            "description": "Capture the whole page from top to bottom. Turn it off to capture only the first screen at the viewport height.",
            "default": true
          },
          "format": {
            "title": "Image format",
            "enum": [
              "png",
              "jpeg",
              "webp"
            ],
            "type": "string",
            "description": "File type of each screenshot. PNG is lossless and the largest. JPEG and WebP are usually several times smaller on photo-heavy pages and use the quality setting below.",
            "default": "png"
          },
          "quality": {
            "title": "JPEG and WebP quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Image quality from 1 to 100 for JPEG and WebP. Ignored for PNG.",
            "default": 80
          },
          "viewportWidth": {
            "title": "Viewport width",
            "minimum": 320,
            "maximum": 3840,
            "type": "integer",
            "description": "Width of the browser window in CSS pixels. The screenshot is this wide, multiplied by the pixel ratio.",
            "default": 1280
          },
          "viewportHeight": {
            "title": "Viewport height",
            "minimum": 200,
            "maximum": 2400,
            "type": "integer",
            "description": "Height of the browser window in CSS pixels. Sets the page layout for viewport-sized sections and the height of a first-screen capture.",
            "default": 800
          },
          "deviceScaleFactor": {
            "title": "Pixel ratio",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Device pixel ratio. Use 2 for sharp retina images. The image gets 2 times wider and taller, and the run needs more memory and time.",
            "default": 1
          },
          "mobile": {
            "title": "Emulate a phone",
            "type": "boolean",
            "description": "Load the page as a mobile browser with touch input. Pair it with a viewport width of 390 to 430 px.",
            "default": false
          },
          "colorScheme": {
            "title": "Color scheme",
            "enum": [
              "light",
              "dark"
            ],
            "type": "string",
            "description": "Light or dark appearance. Sites that follow the browser setting switch to their dark theme.",
            "default": "light"
          },
          "captureStrategy": {
            "title": "Capture strategy",
            "enum": [
              "auto",
              "simple"
            ],
            "type": "string",
            "description": "Auto scrolls the page so lazy images and scroll animations load, then takes the full-page image. Simple takes one plain full-page shot and is faster, but long pages can come out with blank areas.",
            "default": "auto"
          },
          "verifyCompleteness": {
            "title": "Check for blank areas",
            "type": "boolean",
            "description": "Scan each image for tall blank bands and give it a completeness score from 0 to 100. Works with the auto strategy.",
            "default": true
          },
          "repairBlankAreas": {
            "title": "Repair blank areas",
            "type": "boolean",
            "description": "Scroll back to each blank band, take a fresh viewport shot and paste it into the image. Needs the completeness check.",
            "default": true
          },
          "blankAreaThresholdPx": {
            "title": "Smallest blank band",
            "minimum": 200,
            "maximum": 5000,
            "type": "integer",
            "description": "A blank band counts only when it is at least this tall. Raise it if the page has large solid-color sections on purpose.",
            "default": 500
          },
          "scrollDelayMs": {
            "title": "Pause between scroll steps",
            "minimum": 50,
            "maximum": 2000,
            "type": "integer",
            "description": "Time to wait at each scroll step so lazy content can load. Raise it for slow sites. Lower values run faster.",
            "default": 160
          },
          "waitUntil": {
            "title": "Page is ready when",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle"
            ],
            "type": "string",
            "description": "Which browser event ends the page load before the scroll step starts. The load event suits most pages. Network idle waits longer and can time out on pages that never stop loading.",
            "default": "load"
          },
          "waitForSelector": {
            "title": "Wait for element",
            "type": "string",
            "description": "Optional CSS selector, such as #main or .hero-image. The capture waits up to 15 seconds for it to appear. Leave empty to skip.",
            "default": ""
          },
          "extraDelayMs": {
            "title": "Extra wait before capture",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Fixed pause in milliseconds after the page is loaded and scrolled, for intros and animations that need a moment to finish.",
            "default": 0
          },
          "maxPageHeight": {
            "title": "Maximum page height",
            "minimum": 1000,
            "maximum": 60000,
            "type": "integer",
            "description": "Tallest image to produce in CSS pixels. Longer pages are cut at this height and flagged. Endless feeds stop here. At a high pixel ratio the cut can come earlier, at about 100 million pixels per image.",
            "default": 20000
          },
          "captureErrorPages": {
            "title": "Capture error pages",
            "type": "boolean",
            "description": "Take a screenshot even when the page answers with an HTTP error such as 404 or 500. Off by default, so a mistyped URL is reported as failed and is not charged.",
            "default": false
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Hide common cookie consent banners and overlays from well-known consent tools so they do not cover the page.",
            "default": true
          },
          "hideSelectors": {
            "title": "Hide elements",
            "type": "array",
            "description": "CSS selectors of elements to hide before the capture, for example a chat widget or a sticky promo bar.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "freezeAnimations": {
            "title": "Freeze animations",
            "type": "boolean",
            "description": "Stop CSS animations and transitions at their end state, so the image does not catch a half-finished motion.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Pages at the same time",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many pages to capture in parallel, from 1 to 10. Every parallel page opens its own browser tab and needs extra memory and processor time, so raise the Actor memory when you raise this: the Actor holds the number to the memory of the run divided by 1 GB. The default of 1 suits the default 4096 MB, which is one CPU core: several heavy pages on one core are slower than one after the other.",
            "default": 1
          },
          "timeoutSecs": {
            "title": "Time limit per page",
            "minimum": 30,
            "maximum": 600,
            "type": "integer",
            "description": "Longest time to spend on capturing one page, in seconds: scrolling, waiting for images and repair. Loading the page has its own limit of 60% of this value, at most 90 seconds, and the browser library adds 10 seconds, so one attempt can take up to 250 seconds at the default. A page that runs out of time is not retried and is not charged. After 5 pages in a row run out of time, in the loading or in the capture, the run stops and lists the rest as skipped.",
            "default": 150
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Apify Proxy with data center addresses only. Residential proxies and your own proxies are not accepted, and the run stops with a message if you pick one. Proxy traffic is included in the price per screenshot."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}