{
  "openapi": "3.0.1",
  "info": {
    "title": "WEBTOON Scraper - Series, Episodes, Genres & Rankings",
    "description": "Scrape the WEBTOON catalog into structured data. Extract series, genres, rankings and complete episode lists, including titles, authors, descriptions, thumbnails and other available series and episode details.",
    "version": "0.1",
    "x-build-id": "kUKq3kfYaGb2KL4OD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~webtoons-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-webtoons-com-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/abotapi~webtoons-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-webtoons-com-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/abotapi~webtoons-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-webtoons-com-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "How to start the scrape. 'search' queries the catalog (keyword, genre, schedule or canvas index). 'url' processes the WEBTOON URLs you paste: genre, schedule, ranking, search and canvas pages are walked like a search, and a series list page emits the series (plus one row per episode when Include episodes is on). The output and resume sections below apply to both modes.",
            "default": "search"
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Title keyword to search for (for example tower of god). Leave empty to browse the genre or schedule instead."
          },
          "searchType": {
            "title": "Search type",
            "enum": [
              "all",
              "canvas",
              "originals"
            ],
            "type": "string",
            "description": "Which catalog index the keyword searches (all, originals, canvas).",
            "default": "all"
          },
          "language": {
            "title": "Language",
            "enum": [
              "de",
              "en",
              "es",
              "fr",
              "id",
              "th",
              "zh-hant"
            ],
            "type": "string",
            "description": "Catalog language edition (en, es, fr, de, id, th, zh-hant).",
            "default": "en"
          },
          "source": {
            "title": "Source",
            "enum": [
              "canvas",
              "originals"
            ],
            "type": "string",
            "description": "Catalog to browse when no keyword is set: originals or canvas.",
            "default": "originals"
          },
          "genre": {
            "title": "Genre",
            "type": "string",
            "description": "Catalog genre to browse when no keyword is set (originals genres are lowercase, canvas tabs are UPPERCASE)."
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "LIKEIT",
              "MANA",
              "UPDATE"
            ],
            "type": "string",
            "description": "Genre page ordering: MANA (popularity), LIKEIT (likes), UPDATE (recency).",
            "default": "MANA"
          },
          "weekday": {
            "title": "Weekday",
            "type": "string",
            "description": "Weekday schedule to browse (monday to sunday). Leave empty to browse the genre instead."
          },
          "urls": {
            "title": "Page URLs",
            "type": "array",
            "description": "One or more webtoons.com genre, schedule, ranking, search, canvas or series URLs. Episode reader (viewer) URLs are out of scope and are skipped.",
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch series details",
            "type": "boolean",
            "description": "Read each series page for authors, summary and counters. Adds a per-series surcharge.",
            "default": false
          },
          "includeEpisodes": {
            "title": "Include episodes",
            "type": "boolean",
            "description": "Open every discovered series page in search or URL mode and emit one row per episode. The series row and episode rows share the maxItems total cap.",
            "default": false
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Maximum total rows to return across all series and episode records. In search mode, series rows are emitted first and episode rows consume the remaining cap. This is the only default cap.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per series",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum episode-list pages per series (0 means no page cap, maxItems still applies).",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Continue an interrupted crawl from a previous run ID or dataset ID. See incrementalMode."
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "Track this scope across runs and stamp NEW, UPDATED, UNCHANGED, REAPPEARED. See resumeFromRunId.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Custom incremental state key. Leave empty to derive one from the full scope."
          },
          "emitUnchanged": {
            "title": "Emit UNCHANGED rows",
            "type": "boolean",
            "description": "Also return UNCHANGED rows (suppressed by default). Billed like any row.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit EXPIRED rows",
            "type": "boolean",
            "description": "Also return EXPIRED rows for tracked series gone from the scope. Billed like any row.",
            "default": false
          },
          "mcpConnectors": {
            "title": "MCP connectors",
            "type": "array",
            "description": "Connector IDs to forward results to (optional).",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page",
            "type": "string",
            "description": "Parent page for the Notion connector (only used when a Notion connector is selected)."
          },
          "maxNotifyListings": {
            "title": "Max rows per export",
            "type": "integer",
            "description": "Maximum rows forwarded to each selected connector.",
            "default": 50
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy connection. Defaults to the RESIDENTIAL group; enable or override this when the catalog needs a different exit."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}