{
  "description": "Search Twitch, fetch top live streams, browse categories and category VODs, or look up channels, videos, and clips by ID or URL. No Twitch login is required.",
  "properties": {
    "categorySlug": {
      "description": "Category slug (`just-chatting`), exact name (`Just Chatting`), or directory URL.",
      "editor": "textfield",
      "title": "Category slug, name, or URL (mode=byCategory, byCategoryVideos, topClips)",
      "type": "string"
    },
    "channelName": {
      "description": "Twitch channel login or channel URL, e.g. `lirik` or `https://www.twitch.tv/lirik`.",
      "editor": "textfield",
      "title": "Channel login (mode=byChannel)",
      "type": "string"
    },
    "channelNames": {
      "default": [],
      "description": "Batch channel logins or channel URLs. Duplicates and the single `channelName` are merged.",
      "editor": "stringList",
      "prefill": [],
      "title": "Channel logins or URLs (mode=byChannel)",
      "type": "array"
    },
    "clipPeriod": {
      "default": "LAST_WEEK",
      "description": "Time window over which clips were created.",
      "editor": "select",
      "enum": [
        "LAST_DAY",
        "LAST_WEEK",
        "LAST_MONTH",
        "ALL_TIME"
      ],
      "enumTitles": [
        "Last 24 hours",
        "Last 7 days",
        "Last 30 days",
        "All time"
      ],
      "prefill": "LAST_WEEK",
      "title": "Clip time window",
      "type": "string"
    },
    "clipSlug": {
      "description": "Twitch clip slug or clip URL, e.g. `AcceptablePleasantAuberginePanicVis-EVdxDQ1vsQAQZpBS`.",
      "editor": "textfield",
      "title": "Clip slug (mode=byClip)",
      "type": "string"
    },
    "clipSlugs": {
      "default": [],
      "description": "Batch clip slugs or clip URLs. Duplicates and the single `clipSlug` are merged.",
      "editor": "stringList",
      "prefill": [],
      "title": "Clip slugs or URLs (mode=byClip)",
      "type": "array"
    },
    "clipSort": {
      "default": "VIEWS_DESC",
      "description": "Sort clips by views or trending score.",
      "editor": "select",
      "enum": [
        "VIEWS_DESC",
        "TRENDING"
      ],
      "enumTitles": [
        "Most viewed first",
        "Trending"
      ],
      "prefill": "VIEWS_DESC",
      "title": "Clip order",
      "type": "string"
    },
    "containsKeyword": {
      "description": "Case-insensitive substring filter on stream, VOD, and clip titles.",
      "editor": "textfield",
      "title": "Title contains keyword",
      "type": "string"
    },
    "includeChannelClips": {
      "default": true,
      "description": "Also fetch and emit top clips for each channel.",
      "prefill": true,
      "sectionCaption": "Channel Enrichment",
      "title": "Include clips (mode=byChannel)",
      "type": "boolean"
    },
    "includeChannelVideos": {
      "default": true,
      "description": "Also fetch and emit recent VODs for each channel.",
      "prefill": true,
      "title": "Include VODs (mode=byChannel)",
      "type": "boolean"
    },
    "language": {
      "default": "EN",
      "description": "Filter live streams, VODs, and clips to one broadcast language. Leave on `(any)` for no filter.",
      "editor": "select",
      "enum": [
        "",
        "EN",
        "ES",
        "DE",
        "FR",
        "PT",
        "RU",
        "JA",
        "KO",
        "ZH",
        "IT",
        "TR",
        "PL",
        "AR",
        "TH",
        "ID",
        "VI",
        "NL",
        "SV",
        "FI",
        "DA",
        "NO",
        "CS",
        "HU",
        "EL",
        "RO",
        "BG",
        "UK",
        "HE",
        "MS",
        "TL",
        "ASL",
        "OTHER"
      ],
      "enumTitles": [
        "(any)",
        "English (EN)",
        "Spanish (ES)",
        "German (DE)",
        "French (FR)",
        "Portuguese (PT)",
        "Russian (RU)",
        "Japanese (JA)",
        "Korean (KO)",
        "Chinese (ZH)",
        "Italian (IT)",
        "Turkish (TR)",
        "Polish (PL)",
        "Arabic (AR)",
        "Thai (TH)",
        "Indonesian (ID)",
        "Vietnamese (VI)",
        "Dutch (NL)",
        "Swedish (SV)",
        "Finnish (FI)",
        "Danish (DA)",
        "Norwegian (NO)",
        "Czech (CS)",
        "Hungarian (HU)",
        "Greek (EL)",
        "Romanian (RO)",
        "Bulgarian (BG)",
        "Ukrainian (UK)",
        "Hebrew (HE)",
        "Malay (MS)",
        "Tagalog (TL)",
        "American Sign Language (ASL)",
        "Other"
      ],
      "prefill": "EN",
      "sectionCaption": "Filters & Sorting",
      "title": "Broadcast language",
      "type": "string"
    },
    "maxFollowersCount": {
      "description": "Drop channels and live streams above this follower count. Useful for finding smaller creators.",
      "maximum": 100000000,
      "minimum": 0,
      "title": "Maximum followers",
      "type": "integer"
    },
    "maxItems": {
      "default": 50,
      "description": "Hard cap on emitted records. Twitch source caps still apply (e.g. about 1,000 clips per category).",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 3,
      "sectionCaption": "Limits",
      "title": "Max items",
      "type": "integer"
    },
    "minFollowersCount": {
      "description": "Drop channels and live streams below this follower count. VODs and clips are unaffected.",
      "maximum": 100000000,
      "minimum": 0,
      "title": "Minimum followers",
      "type": "integer"
    },
    "minViewCount": {
      "description": "Drop VODs and clips below this total view count.",
      "maximum": 100000000,
      "minimum": 0,
      "title": "Minimum total views",
      "type": "integer"
    },
    "minViewersCount": {
      "description": "Drop live streams (and categories) below this viewer count.",
      "maximum": 1000000,
      "minimum": 0,
      "title": "Minimum concurrent viewers",
      "type": "integer"
    },
    "mode": {
      "default": "topStreams",
      "description": "What to fetch.",
      "editor": "select",
      "enum": [
        "topStreams",
        "topGames",
        "search",
        "byChannel",
        "byCategory",
        "byCategoryVideos",
        "topClips",
        "byVideo",
        "byClip",
        "byUrl"
      ],
      "enumTitles": [
        "Top live streams",
        "Top games / categories",
        "Search Twitch (channels / categories / videos)",
        "Channel info + recent VODs + clips + schedule",
        "Browse a category (live streams)",
        "Browse a category (VODs)",
        "Top clips for a category",
        "Lookup VODs by video ID",
        "Lookup clips by slug",
        "Resolve Twitch URLs"
      ],
      "prefill": "topStreams",
      "sectionCaption": "Mode & Query",
      "title": "Mode",
      "type": "string"
    },
    "onlyLive": {
      "default": false,
      "description": "Drop channel profile records for channels that are not live right now. Their VODs and clips are still returned.",
      "prefill": false,
      "title": "Only live channels",
      "type": "boolean"
    },
    "searchQuery": {
      "default": "lirik",
      "description": "Free-text query for `mode=search` — matches channels, categories, and videos.",
      "editor": "textfield",
      "prefill": "lirik",
      "title": "Search query (mode=search)",
      "type": "string"
    },
    "searchType": {
      "default": "all",
      "description": "Restrict search results to one index. `all` returns channels, categories, and videos.",
      "editor": "select",
      "enum": [
        "all",
        "channel",
        "game",
        "video"
      ],
      "enumTitles": [
        "All result types",
        "Channels only",
        "Categories only",
        "Videos only"
      ],
      "prefill": "all",
      "title": "Search result type (mode=search)",
      "type": "string"
    },
    "streamSort": {
      "default": "VIEWER_COUNT",
      "description": "Sort live streams by viewers (high to low or low to high), recently started, or recommended.",
      "editor": "select",
      "enum": [
        "VIEWER_COUNT",
        "VIEWER_COUNT_ASC",
        "RECENT",
        "RELEVANCE"
      ],
      "enumTitles": [
        "Most viewers first",
        "Fewest viewers first",
        "Recently started first",
        "Recommended"
      ],
      "prefill": "VIEWER_COUNT",
      "title": "Live stream order",
      "type": "string"
    },
    "streamTags": {
      "default": [],
      "description": "Only live streams carrying all of these freeform tags, e.g. `English`, `DropsEnabled`, `NoBackseating`.",
      "editor": "stringList",
      "prefill": [],
      "title": "Stream tags",
      "type": "array"
    },
    "streamType": {
      "default": "",
      "description": "Restrict channel or category VODs to one broadcast type. Leave blank for all types.",
      "editor": "select",
      "enum": [
        "",
        "ARCHIVE",
        "HIGHLIGHT",
        "UPLOAD",
        "PAST_PREMIERE",
        "PREMIERE_UPLOAD"
      ],
      "enumTitles": [
        "(any)",
        "Archive (past broadcast)",
        "Highlight",
        "Upload",
        "Past Premiere",
        "Premiere Upload"
      ],
      "prefill": "",
      "title": "VOD type",
      "type": "string"
    },
    "twitchUrls": {
      "default": [],
      "description": "Channel, VOD, clip, or category URLs. Category and channel `/videos` and `/clips` tabs are supported.",
      "editor": "stringList",
      "prefill": [],
      "title": "Twitch URLs (mode=byUrl)",
      "type": "array"
    },
    "videoId": {
      "description": "Twitch VOD ID or VOD URL, e.g. `2766365638`.",
      "editor": "textfield",
      "title": "Video ID (mode=byVideo)",
      "type": "string"
    },
    "videoIds": {
      "default": [],
      "description": "Batch VOD IDs or VOD URLs. Duplicates and the single `videoId` are merged.",
      "editor": "stringList",
      "prefill": [],
      "title": "Video IDs or URLs (mode=byVideo)",
      "type": "array"
    },
    "videoSort": {
      "default": "TIME",
      "description": "Sort channel or category VODs by publish time or view count.",
      "editor": "select",
      "enum": [
        "TIME",
        "VIEWS"
      ],
      "enumTitles": [
        "Newest first (TIME)",
        "Most viewed first (VIEWS)"
      ],
      "prefill": "TIME",
      "title": "VOD order",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Twitch Scraper Input",
  "type": "object"
}
