{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk URL Status & Redirect Checker — Link Route Audit",
    "description": "Find broken links and check redirects before or after a site migration or SEO review. Get the final HTTP status, each redirect hop with its code and the final URL for up to 100 URLs per run, then export a table.",
    "version": "0.3",
    "x-build-id": "ZvBgO6l2Yl3A7HgcP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cliqtomedia~bulk-url-status-redirect-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cliqtomedia-bulk-url-status-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/cliqtomedia~bulk-url-status-redirect-checker/runs": {
      "post": {
        "operationId": "runs-sync-cliqtomedia-bulk-url-status-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/cliqtomedia~bulk-url-status-redirect-checker/run-sync": {
      "post": {
        "operationId": "run-sync-cliqtomedia-bulk-url-status-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": {
          "startUrls": {
            "title": "URLs to check",
            "maxItems": 100,
            "type": "array",
            "description": "Add up to 100 public HTTP/HTTPS URL objects, for example [{\"url\": \"https://apify.com/old-page\"}]. The form starts with two apify.com pages (one HTTP redirect, one direct page). To check only a pasted plain list, clear this field and use Plain URL list below; API input needs startUrls or urls. Duplicate URLs are checked once. Invalid items are listed in the run summary. Do not add secrets or login details.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "URL",
                  "type": "string",
                  "description": "Full URL with http:// or https:// protocol, for example https://apify.com/old-page",
                  "editor": "textfield"
                }
              },
              "required": [
                "url"
              ]
            }
          },
          "urls": {
            "title": "Plain URL list",
            "maxItems": 100,
            "type": "array",
            "description": "Optional: paste URLs as plain text, one per line (use Bulk edit), for example https://apify.com/old-page. Checked after startUrls; both lists together hold up to 100 URLs. Blank lines are skipped.",
            "items": {
              "type": "string"
            }
          },
          "maxConcurrency": {
            "title": "URLs checked at once",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many URLs to check in parallel (1–100). Keep 20 for most lists; use 1–5 for one strict site that answers 429 Too Many Requests.",
            "default": 20
          },
          "maxRedirects": {
            "title": "Max redirects to follow",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many redirects to follow for each URL (0–10, default 10). A longer chain is marked broken as too many redirects. Use 0 to get only the first answer, for example to see a 301 without following it.",
            "default": 10
          },
          "httpMethod": {
            "title": "Request method",
            "enum": [
              "HEAD_THEN_GET",
              "GET"
            ],
            "type": "string",
            "description": "HEAD then GET (default) sends a light HEAD request and repeats it with GET when the server answers HEAD with 400, 403, 404, 405 or 501. GET only always uses GET, for sites that answer HEAD badly. The page body is never downloaded.",
            "default": "HEAD_THEN_GET"
          },
          "userAgent": {
            "title": "User-Agent",
            "maxLength": 256,
            "type": "string",
            "description": "Optional User-Agent header for every request, for example MyCompany-LinkAudit/1.0. Leave empty to use the Actor's own identifying User-Agent. Printable ASCII, up to 256 characters."
          },
          "proxyConfiguration": {
            "title": "Connection mode",
            "type": "object",
            "description": "Direct requests by default. Turn on Apify Proxy only when a site blocks direct checks (many 403 or 429 answers); custom proxy URLs and credentials are unsupported.",
            "default": {
              "useApifyProxy": false
            }
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Maximum wait (1–30 seconds, default 10) for each DNS, proxy CONNECT and response-header phase. Raise it to 20–30 for slow servers. Total check time includes retries and redirects. TLS verification is always enabled.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}