{
  "openapi": "3.0.1",
  "info": {
    "title": "Pornhub, XVideos, XNXX & Chaturbate Scraper: Video & Cam Data",
    "description": "Scrape Pornhub, XVideos, XNXX and Chaturbate in one run: videos, video details, channels, pornstars, categories, keyword suggestions, live cam rooms and a live market snapshot. 80 fields, metadata only, no login. Export CSV, Excel, JSON or XML.",
    "version": "0.1",
    "x-build-id": "eAEOggbdySMFl7XMo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~adult-video-cam-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-adult-video-cam-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/recordsdata~adult-video-cam-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-adult-video-cam-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/recordsdata~adult-video-cam-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-adult-video-cam-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": "What to collect",
            "enum": [
              "videos",
              "videoDetails",
              "channels",
              "pornstars",
              "categories",
              "suggestions",
              "liveRooms",
              "liveRoomDetails",
              "liveSnapshot"
            ],
            "type": "string",
            "description": "The kind of record to return. Videos: search results and listings. Video details: one full page per video (likes, tags, performers). Channels, Pornstars and Categories: the site rankings and tag lists. Search suggestions: keyword ideas from XVideos and XNXX. The three live modes read Chaturbate: the rooms on air now, one detailed row per room, or one market snapshot per segment.",
            "default": "videos"
          },
          "sites": {
            "title": "Sites",
            "type": "array",
            "description": "Sites to read. Leave empty to use all four. Live modes only use Chaturbate. Search suggestions only use XVideos and XNXX. Channels are not available on XNXX.",
            "items": {
              "type": "string",
              "enum": [
                "pornhub",
                "xvideos",
                "xnxx",
                "chaturbate"
              ],
              "enumTitles": [
                "Pornhub",
                "XVideos",
                "XNXX",
                "Chaturbate"
              ]
            },
            "default": [
              "pornhub",
              "xvideos",
              "xnxx",
              "chaturbate"
            ]
          },
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search, one search per term and site. In the suggestion modes each term is the seed word. In the live modes a term is a keyword filter on room titles and tags. For the pornstars, channels and categories modes a term filters the list by name. Leave empty to read the site rankings. Terms that refer to minors are refused and skipped.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Links copied from the sites: a search or category page, a video, a channel, a pornstar or model page, or a Chaturbate room or tag page. A video link returns that video. A channel or pornstar link returns its uploads in the video modes and its profile in every other mode. Listing links return their videos. Index links (channels, pornstars, tags) return that list.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of rows to return across all sites and terms. Free users are limited to 10 rows (preview). Paid users can raise it up to 1,000,000.",
            "default": 10
          },
          "sortBy": {
            "title": "Sort videos by",
            "enum": [
              "relevance",
              "newest",
              "views",
              "rating",
              "longest"
            ],
            "type": "string",
            "description": "Order of the video results. Best match keeps the site default. Newest, most viewed and top rated work on XVideos, and on Pornhub only when no search terms are given (its robots.txt allows no other sorted search, so Pornhub searches return best match). XNXX only supports best match and most viewed. Longest works on XVideos only. Each row states the sort that was really applied.",
            "default": "relevance"
          },
          "period": {
            "title": "Time period",
            "enum": [
              "alltime",
              "today",
              "week",
              "month",
              "3months",
              "6months",
              "year"
            ],
            "type": "string",
            "description": "Period for the most viewed and top rated sorts, and for the video upload date. Pornhub (without search terms): today, week, month, year, all time. XVideos: today, week, month, 3 months, 6 months. XNXX: month, year.",
            "default": "alltime"
          },
          "duration": {
            "title": "Video length",
            "enum": [
              "any",
              "10-20",
              "over-10",
              "over-20"
            ],
            "type": "string",
            "description": "Keep only videos of this length. Works on XVideos and XNXX searches; on Pornhub searches the length is checked on the rows that come back.",
            "default": "any"
          },
          "quality": {
            "title": "Video quality",
            "enum": [
              "any",
              "hd",
              "fullhd"
            ],
            "type": "string",
            "description": "Keep only HD or Full HD videos. Works on XVideos and XNXX.",
            "default": "any"
          },
          "producer": {
            "title": "Producer type",
            "enum": [
              "any",
              "professional",
              "homemade"
            ],
            "type": "string",
            "description": "Professional studios or homemade content. Works on Pornhub when no search terms are given.",
            "default": "any"
          },
          "liveGenders": {
            "title": "Cam genders",
            "type": "array",
            "description": "Keep only rooms of these categories. Leave empty for all. The market snapshot mode always returns every category on its own.",
            "items": {
              "type": "string",
              "enum": [
                "female",
                "male",
                "couple",
                "trans"
              ],
              "enumTitles": [
                "Female",
                "Male",
                "Couple",
                "Trans"
              ]
            },
            "default": []
          },
          "liveRegions": {
            "title": "Cam regions",
            "type": "array",
            "description": "Keep only rooms from these regions. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "northAmerica",
                "southAmerica",
                "asia"
              ],
              "enumTitles": [
                "North America",
                "South America",
                "Asia"
              ]
            },
            "default": []
          },
          "liveTags": {
            "title": "Cam tags",
            "type": "array",
            "description": "Room tags to read, one search per tag (for example latina or lovense), without the # sign. Leave empty for the whole room list. In the market snapshot mode each tag becomes its own snapshot row.",
            "items": {
              "type": "string"
            }
          },
          "minViewers": {
            "title": "Minimum viewers",
            "minimum": 0,
            "type": "integer",
            "description": "Skip rooms with fewer viewers than this number at the time of the run. 0 keeps every room.",
            "default": 0
          },
          "enrichProfiles": {
            "title": "Open each profile page",
            "type": "boolean",
            "description": "In the channel and pornstar modes, open every profile page to add exact totals, subscribers, country, description and badges. Turn it off for a faster run that only returns the list columns.",
            "default": true
          },
          "expandSuggestions": {
            "title": "Expand suggestions a to z",
            "type": "boolean",
            "description": "In the suggestion mode, repeat each seed word followed by every letter from a to z to collect many more keyword ideas. One extra request per letter.",
            "default": false
          },
          "includeThumbnails": {
            "title": "Include thumbnail links",
            "type": "boolean",
            "description": "Add the thumbnail image link of each record as the first column. Turn it off for leaner exports. The links point to the site image servers and some expire after a day.",
            "default": true
          },
          "onlyNew": {
            "title": "Only new records (monitor mode)",
            "type": "boolean",
            "description": "Only new records: skip every record this same search already returned in an earlier run, so scheduled runs return just what changed and you are not charged for skipped records. Max Items then means N new records. Off by default.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Optional label for the monitor state. Use a different label to run several independent monitors with identical filters. Leave empty to share state between runs of the same search.",
            "default": ""
          },
          "resetSeen": {
            "title": "Reset seen records before this run",
            "type": "boolean",
            "description": "Clear the stored list of already-seen records for this search (and Monitor name) before the run starts, so everything counts as new again.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}