{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Change Monitor with Smart Diff",
    "description": "Watch any public page and get told only when something meaningful changes. Rotating banners, cookie popups, and timestamps are filtered out; a price or stock edit is caught however small it is.",
    "version": "0.1",
    "x-build-id": "xAfEUAaFVENQFxLBQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/al_mansouri~verified-website-change-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-al_mansouri-verified-website-change-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/al_mansouri~verified-website-change-monitor/runs": {
      "post": {
        "operationId": "runs-sync-al_mansouri-verified-website-change-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/al_mansouri~verified-website-change-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-al_mansouri-verified-website-change-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": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Pages to watch",
            "minItems": 1,
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "The public pages to check. The first run of each page stores a starting point and reports it as \"baseline\"; every run after that compares against it. Put the Actor on a schedule and leave it alone.",
            "items": {
              "type": "string",
              "pattern": "^https?://"
            }
          },
          "sensitivity": {
            "title": "How big a change has to be",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "type": "string",
            "description": "How much of a page's text must differ before it counts as a change. Price, discount, and in-stock edits always count regardless of this setting, because those are usually tiny and always matter.",
            "default": "medium"
          },
          "ignoreSelectors": {
            "title": "Parts of the page to ignore",
            "maxItems": 20,
            "type": "array",
            "description": "CSS selectors for regions you never want to hear about, for example \"nav\", \"footer\", or \".related-posts\". Cookie banners, carousels, ad slots, and timestamps are already ignored for you.",
            "items": {
              "type": "string",
              "maxLength": 512
            },
            "default": []
          },
          "watchSelectors": {
            "title": "Watch only these parts",
            "maxItems": 20,
            "type": "array",
            "description": "CSS selectors for the only regions that should be compared, for example \".price-box\". Everything outside them is ignored. Leave empty to watch the whole page. Changing this starts a fresh baseline, because the new region cannot be compared against the old one.",
            "items": {
              "type": "string",
              "maxLength": 512
            },
            "default": []
          },
          "stateStoreName": {
            "title": "Where to keep the baselines",
            "minLength": 1,
            "maxLength": 63,
            "type": "string",
            "description": "The named key-value store, on your own account, that remembers what each page looked like last time. Use a different name to run two independent watch lists that do not share history.",
            "default": "website-change-monitor-state"
          },
          "respectRobots": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip pages the site's robots.txt asks crawlers not to read. Turning this off means checking pages the owner asked not to be read, which is your decision and your responsibility.",
            "default": true
          },
          "useBrowser": {
            "title": "Render JavaScript",
            "type": "boolean",
            "description": "Open each page in a real browser instead of just downloading it. Needed for pages that build their content in the browser, which otherwise come back empty or very thin. Several times slower and more expensive per page, so it is off by default.",
            "default": false
          },
          "notifyWebhookUrl": {
            "title": "Send each change to this URL",
            "type": "string",
            "description": "If set, every change record is also POSTed here as JSON - a Slack or Discord endpoint, a Zapier or Make hook, or your own service. Only changes are sent, never the quiet checks. Public HTTPS addresses only.",
            "default": ""
          },
          "aiApiKey": {
            "title": "Your AI key, for plain-language summaries",
            "type": "string",
            "description": "Optional. With a key, each detected change also gets a one-sentence summary of what changed. An Anthropic key (starting sk-ant-) or an OpenAI key. Calls are billed to you by that provider, not by this Actor, and the key is never stored in a result."
          },
          "aiModel": {
            "title": "AI model",
            "type": "string",
            "description": "Which model to summarise with, for example claude-opus-5 or gpt-5.4. Leave empty to use the provider's flagship. Set a smaller model here if you would rather spend less per summary.",
            "default": ""
          },
          "aiSummaryLanguage": {
            "title": "Summary language",
            "type": "string",
            "description": "The language the summaries are written in, as a name or a code - for example en, ar, or Spanish. Arabic is fully supported. Only affects the AI summary; the rest of the result is language-neutral.",
            "default": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Some sites answer differently, or not at all, to repeated requests from a data centre. A proxy costs more per run but is read more like an ordinary visitor."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}