{
  "openapi": "3.0.1",
  "info": {
    "title": "Twitch Scraper: Channels, Live Streams, Videos & Clips",
    "description": "Scrape Twitch channels (followers, live status, last stream, social links), live streams by category or across Twitch, VODs, clips and top categories. Language and viewer filters. No login, API key or browser. Pay per result, no start fee.",
    "version": "0.1",
    "x-build-id": "QlG9W7PeivBbTl3Sc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~twitch-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-twitch-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/rjmacarthy~twitch-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-twitch-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/rjmacarthy~twitch-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-twitch-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": {
          "channels": {
            "title": "Channels",
            "type": "array",
            "description": "Twitch channel names or links: shroud, @shroud, https://www.twitch.tv/shroud or https://www.twitch.tv/shroud/videos. Each channel gives one profile item (followers, live status, last stream, social links), plus its videos and clips if switched on below.",
            "items": {
              "type": "string"
            }
          },
          "channelProfiles": {
            "title": "Output channel profiles",
            "type": "boolean",
            "description": "One item per channel (type \"channel\"): followers, partner/affiliate status, live stream (title, category, viewers, tags), last broadcast, total videos and public social links. From datacenter IPs Twitch withholds the social-links section; the links are then taken from the About panels (see socialLinksStatus). Switch off if you only want the videos or clips.",
            "default": true
          },
          "includePanels": {
            "title": "Include About panels",
            "type": "boolean",
            "description": "Add the channel's About panels (title, text, link and image of each panel) to channel profiles. E-mail addresses and phone numbers in panel text are removed.",
            "default": false
          },
          "includeVideos": {
            "title": "Scrape videos (VODs)",
            "type": "boolean",
            "description": "Output the channels' videos (type \"video\"): title, views, duration, date, category and thumbnail.",
            "default": false
          },
          "videoType": {
            "title": "Video type",
            "enum": [
              "archive",
              "highlight",
              "upload",
              "premiere",
              "all"
            ],
            "type": "string",
            "description": "Which videos to list. Past broadcasts are the stream VODs; highlights and uploads are kept by Twitch permanently.",
            "default": "archive"
          },
          "videoSort": {
            "title": "Sort videos by",
            "enum": [
              "time",
              "views"
            ],
            "type": "string",
            "description": "Newest first, or most viewed first.",
            "default": "time"
          },
          "maxVideosPerChannel": {
            "title": "Max videos per channel",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many videos to output per channel. Twitch serves only the first 100 to anonymous visitors, so 100 is the maximum (0 = 100).",
            "default": 20
          },
          "includeClips": {
            "title": "Scrape clips",
            "type": "boolean",
            "description": "Output the channels' most-viewed clips (type \"clip\") from the period below: title, views, duration, date, category, clipper and the VOD it came from.",
            "default": false
          },
          "clipsPeriod": {
            "title": "Clips from",
            "enum": [
              "24h",
              "7d",
              "30d",
              "all"
            ],
            "type": "string",
            "description": "Time window for the top clips.",
            "default": "7d"
          },
          "maxClipsPerChannel": {
            "title": "Max clips per channel",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many clips to output per channel, most viewed first. Twitch serves only the first 100 to anonymous visitors, so 100 is the maximum (0 = 100).",
            "default": 20
          },
          "liveCategories": {
            "title": "Live streams in categories",
            "type": "array",
            "description": "Categories (games) to list current live streams for, most viewers first: a name (Just Chatting, VALORANT), a slug (just-chatting) or a link (https://www.twitch.tv/directory/category/just-chatting). Misspelled names are matched with Twitch's category search.",
            "items": {
              "type": "string"
            }
          },
          "topLiveStreams": {
            "title": "Top live streams across Twitch",
            "type": "boolean",
            "description": "Also list the most-watched live streams on the whole site (all categories).",
            "default": false
          },
          "liveLanguages": {
            "title": "Stream languages",
            "type": "array",
            "description": "Only streams in these broadcaster languages. Leave empty for all languages.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "es",
                "pt",
                "de",
                "fr",
                "ru",
                "ja",
                "ko",
                "zh",
                "zh-hk",
                "it",
                "pl",
                "tr",
                "ar",
                "th",
                "sv",
                "nl",
                "cs",
                "da",
                "fi",
                "hu",
                "no",
                "el",
                "hi",
                "id",
                "ms",
                "ro",
                "sk",
                "bg",
                "uk",
                "vi",
                "tl",
                "ca",
                "asl",
                "other"
              ],
              "enumTitles": [
                "English",
                "Spanish",
                "Portuguese",
                "German",
                "French",
                "Russian",
                "Japanese",
                "Korean",
                "Chinese",
                "Chinese (Hong Kong)",
                "Italian",
                "Polish",
                "Turkish",
                "Arabic",
                "Thai",
                "Swedish",
                "Dutch",
                "Czech",
                "Danish",
                "Finnish",
                "Hungarian",
                "Norwegian",
                "Greek",
                "Hindi",
                "Indonesian",
                "Malay",
                "Romanian",
                "Slovak",
                "Bulgarian",
                "Ukrainian",
                "Vietnamese",
                "Tagalog",
                "Catalan",
                "American Sign Language",
                "Other"
              ]
            },
            "default": []
          },
          "minViewers": {
            "title": "Min viewers",
            "minimum": 0,
            "type": "integer",
            "description": "Skip live streams with fewer current viewers.",
            "default": 0
          },
          "maxStreams": {
            "title": "Max live streams per category",
            "minimum": 0,
            "type": "integer",
            "description": "How many live streams to output per category (and for the top streams across Twitch), most viewers first. 0 = as many as Twitch serves. Above 100 per category the list is assembled from per-language lists, so the lowest-ranked entries are best effort.",
            "default": 100
          },
          "includeStreamerProfiles": {
            "title": "Also output profiles of live streamers",
            "type": "boolean",
            "description": "For every streamer found in the live lists, also output their full channel profile (social links, partner status, description...). Each profile is a \"channel\" item and is charged like one.",
            "default": false
          },
          "includeTopCategories": {
            "title": "Top categories",
            "type": "boolean",
            "description": "Output the most-watched categories right now (type \"category\"): viewers, live channels, followers, tags and box art.",
            "default": false
          },
          "maxCategories": {
            "title": "Max categories",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many top categories to output. Twitch serves only the first 100 to anonymous visitors (0 = 100).",
            "default": 50
          },
          "requestDelayMs": {
            "title": "Delay between requests",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Minimum time between two requests to Twitch. Most runs need only a handful of requests, so the default is fine.",
            "default": 250
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed for most runs. Turn on Apify Proxy (residential) only if Twitch blocks or rate-limits the run.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}