{
  "openapi": "3.0.1",
  "info": {
    "title": "SaaS Vendor Watch: Status Pages, Incidents, Changelog & Pricing",
    "description": "Watch SaaS vendors' public status pages: current status, components, active and recent incidents with durations, maintenance. Type slack or github (100 built in) or a domain. Optional changelog and pricing page change tracking. Only-changes mode for alerts.",
    "version": "0.1",
    "x-build-id": "xAc6ZPxtWQyeHbOr9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalloom~saas-vendor-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalloom-saas-vendor-watch",
        "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/signalloom~saas-vendor-watch/runs": {
      "post": {
        "operationId": "runs-sync-signalloom-saas-vendor-watch",
        "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/signalloom~saas-vendor-watch/run-sync": {
      "post": {
        "operationId": "run-sync-signalloom-saas-vendor-watch",
        "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": [
          "vendors"
        ],
        "properties": {
          "vendors": {
            "title": "Vendors",
            "type": "array",
            "description": "One per line: a name from the built-in list of 100 (e.g. slack, github, openai, notion, zoom), a company domain (acme.com) or a status page URL (https://status.acme.com). For other names the tool tries status.<name>.com and the status link on the homepage.",
            "items": {
              "type": "string"
            }
          },
          "incidentDays": {
            "title": "Incident history (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Recent incidents and incident stats cover this many days back. Status pages publish about their last 50 incidents, so long windows are limited by that.",
            "default": 30
          },
          "maxIncidents": {
            "title": "Max recent incidents per vendor",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many resolved incidents to list per vendor, newest first. Active incidents are always listed. The stats count all incidents in the window.",
            "default": 10
          },
          "includeComponents": {
            "title": "Include component list",
            "type": "boolean",
            "description": "List every component (service) with its status. Components that are not operational are always listed in componentsNotOperational.",
            "default": true
          },
          "maxComponents": {
            "title": "Max components per vendor",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on the component list (Cloudflare alone has about 480 data-center components).",
            "default": 50
          },
          "includeMaintenance": {
            "title": "Include scheduled maintenance",
            "type": "boolean",
            "description": "List upcoming and in-progress scheduled maintenance.",
            "default": true
          },
          "watchChangelog": {
            "title": "Watch changelog / release notes",
            "type": "boolean",
            "description": "Find each vendor's changelog link on its homepage (or use Changelog URLs) and report new entries since the last run. Uses an RSS/Atom feed when the page links one.",
            "default": false
          },
          "changelogUrls": {
            "title": "Changelog URLs",
            "type": "array",
            "description": "Optional. One per line, either 'vendor | URL' (e.g. 'github | https://github.blog/changelog/') or a bare URL matched to a vendor by domain. A URL here turns on changelog watching for that vendor.",
            "items": {
              "type": "string"
            }
          },
          "watchPricing": {
            "title": "Watch pricing page",
            "type": "boolean",
            "description": "Find each vendor's pricing link on its homepage (or use Pricing URLs) and report price and text changes since the last run. Pages that load prices with JavaScript can't be read; the record says so.",
            "default": false
          },
          "pricingUrls": {
            "title": "Pricing URLs",
            "type": "array",
            "description": "Optional. One per line, 'vendor | URL' or a bare URL matched to a vendor by domain. A URL here turns on pricing watching for that vendor.",
            "items": {
              "type": "string"
            }
          },
          "onlyChanges": {
            "title": "Only changes (alert mode)",
            "type": "boolean",
            "description": "Output one record per change since the last run with the same Monitor ID: new, resolved or escalated incidents, status changes, new maintenance, new changelog entries, pricing changes. The first run is a baseline and reports only incidents ongoing right now. For scheduled runs and n8n / Zapier / Make alerts.",
            "default": false
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "Name for the saved state used to detect changes. Use a different ID for each saved task or schedule.",
            "default": "default"
          },
          "maxRunSeconds": {
            "title": "Time budget (seconds)",
            "minimum": 30,
            "maximum": 3000,
            "type": "integer",
            "description": "Stop starting new vendors after this many seconds; vendors not reached are listed with an error.",
            "default": 240
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}