{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk HTTP Status Checker: Redirects, SSL Expiry and Run Changes",
    "description": "Bulk HTTP status checker and uptime monitor for URL lists, sitemaps or page links. Returns final status, every redirect hop, DNS, TLS and first-byte timing, SSL expiry and soft 404 flags per URL, plus a change feed of newly broken, recovered and slower pages between runs. Pay per result.",
    "version": "0.2",
    "x-build-id": "NWX9LDrZkA9gbFDxf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~http-status-intelligence-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-http-status-intelligence-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/getascraper~http-status-intelligence-monitor/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-http-status-intelligence-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/getascraper~http-status-intelligence-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-http-status-intelligence-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": "URLs to check",
            "type": "array",
            "description": "The web addresses to check. Paste them one by one, upload a text or CSV file, or link to a list online. Bare domains such as example.com work too. Only public http and https addresses are checked. Advanced: add expectedStatus, expectedFirstStatus or expectedFinalUrl under 'User data' to check a rule for one address only.",
            "default": [
              {
                "url": "http://github.com"
              },
              {
                "url": "https://example.com"
              },
              {
                "url": "https://example.com/this-page-does-not-exist"
              },
              {
                "url": "https://www.iana.org/"
              },
              {
                "url": "https://www.wikipedia.org/"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sourceMode": {
            "title": "Where the addresses come from",
            "enum": [
              "urls",
              "sitemap",
              "pageLinks"
            ],
            "type": "string",
            "description": "Check exactly the addresses you listed, read them out of a sitemap (give the sitemap address, or just the site's home page and the sitemap is found for you), or open the listed pages and check every link found on them.",
            "default": "urls"
          },
          "redirectExpectations": {
            "title": "Redirect map",
            "type": "array",
            "description": "Optional. Tests a list of redirects, for example after a site move. On the left, the old address. On the right, the address it must end up at. Use a path such as /new-page to stay on the same site. Mismatches are reported as problems.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "key",
                "value"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "title": "Key"
                },
                "value": {
                  "type": "string",
                  "title": "Value"
                }
              }
            }
          },
          "crawlDepth": {
            "title": "Link depth",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "How far to follow links inside the same website when checking the links found on a page. 1 reads only the pages you listed. 2 also reads the pages they link to, and so on.",
            "default": 1
          },
          "maxPagesToCrawl": {
            "title": "Pages to read for links",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "The most pages opened to look for links. Raising it finds more links but takes longer.",
            "default": 10
          },
          "linkScope": {
            "title": "Which links to check",
            "enum": [
              "all",
              "internal",
              "external"
            ],
            "type": "string",
            "description": "Check links that stay on the same website, links to other websites, or both.",
            "default": "all"
          },
          "includeAssets": {
            "title": "Also check images, scripts and stylesheets",
            "type": "boolean",
            "description": "When on, files that a page loads (images, scripts, stylesheets, embedded frames) are checked as well as its normal links.",
            "default": false
          },
          "includeUrlPatterns": {
            "title": "Only addresses matching",
            "type": "array",
            "description": "Keep only addresses that match at least one entry. Use * as a wildcard, for example https://example.com/blog/*. Without a * the entry matches when the address contains it. Leave empty to keep everything.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeUrlPatterns": {
            "title": "Skip addresses matching",
            "type": "array",
            "description": "Drop addresses that match any entry, for example *.pdf or /cart/. Same wildcard rules as above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt when opening pages",
            "type": "boolean",
            "description": "When on, pages that a site's robots.txt asks crawlers to avoid are not opened to look for links. Checking the status of a link does not open the page and is not affected.",
            "default": true
          },
          "expectedStatus": {
            "title": "Expected status",
            "type": "array",
            "description": "Report a problem when the final answer is not one of these. Accepts exact codes (200, 301), classes (2xx) and ranges (200-299). Leave empty to skip this rule.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mustContainText": {
            "title": "Page must contain",
            "type": "array",
            "description": "Report a problem when any of these texts is missing from the page. Not case sensitive. Turns on reading the page itself, so these checks are slower than status-only checks.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mustNotContainText": {
            "title": "Page must not contain",
            "type": "array",
            "description": "Report a problem when any of these texts is found on the page, for example an error message or a leftover placeholder. Not case sensitive.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requiredHeaders": {
            "title": "Required response headers",
            "type": "array",
            "description": "Report a problem when a header is missing or lacks the text you give. Write the header name, or the name, a colon and the text it must contain.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "warnAboveRedirects": {
            "title": "Warn when redirects exceed",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Mark an address when it needs more redirects than this to reach its destination. Long chains slow pages down. Use 0 to switch the warning off.",
            "default": 2
          },
          "slowThresholdMs": {
            "title": "Warn when slower than",
            "minimum": 0,
            "maximum": 120000,
            "type": "integer",
            "description": "Mark an address as slow when the whole check, redirects included, takes longer than this. Use 0 to switch off.",
            "default": 3000
          },
          "maxResponseTimeMs": {
            "title": "Fail when slower than",
            "minimum": 0,
            "maximum": 120000,
            "type": "integer",
            "description": "Treat an address as failing when it takes longer than this. Use 0 for no limit.",
            "default": 0
          },
          "sslWarnDays": {
            "title": "Warn when the SSL certificate expires within",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Mark secure addresses whose certificate expires within this many days. An expired or untrusted certificate is always reported.",
            "default": 30
          },
          "detectSoft404": {
            "title": "Detect pages that look like errors but answer 200",
            "type": "boolean",
            "description": "Reads the page and flags those whose title or heading says the page was not found. Slower, because the page itself is opened.",
            "default": false
          },
          "extractPageBasics": {
            "title": "Read title, canonical address and indexing signals",
            "type": "boolean",
            "description": "Adds the page title, description, main heading, canonical address, robots meta tag and an indexable flag. Slower, because the page itself is opened.",
            "default": false
          },
          "includeSecurityHeaders": {
            "title": "Check security headers",
            "type": "boolean",
            "description": "Adds the security headers each address sends (HSTS, CSP, frame, content type and referrer policy) and lists the ones that are missing.",
            "default": false
          },
          "includeResponseHeaders": {
            "title": "Include all response headers",
            "type": "boolean",
            "description": "Adds every response header of the final answer to each row. Cookies are left out.",
            "default": false
          },
          "probeHttp2": {
            "title": "Detect HTTP/2 support",
            "type": "boolean",
            "description": "Opens one extra secure connection per website to see whether the server offers HTTP/2.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum URLs",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most addresses checked in one run. Defaults to 10, up to 10,000.",
            "default": 10
          },
          "outputFilter": {
            "title": "Rows to return",
            "enum": [
              "all",
              "problems",
              "changes",
              "problemsAndChanges"
            ],
            "type": "string",
            "description": "Return every address, or only the ones that need attention. Choosing changes returns nothing on the very first run, because that run only saves the starting point.",
            "default": "all"
          },
          "trackHistory": {
            "title": "Compare with the last run",
            "type": "boolean",
            "description": "Remembers each address between runs so every row shows what changed, how long it has been broken and its uptime percentage. Turn off for a one-off check.",
            "default": true
          },
          "monitorScope": {
            "title": "Monitor name",
            "type": "string",
            "description": "Runs that share the same name are compared with each other. Use a different name for each list you monitor on a schedule. Letters, numbers and hyphens only.",
            "default": "default"
          },
          "responseRegressionPercent": {
            "title": "Flag slower than usual by",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Mark an address when it answers this much slower than its usual time over recent runs. 100 means twice as slow. Use 0 to switch off.",
            "default": 100
          },
          "confirmChanges": {
            "title": "Double-check changes before reporting",
            "type": "boolean",
            "description": "When an address looks different from last time, it is checked once more a moment later so a short blip is not reported as a change.",
            "default": true
          },
          "requestMethod": {
            "title": "Request method",
            "enum": [
              "HEAD_FALLBACK",
              "GET",
              "HEAD"
            ],
            "type": "string",
            "description": "HEAD is lightest, and falls back to a full request when the server rejects it or reports an error, so a wrong answer to HEAD is never reported. GET always makes a full request. HEAD never falls back.",
            "default": "HEAD_FALLBACK"
          },
          "followRedirects": {
            "title": "Follow redirects",
            "type": "boolean",
            "description": "When on, redirects are followed and every step is recorded. When off, only the first answer is reported.",
            "default": true
          },
          "maxRedirects": {
            "title": "Maximum redirects to follow",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Stops following after this many redirects and reports a redirect problem.",
            "default": 10
          },
          "timeoutSecs": {
            "title": "Timeout for each request",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a server to answer before giving up.",
            "default": 20
          },
          "retries": {
            "title": "Retries",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Extra attempts after a timeout, a dropped connection or a busy server (429, 502, 503, 504).",
            "default": 1
          },
          "userAgentType": {
            "title": "Browser identity",
            "enum": [
              "monitor",
              "browser"
            ],
            "type": "string",
            "description": "The identity sent with each request. The default names this monitor honestly. Some sites turn such requests away, so you can send a common browser identity instead.",
            "default": "monitor"
          },
          "userAgent": {
            "title": "Custom identity",
            "type": "string",
            "description": "Optional. Your own identity text. When filled in, it replaces the choice above.",
            "default": ""
          },
          "customHeaders": {
            "title": "Extra request headers",
            "type": "array",
            "description": "Optional extra headers sent with every request, for example Accept-Language. Logins, cookies and tokens (Authorization, Cookie) are never sent.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "key",
                "value"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "title": "Key"
                },
                "value": {
                  "type": "string",
                  "title": "Value"
                }
              }
            }
          },
          "maxConcurrency": {
            "title": "Parallel checks",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many addresses are checked at the same moment across all websites.",
            "default": 10
          },
          "maxConcurrencyPerHost": {
            "title": "Parallel checks per website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "The most requests in flight to any one website. Keep this low to be gentle on small sites.",
            "default": 2
          },
          "delayPerHostMs": {
            "title": "Pause between requests to one website",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "A short wait before each new request to the same website.",
            "default": 250
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Send requests through Apify Proxy to see how a website answers from another country. Leave off to check from the default location.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}