{
  "openapi": "3.0.1",
  "info": {
    "title": "NetShort Scraper - Catalog, Episodes & Reviews",
    "description": "Scrape the NetShort short-drama catalog: series with synopses, like and follow counters, categories, episode lists with lock flags, publish dates and reviews. Catalog, category, trending or pasted links, in 16 site languages. Resume, incremental updates and MCP export included.",
    "version": "1.0",
    "x-build-id": "Vb0PFjFgpEQjd5zVc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~netshort-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-netshort-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~netshort-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-netshort-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~netshort-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-netshort-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "catalog",
              "category",
              "trending",
              "urls"
            ],
            "type": "string",
            "description": "catalog walks the full browse catalog page by page. category walks the category pages you pick in the multi-select below. trending reads the homepage discovery rails with rail name and position. urls scrapes only the links, ids and shorthands you paste.",
            "default": "catalog"
          },
          "categories": {
            "title": "Categories (category mode)",
            "type": "array",
            "description": "Which category pages to walk in category mode - pick one, several, or leave empty for every category. Values come from the site's own category list and are re-resolved against the live index when the run starts.",
            "items": {
              "type": "string",
              "enum": [
                "Another World",
                "Contract Lovers",
                "Coporate Warfare",
                "Enemies to Lovers",
                "Family Drama",
                "Fantasy",
                "Fantasy Romance",
                "Fantasy World",
                "Feel-Good",
                "Friendship",
                "Historical",
                "Karma Payback",
                "Love After Divorce",
                "Mafia",
                "Men Coming-of-Age",
                "Mind-Bending",
                "Modern Romance",
                "Multiple Identities",
                "Mystery",
                "Plot Twist",
                "Power Couple",
                "Rebirth",
                "Revenge",
                "Second Chance",
                "Sweet Romance",
                "Time Travel",
                "Tragic Love",
                "Underdog Rise",
                "Werewolf"
              ]
            }
          },
          "language": {
            "title": "Site language",
            "enum": [
              "en",
              "it",
              "tr",
              "id",
              "hi",
              "vi",
              "th",
              "ja",
              "fr",
              "de",
              "ms",
              "zh",
              "ko",
              "es",
              "ar",
              "pt"
            ],
            "type": "string",
            "description": "Which localized catalog to read. The same story carries a per-locale series id; the walked locale's id is the row identity.",
            "default": "en"
          },
          "listingUrls": {
            "title": "Links (urls mode)",
            "type": "array",
            "description": "Episode pages (/episode/...), category pages (/drama/<Name>-<id>), the browse catalog (/drama/all-plots), all-episodes pages and reviews pages. A category also works without its route: https://netshort.com/1983832036856381442 (bare id) or https://netshort.com/Fantasy-1983832036856381442 (Name-id shorthand). Each link keeps its own site language when it carries one; id shapes use the Site language input.",
            "default": [
              {
                "url": "https://netshort.com/episode/the-mafia-bosses-max-level-nanny-2108386528632586241"
              },
              {
                "url": "https://netshort.com/drama/Fantasy-1983832036856381442"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of series records per run. 0 means no limit.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per scope",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum pages walked per catalog or category scope. 0 means no page cap, so Max items is the only cap that stops a run early.",
            "default": 0
          },
          "fetchDetails": {
            "title": "Fetch detail pages",
            "type": "boolean",
            "description": "Read each series' episode page for the like/follow counters, full episode list with lock flags, per-locale links, publish date and the first review set.",
            "default": true
          },
          "fetchReviews": {
            "title": "Fetch reviews",
            "type": "boolean",
            "description": "Also read each series' reviews page for the full server-rendered review set (billed per started block of 10 reviews).",
            "default": true
          },
          "maxReviews": {
            "title": "Max reviews per series",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on reviews carried per series record. 0 skips reviews entirely.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify datacenter proxies serve this site reliably. Residential proxies are recommended for the most reliable long runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Run ID whose collected series should be skipped (for continuing after an interrupted run).",
            "default": ""
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "Track state between runs and classify every series as NEW, UPDATED, UNCHANGED or EXPIRED instead of always NEW. Rows already known and unchanged are suppressed.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Named baseline for incremental runs. Leave empty to derive the key from the run scope (mode, categories, language).",
            "default": ""
          },
          "emitUnchanged": {
            "title": "Emit unchanged rows",
            "type": "boolean",
            "description": "In incremental mode, also push rows that did not change (changeType UNCHANGED).",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired rows",
            "type": "boolean",
            "description": "In incremental mode, emit EXPIRED tombstone rows for series that disappeared from the walked scope.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Extra field names that must never mark a row UPDATED (counters and rank positions are already excluded by default).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "MCP connectors",
            "type": "array",
            "description": "Apify MCP connector IDs that receive pushed records while the run executes.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page URL",
            "type": "string",
            "description": "Notion parent page for the Notion MCP connector.",
            "default": ""
          },
          "maxNotifyListings": {
            "title": "Max records to connectors",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on records sent to MCP connectors per run.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}