{
  "openapi": "3.0.1",
  "info": {
    "title": "Broken Link Checker - 404s, Redirects & Slow Pages Site-Wide",
    "description": "Check every URL a website publishes in its sitemaps: 404s, 5xx, timeouts, SSL errors, redirect chains and slow pages. No crawling needed, no proxy. Delta mode shows which problems are new since your last run and which got fixed. Pay per URL checked.",
    "version": "0.1",
    "x-build-id": "ADCQCjC9tdyXvIlny"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/bruco3~broken-link-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-bruco3-broken-link-checker",
        "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/bruco3~broken-link-checker/runs": {
      "post": {
        "operationId": "runs-sync-bruco3-broken-link-checker",
        "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/bruco3~broken-link-checker/run-sync": {
      "post": {
        "operationId": "run-sync-bruco3-broken-link-checker",
        "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": "Websites or sitemap URLs",
            "type": "array",
            "description": "Paste a website (<code>https://example.com</code>) and every URL in its sitemaps is checked. Or paste a sitemap / sitemap index URL directly. No crawling: the sitemap is the source of truth for what the site says it publishes.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urls": {
            "title": "Or: a list of URLs to check",
            "type": "array",
            "description": "Check these exact URLs instead of (or in addition to) a site's sitemap. One URL per line, or upload a text file. Handy for link lists exported from a CMS, a spreadsheet or another Actor.",
            "items": {
              "type": "string"
            }
          },
          "report": {
            "title": "What to report",
            "enum": [
              "problems",
              "all"
            ],
            "type": "string",
            "description": "<b>Problems only</b> keeps the dataset small: 4xx, 5xx, timeouts, SSL errors, redirects and slow pages. <b>All URLs</b> also includes healthy pages with their status and response time.",
            "default": "problems"
          },
          "maxUrls": {
            "title": "Maximum URLs to check",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many checks across all sites. <code>0</code> = no limit.",
            "default": 0
          },
          "includeRegex": {
            "title": "Check only URLs matching",
            "type": "string",
            "description": "Case-insensitive regular expression, e.g. <code>/blog/</code>."
          },
          "excludeRegex": {
            "title": "Skip URLs matching",
            "type": "string",
            "description": "Case-insensitive regular expression applied after the include filter, e.g. <code>\\.pdf$|/tag/</code>."
          },
          "deltaMode": {
            "title": "Delta mode — new and fixed problems since the last run",
            "type": "boolean",
            "description": "Remembers the problem URLs of each site in a named key-value store. Every reported problem is flagged <code>new</code> or <code>persisting</code>, and URLs that were broken last time but are healthy now are reported as <code>fixed</code>.",
            "default": false
          },
          "deltaStoreName": {
            "title": "Snapshot store name",
            "type": "string",
            "description": "Named key-value store that keeps one snapshot of problem URLs per site.",
            "default": "broken-link-checker-snapshots"
          },
          "reportRedirects": {
            "title": "Treat redirects as problems",
            "type": "boolean",
            "description": "A URL listed in the sitemap should answer 200 directly. When on, 301/302/307/308 chains are reported with every hop.",
            "default": true
          },
          "slowMs": {
            "title": "Slow page threshold (ms)",
            "minimum": 200,
            "type": "integer",
            "description": "Healthy pages slower than this are reported as <code>slow</code>.",
            "default": 3000
          },
          "concurrency": {
            "title": "Parallel checks",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Total concurrent requests. Never more than 8 at a time per host, regardless of this value.",
            "default": 20
          },
          "maxRedirects": {
            "title": "Maximum redirect hops",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Chains longer than this are reported as <code>too-many-redirects</code>.",
            "default": 10
          },
          "alwaysGet": {
            "title": "Use GET instead of HEAD",
            "type": "boolean",
            "description": "By default each URL gets a HEAD request, with an automatic GET fallback when the server refuses HEAD. Force GET for servers that answer HEAD incorrectly. Bodies are never downloaded.",
            "default": false
          },
          "maxSitemaps": {
            "title": "Maximum sitemap files per site",
            "minimum": 1,
            "type": "integer",
            "description": "Safeguard against runaway sitemap indexes.",
            "default": 2000
          },
          "maxDepth": {
            "title": "Maximum sitemap index nesting depth",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many levels of nested sitemap indexes to follow.",
            "default": 5
          },
          "userAgent": {
            "title": "User-Agent",
            "type": "string",
            "description": "Sent with every request. Change it only if a site requires a specific value.",
            "default": "BrokenLinkChecker/1.0 (+https://apify.com/bruco3/broken-link-checker)"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed for your own sites. Enable only if a site blocks datacenter traffic.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}