{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot & Visual Change Monitor — Full Page, Mobile",
    "description": "Website screenshots in bulk, $2 per 1,000: full page or one element, desktop, tablet or mobile, PNG or JPEG, cookie banners hidden. Run it again and each page is compared with last time: changed percent and a diff image with the changed pixels in red. Respects robots.txt.",
    "version": "0.1",
    "x-build-id": "zNcdpUVWYbTkaab7x"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/northbell~website-screenshot-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-northbell-website-screenshot-monitor",
        "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/northbell~website-screenshot-monitor/runs": {
      "post": {
        "operationId": "runs-sync-northbell-website-screenshot-monitor",
        "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/northbell~website-screenshot-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-northbell-website-screenshot-monitor",
        "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": "Web addresses",
            "type": "array",
            "description": "One web address per line, for example https://apify.com. \"example.com\" works too (https:// is added). Up to 500 per run. Each page becomes one PNG or JPEG image in the run's key-value store, with its link in the dataset row.",
            "items": {
              "type": "string"
            }
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "laptop",
              "wide",
              "tablet",
              "mobile",
              "custom"
            ],
            "type": "string",
            "description": "The screen the page is opened on. Desktop is 1280x800, Laptop 1440x900, Wide 1920x1080, Tablet an iPad (820x1180 at 2x) and Mobile an iPhone (390x844 at 2x, with the phone's browser name so sites send their mobile page). Custom uses the width and height below.",
            "default": "desktop"
          },
          "fullPage": {
            "title": "Full page",
            "type": "boolean",
            "description": "On: the whole page from top to bottom (up to 16,000 pixels tall; taller pages are cut there and the row says truncated: true). Off: only what fits on the screen.",
            "default": true
          },
          "selector": {
            "title": "Only this element (CSS selector)",
            "type": "string",
            "description": "Capture one part of the page instead, for example header, #pricing or .product-card. The first match is captured. Leave empty for the page."
          },
          "format": {
            "title": "Image format",
            "enum": [
              "png",
              "jpeg"
            ],
            "type": "string",
            "description": "PNG keeps text sharp. JPEG files are several times smaller for long pages with photos.",
            "default": "png"
          },
          "quality": {
            "title": "JPEG quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1 to 100. Only used for JPEG.",
            "default": 80
          },
          "compareWithLastRun": {
            "title": "Compare with the last run",
            "type": "boolean",
            "description": "On: each page is compared with its capture from your previous run (same address, device and size), and the row gets changeStatus (new, changed or unchanged), changedPercent and, when it changed, a diff image with the changed pixels in red. Turn it off for one-off captures.",
            "default": true
          },
          "changedOnly": {
            "title": "Return only new and changed pages",
            "type": "boolean",
            "description": "For a scheduled monitor: pages that look the same as last time are left out of the dataset and are not charged. Their capture is still kept for the next comparison.",
            "default": false
          },
          "changeThresholdPercent": {
            "title": "Change threshold (%)",
            "type": "string",
            "description": "A page counts as changed when more than this share of its pixels differs, for example 0.1 (the default) or 2 to ignore small things like a clock or a rotating banner. 0 counts any difference.",
            "default": "0.1"
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Hides the common consent pop-ups (OneTrust, Cookiebot, Usercentrics, Didomi, Quantcast and others) before capturing. Nothing is clicked or accepted.",
            "default": true
          },
          "hideSelectors": {
            "title": "Also hide these elements",
            "type": "array",
            "description": "CSS selectors to hide before capturing, one per line, for example a chat widget (#intercom-container) or a live ticker that would make every run look changed.",
            "items": {
              "type": "string"
            }
          },
          "darkMode": {
            "title": "Dark mode",
            "type": "boolean",
            "description": "Asks the page for its dark colour scheme (sites that support it).",
            "default": false
          },
          "scrollToBottom": {
            "title": "Scroll down first",
            "type": "boolean",
            "description": "For full-page captures: scrolls to the bottom and back (at most 8 seconds) so images that load on scroll are shown.",
            "default": true
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle"
            ],
            "type": "string",
            "description": "When the page counts as ready to capture.",
            "default": "load"
          },
          "delaySeconds": {
            "title": "Extra wait (seconds)",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Waits this long after the page is ready, for animations or late content. 0 to 30.",
            "default": 0
          },
          "timeoutSeconds": {
            "title": "Page timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "The longest wait for a page. When it runs out, whatever has been drawn is captured and the row says loadTimedOut: true.",
            "default": 45
          },
          "width": {
            "title": "Custom width (pixels)",
            "minimum": 320,
            "maximum": 3840,
            "type": "integer",
            "description": "Only with Device = Custom size. 320 to 3840."
          },
          "height": {
            "title": "Custom height (pixels)",
            "minimum": 320,
            "maximum": 4000,
            "type": "integer",
            "description": "Only with Device = Custom size: the screen height (a full-page capture is taller). 320 to 4000."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}