{
  "openapi": "3.0.1",
  "info": {
    "title": "SiteVerdict — Vendor Terms & Privacy Policy Change Monitor",
    "description": "Watch vendors' terms, privacy policies, DPAs and pricing pages. Each run diffs against the last snapshot and flags material changes (liability caps, AI training on your data, data sharing, price, arbitration) with before/after excerpts, HTML diffs and Slack/webhook alerts.",
    "version": "1.1",
    "x-build-id": "5NXRnx11AMIldzQld"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/siteverdict~siteverdict-vendor-terms-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-siteverdict-siteverdict-vendor-terms-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/siteverdict~siteverdict-vendor-terms-monitor/runs": {
      "post": {
        "operationId": "runs-sync-siteverdict-siteverdict-vendor-terms-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/siteverdict~siteverdict-vendor-terms-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-siteverdict-siteverdict-vendor-terms-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": {
          "targets": {
            "title": "Documents to monitor",
            "type": "array",
            "description": "One object per document: <code>{\"url\": \"https://…\", \"vendor\": \"Acme\", \"docType\": \"terms|privacy|dpa|pricing|aup|sla|other\", \"label\": \"Master subscription agreement\", \"selector\": \"main .legal\"}</code>. Only <code>url</code> is required; the vendor defaults to the domain and the document type is guessed from the URL. Optional <code>selector</code> is a CSS selector for the document body. Up to 200 documents per run."
          },
          "urls": {
            "title": "Simple URL list (optional)",
            "type": "array",
            "description": "Alternative to the JSON above: one URL per line. Combined with the documents above.",
            "items": {
              "type": "string"
            }
          },
          "sampleMode": {
            "title": "Sample mode (no network, free)",
            "type": "boolean",
            "description": "Runs on bundled fictional fixtures (terms, privacy notice and pricing page, version 1 → version 2) so you can see the diff, report and alerts without fetching anything. Nothing is charged.",
            "default": false
          },
          "stateStoreName": {
            "title": "Snapshot store name",
            "type": "string",
            "description": "Named key-value store holding the last snapshot of every document. Keep the same name across scheduled runs; use different names for separate watch-lists. Letters, digits and dashes.",
            "default": "siteverdict-vendor-terms"
          },
          "alertMinSeverity": {
            "title": "Alert on changes of at least",
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "type": "string",
            "description": "Minimum severity that triggers a Slack / webhook alert. Cosmetic changes (whitespace, punctuation, only the 'last updated' date) never alert.",
            "default": "medium"
          },
          "slackWebhookUrl": {
            "title": "Slack incoming webhook URL",
            "type": "string",
            "description": "Optional. HTTPS Slack incoming-webhook URL; one digest message per run listing documents that changed at or above the alert severity. Stored as a secret and never logged."
          },
          "webhookUrl": {
            "title": "Webhook URL (JSON POST)",
            "type": "string",
            "description": "Optional. HTTPS endpoint that receives one JSON digest per run (vendor, URL, severity, categories, summary, diff link). Stored as a secret and never logged."
          },
          "aiProvider": {
            "title": "AI summary (optional, your own key)",
            "enum": [
              "none",
              "anthropic",
              "openai"
            ],
            "type": "string",
            "description": "Adds a plain-English 'what changed and why it matters' summary to documents with material changes, using YOUR OWN Anthropic or OpenAI API key (billed by your provider). Off by default. Only the changed excerpts are sent to the provider.",
            "default": "none"
          },
          "aiApiKey": {
            "title": "AI provider API key",
            "type": "string",
            "description": "Your Anthropic or OpenAI API key. Stored as a secret, never logged or written to the output."
          },
          "aiModel": {
            "title": "AI model (optional)",
            "type": "string",
            "description": "Model ID. Defaults: claude-sonnet-5-5 (Anthropic) or gpt-4.1-mini (OpenAI)."
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Pages disallowed for our crawler are skipped (reported, not charged). Keep this on unless the page belongs to you.",
            "default": true
          },
          "outputUnchanged": {
            "title": "Output unchanged documents",
            "type": "boolean",
            "description": "When off, the dataset only contains documents that changed, new baselines and problems.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max parallel documents",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Documents fetched in parallel. Requests to the same host are always spaced at least 2 s apart.",
            "default": 3
          },
          "timeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time for one HTTP request (each redirect hop and retry has its own timeout).",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}