{
  "openapi": "3.0.1",
  "info": {
    "title": "Broken Link Checker & Redirect Chain Audit for Your Site",
    "description": "Crawl your own website and find every broken link (404, 5xx), redirect chain and loop, with the page and anchor text where each link sits. Same-host crawl, respects robots.txt. $1 per 1,000 links checked.",
    "version": "0.1",
    "x-build-id": "8rT8rRG1ibcDkBhTL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hardwoodlogic~broken-link-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hardwoodlogic-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/hardwoodlogic~broken-link-checker/runs": {
      "post": {
        "operationId": "runs-sync-hardwoodlogic-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/hardwoodlogic~broken-link-checker/run-sync": {
      "post": {
        "operationId": "run-sync-hardwoodlogic-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",
        "required": [
          "startUrl",
          "ownershipConfirmed"
        ],
        "properties": {
          "startUrl": {
            "title": "Start URL",
            "type": "string",
            "description": "Page to start from. The crawl stays on this exact host. www is included only when Include www is on. Redirect chains stop after 5 redirects. The console prefill is the daily test against our own fixture site."
          },
          "ownershipConfirmed": {
            "title": "I own or manage this site, or have permission to scan it",
            "type": "boolean",
            "description": "Required. A one-off run needs this confirmation and nothing else. Monitor mode, ignoring robots.txt on your own site, and any scheduled run also need the verification file. The daily-test prefill is checked because the start URL is our own fixture site.",
            "default": false
          },
          "includeWww": {
            "title": "Include www",
            "type": "boolean",
            "description": "Also crawl the www / non-www twin of the start host. Off by default: example.com and www.example.com are separate sites.",
            "default": false
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "How many HTML pages to download and parse. Further internal links still get one status check. Default 100. The hard cap is 50,000 and has to be set on purpose. The console prefill uses 10 so a daily test stays small.",
            "default": 100
          },
          "maxLinks": {
            "title": "Max links",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "How many unique link targets to keep. Anything past this number is counted and dropped, not stored and not requested. Default 2,000. Hard cap 50,000.",
            "default": 2000
          },
          "maxDepth": {
            "title": "Max depth",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "How many clicks from the start page to follow as HTML. The start page is depth 0. Deeper internal links still get one status check. Default 2. Hard cap 20. Redirect chains are separate and stop after 5 redirects.",
            "default": 2
          },
          "checkOutboundLinks": {
            "title": "Check outbound links",
            "type": "boolean",
            "description": "Request each external link once (HEAD, or one Range GET when HEAD is not allowed). The crawl never follows those links. On by default.",
            "default": true
          },
          "includeQueryString": {
            "title": "Keep query strings",
            "type": "boolean",
            "description": "Off by default. When off, a discovered link's query is removed before the request. When on, that query is sent. Links that differ only by query collapse into one stored row: the first query seen is the one requested. A redirect Location query is always requested. The query is never stored: saved URLs, the redirect chain, crawl state and the monitor snapshot keep only the origin and path. Fragments are always removed. Logs never include the query, the fragment, or a username.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode",
            "type": "boolean",
            "description": "Compare broken links with the previous run on this host. Requires the verification file, and the start URL must use the default port. A custom port is rejected before any request. The first run treats every broken link as new.",
            "default": false
          },
          "onlyNewBreaks": {
            "title": "Only new breaks",
            "type": "boolean",
            "description": "Requires monitor mode. The run stops before any request when this is on and monitor mode is off. With monitor mode, save only links that are broken now and were not broken last time. Unique URLs that were actually requested are still billed, including breaks that are not new. The CSV still lists every broken link from this run.",
            "default": false
          },
          "verificationToken": {
            "title": "Verification token",
            "type": "string",
            "description": "16 to 64 characters: letters, digits, underscore or hyphen. Required for monitor mode, for ignoring robots.txt on your own site, and for scheduled runs. Those runs require the start URL on the default port. Serve the token as the entire body of https://YOUR-HOST/.well-known/broken-link-checker-verify-TOKEN.txt with HTTP 200 and no redirect."
          },
          "ignoreRobotsOnOwnSite": {
            "title": "Ignore robots.txt on my site",
            "type": "boolean",
            "description": "Skip robots.txt only for the exact start host. The www twin is still obeyed when Include www is on. Requires the verification file on the default port. Outbound hosts are still obeyed. Off by default.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}