{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Broken Link Checker: 404s, Redirects, SEO Checks",
    "description": "Returns every link on the websites or sitemaps you list with HTTP status code, redirect chain, final URL, broken flag and anchor text, plus title, meta description, H1 count and canonical per page. Optional image check. Respects robots.txt, 2 requests per second per domain. onlyNew for monitoring.",
    "version": "0.2",
    "x-build-id": "Ad4zw80q4NJvFLPZN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nightwave-owner~website-link-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nightwave-owner-website-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/nightwave-owner~website-link-checker/runs": {
      "post": {
        "operationId": "runs-sync-nightwave-owner-website-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/nightwave-owner~website-link-checker/run-sync": {
      "post": {
        "operationId": "run-sync-nightwave-owner-website-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 to check",
            "type": "array",
            "description": "Start pages of the websites to crawl, for example [{\"url\": \"https://www.example.com/\"}]. Only these sites are crawled; links to other sites are checked once but never crawled. A bare domain such as example.com gets https://. With sitemapUrls, the start URLs are checked as single pages and not crawled. When both fields are empty the actor checks https://butik.nightwave.se/ so an empty run shows how the output looks.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sitemapUrls": {
            "title": "Sitemaps to check",
            "type": "array",
            "description": "Sitemap URLs, for example [\"https://butik.nightwave.se/sitemap.xml\"]. When set, the pages listed in the sitemaps are checked (up to maxPages) instead of crawling from startUrls, so a scheduled check covers exactly the pages you publish. Sitemap index files and gzip sitemaps (.xml.gz) are read too. A bare domain such as example.com means https://example.com/sitemap.xml. Sitemap entries that are broken or redirect are reported as rows with the sitemap as pageUrl. Leave empty to crawl from startUrls.",
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of HTML pages to check across all start URLs and sitemaps, for example 10. Every link on a checked page is checked, and each checked page is one billable event. Defaults to 10 so a first run finishes in well under a minute; raise it for a full site check.",
            "default": 10
          },
          "sameDomainOnly": {
            "title": "Same host only",
            "type": "boolean",
            "description": "When true, only pages on the start URL's host are crawled (www.example.com and example.com count as the same). When false, subdomains such as shop.example.com are crawled too. Other websites are never crawled either way. Defaults to true.",
            "default": true
          },
          "checkExternal": {
            "title": "Check external links",
            "type": "boolean",
            "description": "Also check the status of links that point to other websites, for example true. Each external URL gets one HEAD request (GET if HEAD fails) and is not crawled. Defaults to true.",
            "default": true
          },
          "brokenOnly": {
            "title": "Broken links only",
            "type": "boolean",
            "description": "Return only rows where isBroken is true (broken links, and broken images with checkImages), for example true. Pages are still checked and charged. Defaults to false, which returns every link with its status.",
            "default": false
          },
          "requestsPerSecond": {
            "title": "Requests per second per domain",
            "minimum": 0.2,
            "maximum": 5,
            "type": "number",
            "description": "Highest request rate against any one domain, for example 2. Keep it low on small servers. A Crawl-delay in robots.txt slows it further. 0.2 to 5, defaults to 2.",
            "default": 2
          },
          "onlyNew": {
            "title": "Only new broken links",
            "type": "boolean",
            "description": "For scheduled runs. When true, only broken links that an earlier run with the same input did not report are returned. Pages with a new broken link are charged as usual, other crawled pages only a small monitoring fee. The first run returns every broken link. Defaults to false.",
            "default": false
          },
          "checkImages": {
            "title": "Check images",
            "type": "boolean",
            "description": "Also check every <img src> on the checked pages, for example true. Each image URL gets one HEAD request (GET if HEAD fails) at the same requestsPerSecond, and is returned as a row with linkType \"image\" and the alt text as anchorText. Images on other websites are checked only with checkExternal. Defaults to false.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}