{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Change Monitor & Diff API",
    "description": "Track website and API changes automatically. Detect meaningful text, HTML, regex, JSON, redirect, status, outage, and recovery changes with persistent baselines and structured diffs. Ideal for price monitoring, competitor tracking, compliance checks, and automation workflows.",
    "version": "0.1",
    "x-build-id": "T3p25W6C3R0MUGdVP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/craigtechservicesllc~website-change-monitor-diff-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-craigtechservicesllc-website-change-monitor-diff-api",
        "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/craigtechservicesllc~website-change-monitor-diff-api/runs": {
      "post": {
        "operationId": "runs-sync-craigtechservicesllc-website-change-monitor-diff-api",
        "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/craigtechservicesllc~website-change-monitor-diff-api/run-sync": {
      "post": {
        "operationId": "run-sync-craigtechservicesllc-website-change-monitor-diff-api",
        "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": {
          "monitors": {
            "title": "URLs to monitor",
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "description": "Each item is an independent monitor. Give repeated URLs unique IDs if you want to watch them in different ways.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "url"
              ],
              "properties": {
                "id": {
                  "title": "Monitor ID",
                  "type": "string",
                  "description": "Optional stable label such as competitor-pricing. Required only when the same URL is monitored more than once.",
                  "editor": "textfield",
                  "minLength": 1,
                  "maxLength": 120
                },
                "url": {
                  "title": "URL",
                  "type": "string",
                  "description": "Public http:// or https:// page or JSON endpoint. Private, loopback, link-local, and reserved network destinations are blocked.",
                  "editor": "textfield",
                  "pattern": "^https?://.+"
                },
                "mode": {
                  "title": "Comparison mode",
                  "type": "string",
                  "description": "text removes markup and script/style noise; html compares returned markup; regex compares extracted matches; json compares stable JSON or a JSON Pointer; status watches availability/status only.",
                  "editor": "select",
                  "enum": [
                    "text",
                    "html",
                    "regex",
                    "json",
                    "status"
                  ],
                  "default": "text"
                },
                "extractRegex": {
                  "title": "Extraction regex",
                  "type": "string",
                  "description": "Required for regex mode. If the expression has a capture group, group 1 is compared; otherwise the whole match is compared. Example price pattern: \\$([0-9,.]+)",
                  "editor": "textfield"
                },
                "regexFlags": {
                  "title": "Extraction regex flags",
                  "type": "string",
                  "description": "JavaScript regex flags. Global matching is added automatically if omitted.",
                  "editor": "textfield",
                  "default": "gi",
                  "pattern": "^[dgimsuvy]*$"
                },
                "jsonPointer": {
                  "title": "JSON Pointer",
                  "type": "string",
                  "description": "Optional RFC 6901 pointer for JSON mode, for example /product/price. Leave empty to compare the entire JSON response.",
                  "editor": "textfield",
                  "default": ""
                },
                "ignorePatterns": {
                  "title": "Ignore regex patterns",
                  "type": "array",
                  "description": "Remove known dynamic text before comparison, such as timestamps, rotating IDs, counters, or session values.",
                  "editor": "stringList",
                  "maxItems": 10,
                  "default": [],
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "ignoreRegexFlags": {
                  "title": "Ignore regex flags",
                  "type": "string",
                  "description": "JavaScript flags used for ignore patterns.",
                  "editor": "textfield",
                  "default": "gi",
                  "pattern": "^[dgimsuvy]*$"
                },
                "collapseWhitespace": {
                  "title": "Normalize whitespace",
                  "type": "boolean",
                  "description": "Ignore differences caused only by repeated spaces and line-ending formatting.",
                  "editor": "checkbox",
                  "default": true
                },
                "caseSensitive": {
                  "title": "Case-sensitive comparison",
                  "type": "boolean",
                  "description": "When disabled, capitalization-only changes are ignored.",
                  "editor": "checkbox",
                  "default": true
                },
                "previewChars": {
                  "title": "Preview length",
                  "type": "integer",
                  "description": "Maximum characters shown in current/previous previews and diff snippets. Full monitored content is not written to the result dataset.",
                  "editor": "number",
                  "minimum": 50,
                  "maximum": 2000,
                  "default": 500
                },
                "maxMatches": {
                  "title": "Maximum regex matches",
                  "type": "integer",
                  "description": "Maximum extracted values retained for regex mode.",
                  "editor": "number",
                  "minimum": 1,
                  "maximum": 500,
                  "default": 100
                }
              }
            },
            "default": [
              {
                "id": "example-homepage",
                "url": "https://example.com/",
                "mode": "text"
              }
            ]
          },
          "stateNamespace": {
            "title": "State namespace",
            "pattern": "^[A-Za-z0-9._-]{1,80}$",
            "type": "string",
            "description": "Separates one monitoring workflow from another. Use a different value for separate Tasks that might monitor the same URL.",
            "default": "default"
          },
          "globalIgnorePatterns": {
            "title": "Global ignore regex patterns",
            "maxItems": 10,
            "type": "array",
            "description": "Dynamic patterns removed from every monitored value before comparison.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 3,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time allowed for each request attempt.",
            "default": 20
          },
          "maxRetries": {
            "title": "Retries",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Retries for transient network errors, 408/425/429, and common 5xx responses.",
            "default": 1
          },
          "maxRedirects": {
            "title": "Maximum redirects",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum validated redirect hops per check.",
            "default": 5
          },
          "maxResponseBytes": {
            "title": "Maximum response bytes",
            "minimum": 10000,
            "maximum": 1500000,
            "type": "integer",
            "description": "Safety cap on downloaded response size for each page check.",
            "default": 1000000
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Number of monitors checked in parallel. Lower this for sensitive websites or very large pages.",
            "default": 8
          },
          "resetBaseline": {
            "title": "Reset baselines",
            "type": "boolean",
            "description": "Delete the matching stored baselines before this run. The current values become new baselines and changed=false.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}