{
  "openapi": "3.0.1",
  "info": {
    "title": "Cloudflare & Anti-Bot Fetcher – Gap-Filler for Crawlers",
    "description": "Fast HTTP by default, automatic Cloudflare/anti-bot bypass when blocked. The gap-filler for Website Content Crawler, RAG Web Browser, or any crawler that got blocked — retries just their failed pages and returns clean, LLM-ready Markdown.",
    "version": "0.2",
    "x-build-id": "FhB0pM1KTZka9Ckns"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vietaro~cloudflare-bypass-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vietaro-cloudflare-bypass-scraper",
        "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/vietaro~cloudflare-bypass-scraper/runs": {
      "post": {
        "operationId": "runs-sync-vietaro-cloudflare-bypass-scraper",
        "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/vietaro~cloudflare-bypass-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-vietaro-cloudflare-bypass-scraper",
        "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 fetch",
            "type": "array",
            "description": "One or more URLs to fetch. Each will go through the fast->stealth escalation ladder independently.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "extractionSchema": {
            "title": "Adaptive extraction fields (optional)",
            "type": "array",
            "description": "Optional list of {name, selector} pairs. Selectors are matched adaptively -- if the site's DOM changes later, Scrapling relocates the element by similarity instead of returning null.",
            "default": []
          },
          "forceStealth": {
            "title": "Always use stealth browser",
            "type": "boolean",
            "description": "Skip the fast HTTP attempt and go straight to the stealth browser. Use for sites you already know are hard-gated (Cloudflare Turnstile, DataDome, etc).",
            "default": false
          },
          "markdownThreshold": {
            "title": "Markdown pruning threshold",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "0-100. Higher = more aggressive removal of boilerplate/nav/ads from the markdown output. 45 is a good default.",
            "default": 45
          },
          "maxConcurrency": {
            "title": "Max concurrent fetches",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many URLs to fetch in parallel. Higher values finish faster but increase peak memory/CU usage and the chance of tripping rate limits on the same target site.",
            "default": 5
          },
          "maxUrlsPerRun": {
            "title": "Max URLs per run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on how many startUrls a single run will process, regardless of how many are supplied. Protects against an oversized input list blowing up compute cost -- applies whether or not the Actor is monetized. Set to 0 to disable the cap.",
            "default": 50
          },
          "fetchTimeoutSecs": {
            "title": "Per-URL fetch timeout (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Hard cap on how long a single URL's fetch attempt (including stealth-tier Cloudflare/anti-bot solving) is allowed to run before it's aborted and recorded as a timeout error. Protects against a hard-gated site hanging the whole run indefinitely.",
            "default": 150
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxy list. Strongly recommended for the stealth tier.",
            "default": {
              "useApifyProxy": true
            }
          },
          "sourceDatasetId": {
            "title": "Gap-filler: source dataset (optional)",
            "type": "string",
            "description": "Optional. Point at the output dataset of a prior run of another actor (e.g. Website Content Crawler, RAG Web Browser, or any scraper) -- this Actor scans it for failed/blocked/thin-content items and retries just those URLs. Only works on datasets your own Apify account already has access to. Can be combined with startUrls; both are merged (deduplicated). NOTE: the picker's search list often only shows datasets you've explicitly named -- default/unnamed run datasets (which is what most actors, including WCC and RAG Web Browser, produce) may not appear in the dropdown even though they work fine. If your dataset isn't listed, paste its ID directly into the search box (find it in Console -> that run -> Storage tab, or the run's defaultDatasetId via the API) -- a pasted valid ID is accepted even when not shown as a suggestion."
          },
          "sourceActorHint": {
            "title": "Gap-filler: source actor",
            "enum": [
              "auto",
              "website-content-crawler",
              "rag-web-browser"
            ],
            "type": "string",
            "description": "Which actor produced the source dataset, so the right field mapping is used automatically. Leave as auto to guess, or set sourceFieldMapping below for full manual control.",
            "default": "auto"
          },
          "sourceFieldMapping": {
            "title": "Gap-filler: manual field mapping (optional)",
            "type": "object",
            "description": "Optional. For source actors not covered by sourceActorHint. Shape: {\"urlField\": \"...\", \"contentField\": \"...\", \"minContentLength\": 50}. Supports dotted paths for nested fields (e.g. \"metadata.url\"). Takes priority over sourceActorHint if both are set."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}