{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Change Monitor Pro – Visual Evidence",
    "description": "Monitor any public website for pricing, stock, content, SEO and visual changes. Get clear before-and-after values, a branded evidence report, focused screenshots for each detected visible change, severity scoring, noise suppression, and email, Slack or webhook alerts. No external AI key required.",
    "version": "0.0",
    "x-build-id": "qufQR9FxOj8oUwKM0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/systra_ai~systra-ai-website-change-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-systra_ai-systra-ai-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/systra_ai~systra-ai-website-change-monitor/runs": {
      "post": {
        "operationId": "runs-sync-systra_ai-systra-ai-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/systra_ai~systra-ai-website-change-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-systra_ai-systra-ai-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",
        "properties": {
          "startUrls": {
            "title": "Web pages",
            "type": "array",
            "description": "Public HTTP(S) pages to monitor. Authentication and private-network URLs are intentionally unsupported.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "mode": {
            "title": "What should be monitored?",
            "enum": [
              "auto",
              "text",
              "element",
              "price",
              "stock",
              "visual"
            ],
            "type": "string",
            "description": "Automatic detects visible copy plus headings, links, CTAs, images and page metadata. Text compares copy only. Element limits comprehensive comparison to a CSS selector. Price, Stock and Visual use specialized rules.",
            "default": "auto"
          },
          "selector": {
            "title": "CSS selector",
            "type": "string",
            "description": "Optional selector such as main, #price, or .product-card. Required for Element mode and strongly recommended for Price or Stock."
          },
          "renderJavaScript": {
            "title": "Render JavaScript",
            "type": "boolean",
            "description": "Use a real browser. Enable for client-rendered sites. Rendered checks use the higher rendered-page-check price event.",
            "default": false
          },
          "browserFallback": {
            "title": "Automatic browser fallback",
            "type": "boolean",
            "description": "If a cheap HTTP check finds too little text, retry with a browser. The successful browser result is billed as a rendered check.",
            "default": true
          },
          "monitors": {
            "title": "Advanced monitors",
            "type": "array",
            "description": "Objects support url, name, mode, selector, ignoreSelectors, ignorePatterns, renderJavaScript, browserFallback, and waitAfterLoadMs.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "title": "Page URL",
                  "type": "string",
                  "description": "Public HTTP(S) page to monitor."
                },
                "name": {
                  "title": "Monitor name",
                  "type": "string",
                  "description": "Optional human-readable label for this monitor."
                },
                "mode": {
                  "title": "Monitor mode",
                  "type": "string",
                  "description": "Choose whether to compare text, an element, price, stock availability, or a rendered screenshot.",
                  "enum": [
                    "auto",
                    "text",
                    "element",
                    "price",
                    "stock",
                    "visual"
                  ],
                  "enumTitles": [
                    "Automatic / page text",
                    "Page text",
                    "CSS-selected element",
                    "Price",
                    "Stock availability",
                    "Visual screenshot"
                  ]
                },
                "selector": {
                  "title": "CSS selector",
                  "type": "string",
                  "description": "Optional selector that limits extraction to a specific page element."
                },
                "ignoreSelectors": {
                  "title": "Ignored CSS selectors",
                  "type": "array",
                  "description": "Page elements removed before extraction and comparison.",
                  "items": {
                    "type": "string"
                  }
                },
                "ignorePatterns": {
                  "title": "Ignored text patterns",
                  "type": "array",
                  "description": "Regular expressions removed from extracted text before comparison.",
                  "items": {
                    "type": "string"
                  }
                },
                "renderJavaScript": {
                  "title": "Render JavaScript",
                  "type": "boolean",
                  "description": "Use a browser for this page instead of the lower-cost HTTP check."
                },
                "browserFallback": {
                  "title": "Automatic browser fallback",
                  "type": "boolean",
                  "description": "Retry with a browser when the HTTP response has too little useful content."
                },
                "waitAfterLoadMs": {
                  "title": "Browser settle time (ms)",
                  "type": "integer",
                  "description": "Extra time to wait for client-rendered content after the page DOM loads.",
                  "minimum": 0,
                  "maximum": 30000
                }
              }
            },
            "default": []
          },
          "ignoreSelectors": {
            "title": "CSS selectors to ignore",
            "type": "array",
            "description": "Examples: .cookie-banner, .live-clock, [data-ad].",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ignorePatterns": {
            "title": "Text patterns to ignore",
            "type": "array",
            "description": "Regular expressions removed before hashing, for example Updated at:.*$.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "captureOnChange": {
            "title": "Save change evidence",
            "type": "boolean",
            "description": "Save a branded evidence report, text, HTML, full-page captures, and focused before/after/difference screenshots. Baseline or changed HTTP checks may use a browser and the rendered-page-check event to produce screenshot evidence.",
            "default": true
          },
          "fullPageScreenshot": {
            "title": "Full-page screenshots",
            "type": "boolean",
            "description": "Capture the full rendered page up to the safety height limit. Focused change screenshots are generated separately when the changed element can be located.",
            "default": true
          },
          "viewportWidth": {
            "title": "Browser width",
            "minimum": 320,
            "maximum": 2560,
            "type": "integer",
            "description": "Viewport width in pixels for rendered checks and screenshots.",
            "default": 1440
          },
          "viewportHeight": {
            "title": "Browser height",
            "minimum": 240,
            "maximum": 2160,
            "type": "integer",
            "description": "Viewport height in pixels for rendered checks and screenshots.",
            "default": 900
          },
          "maxScreenshotHeight": {
            "title": "Maximum screenshot height",
            "minimum": 500,
            "maximum": 20000,
            "type": "integer",
            "description": "Maximum captured page height in pixels to control memory usage on unusually long pages.",
            "default": 20000
          },
          "waitAfterLoadMs": {
            "title": "Browser settle time (ms)",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Extra wait after DOM load for client-rendered content.",
            "default": 1500
          },
          "stateStoreName": {
            "title": "State store name",
            "pattern": "^[A-Za-z0-9._~-]{1,63}$",
            "type": "string",
            "description": "Named key-value store used for rolling baselines.",
            "default": "systra-website-monitor-state"
          },
          "stateNamespace": {
            "title": "State namespace",
            "type": "string",
            "description": "Change this to maintain an independent baseline set with the same URLs.",
            "default": "default"
          },
          "alertCommercialChanges": {
            "title": "Alert on commercial changes",
            "type": "boolean",
            "description": "Notify for price, offer, and other commercially classified changes.",
            "default": true
          },
          "alertAvailabilityChanges": {
            "title": "Alert on availability changes",
            "type": "boolean",
            "description": "Notify when stock or availability changes.",
            "default": true
          },
          "alertSeoChanges": {
            "title": "Alert on SEO changes",
            "type": "boolean",
            "description": "Notify for title, description, canonical, robots, Open Graph, language, and other metadata changes.",
            "default": true
          },
          "alertHighImpactChanges": {
            "title": "Alert on high-impact changes",
            "type": "boolean",
            "description": "Notify when change count or text/visual change percentage reaches the configured high-impact threshold.",
            "default": true
          },
          "alertOtherChanges": {
            "title": "Alert on all other changes",
            "type": "boolean",
            "description": "Also notify for content, navigation, media, visual, and technical changes that do not match another enabled rule.",
            "default": false
          },
          "highImpactChangeCount": {
            "title": "High-impact change count",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Treat a result as high impact when it contains at least this many classified changes.",
            "default": 3
          },
          "highImpactPercent": {
            "title": "High-impact change percentage",
            "minimum": 0.1,
            "maximum": 100,
            "type": "number",
            "description": "Treat a result as high impact when text, focused visual, or full visual change reaches this percentage.",
            "default": 5
          },
          "minimumAlertSeverity": {
            "title": "Minimum alert severity",
            "enum": [
              "info",
              "low",
              "medium",
              "high",
              "critical"
            ],
            "type": "string",
            "description": "Suppress notifications below this severity while retaining every detected result for audit.",
            "default": "medium"
          },
          "suppressLikelyNoise": {
            "title": "Suppress likely dynamic noise",
            "type": "boolean",
            "description": "Do not notify for timestamp, counter, identifier, and similar volatile-content changes. Suppressed results remain visible in the dataset.",
            "default": true
          },
          "notificationEmails": {
            "title": "Email recipients",
            "type": "string",
            "description": "Optional comma-separated list of 1–20 recipients for branded email alerts. Apify account and Send Mail Actor limits apply."
          },
          "slackWebhookUrl": {
            "title": "Slack incoming webhook URL",
            "type": "string",
            "description": "Optional Slack incoming webhook for structured SYSTRA alerts with an evidence-report button."
          },
          "webhookUrl": {
            "title": "Custom webhook URL",
            "type": "string",
            "description": "Optional public HTTPS endpoint notified with the complete result after alert rules and severity filtering pass."
          },
          "webhookSecret": {
            "title": "Custom webhook signing secret",
            "type": "string",
            "description": "Optional secret used to create the X-Systra-Signature HMAC-SHA256 header. Use at least 8 characters."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional Apify Proxy configuration for websites that restrict direct data-center traffic.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Keep low for browser-heavy runs.",
            "default": 3
          },
          "timeoutSecs": {
            "title": "Page timeout (seconds)",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "Maximum time allowed for each HTTP request or browser navigation.",
            "default": 45
          },
          "maxBodyBytes": {
            "title": "Maximum HTTP response bytes",
            "minimum": 100000,
            "maximum": 10000000,
            "type": "integer",
            "description": "Safety cap for non-browser downloads.",
            "default": 3000000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}