{
  "openapi": "3.0.1",
  "info": {
    "title": "Broken Link & Redirect Checker – Bulk URL Status",
    "description": "Check URL lists, sitemaps or a whole site for broken links and redirect chains. Get status, every hop, canonical and noindex per URL. Bot blocks are flagged separately, never as broken.",
    "version": "1.0",
    "x-build-id": "b5SJROyv1fLfutbZH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/openfeeds~broken-link-redirect-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-openfeeds-broken-link-redirect-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/openfeeds~broken-link-redirect-checker/runs": {
      "post": {
        "operationId": "runs-sync-openfeeds-broken-link-redirect-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/openfeeds~broken-link-redirect-checker/run-sync": {
      "post": {
        "operationId": "run-sync-openfeeds-broken-link-redirect-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": {
          "urls": {
            "title": "URLs to check",
            "type": "array",
            "description": "Paste URLs (bulk edit), upload a text/CSV file, or link a hosted text file. Each URL must start with http:// or https:// (the redirect map below also accepts URLs without a scheme). From a file, every http(s) URL is taken and other CSV columns are ignored. Duplicates are merged and not charged.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "redirectMap": {
            "title": "Redirect map for site migrations (old URL → expected new URL)",
            "type": "string",
            "description": "One pair per line, separated by a comma, tab, semicolon or space. You can paste two columns from a spreadsheet. A header row and lines starting with # are ignored. Old URLs without http(s):// get https://. Each old URL is checked, and the row shows whether it ends at the expected URL with a single 301/308 (migrationVerdict pass/warn/fail). Maximum 5 MB."
          },
          "sitemapUrls": {
            "title": "Sitemap URLs",
            "type": "array",
            "description": "sitemap.xml, sitemap index, .xml.gz, a plain-text sitemap, or a site's robots.txt (we read its Sitemap: lines). Every listed URL is checked. A broken child sitemap is reported as its own row and does not stop the run.",
            "items": {
              "type": "string",
              "pattern": "^https?://"
            }
          },
          "crawlStartUrl": {
            "title": "Crawl a website from this page (find broken links)",
            "pattern": "^https?://.+",
            "type": "string",
            "description": "The Actor follows links on this host only, obeys robots.txt, and checks every link it finds, including external links if enabled. Each result shows the pages the link was found on."
          },
          "checkSeoTags": {
            "title": "Check SEO tags (canonical, meta robots, hreflang)",
            "type": "boolean",
            "description": "Uses GET and reads only the HTML <head> (max 256 KB). Turn off for the fastest pure status check (HEAD requests; errors are confirmed with a GET, except rate limits).",
            "default": true
          },
          "checkExternalLinks": {
            "title": "Crawl mode: also check links to other websites",
            "type": "boolean",
            "description": "External links get one status check each and are never crawled.",
            "default": true
          },
          "includeImages": {
            "title": "Crawl mode: also check images (<img src>)",
            "type": "boolean",
            "description": "Adds the image URLs found on crawled pages to the checked links.",
            "default": false
          },
          "includeAnchorText": {
            "title": "Crawl mode: save the link text",
            "type": "boolean",
            "description": "Off by default, because link text can contain names of people. Truncated to 100 characters.",
            "default": false
          },
          "stripQueryStrings": {
            "title": "Crawl mode: drop ?query from discovered links",
            "type": "boolean",
            "description": "This merges tracking-parameter variants and keeps tokens or e-mails in query strings out of the results. URLs you enter yourself are always checked exactly as given.",
            "default": false
          },
          "maxUrls": {
            "title": "Maximum URLs to check",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "One cap for the whole run: URLs from the list, redirect map, sitemaps and crawl all count toward it, so it also caps the URL-checked charges. Free sitemap-file rows are not counted. Split bigger lists into several runs.",
            "default": 1000
          },
          "maxCrawlPages": {
            "title": "Crawl mode: maximum pages to crawl for links",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many HTML pages of your website are downloaded to discover links.",
            "default": 100
          },
          "maxCrawlDepth": {
            "title": "Crawl mode: maximum click depth from the start page",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "0 = only the start page.",
            "default": 5
          },
          "maxRedirects": {
            "title": "Maximum redirects to follow per URL",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Longer chains are reported as too_many_redirects.",
            "default": 10
          },
          "perHostConcurrency": {
            "title": "Parallel requests per website",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Keep it low to stay polite. Hosts that rate-limit us drop to 1 automatically.",
            "default": 2
          },
          "maxConcurrency": {
            "title": "Parallel requests in total",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many URLs are checked at the same time across all websites.",
            "default": 20
          },
          "requestTimeoutSecs": {
            "title": "Timeout per request",
            "minimum": 3,
            "maximum": 60,
            "type": "integer",
            "description": "Applies to each redirect hop. Timed-out URLs are retried once.",
            "default": 15
          },
          "userAgentType": {
            "title": "User-Agent",
            "enum": [
              "standard",
              "mobile"
            ],
            "type": "string",
            "description": "Both identify the checker honestly. Mobile adds Android/Mobile tokens so sites send their mobile redirects.",
            "default": "standard"
          },
          "acceptLanguage": {
            "title": "Accept-Language header",
            "maxLength": 100,
            "type": "string",
            "description": "Change it to test language redirects, e.g. de-DE,de;q=0.9.",
            "default": "en"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}