Streamer and channel research
Use Twitch endpoints to turn streamer and channel research into repeatable API requests with documented inputs and JSON responses.
Turn Twitch's public channel, stream, clip, and team data into structured JSON — live status and viewer counts, top games, clips, VODs, and team rosters — as normalized JSON. Credential-free.
Collect Twitch channel, live stream, clips, videos, search, top games, and team data through documented Crawlora API endpoints.
Endpoint families
6
Documented params
24
Examples
9
Live catalog snapshot
Active endpoints
9
Methods
GET
Required params
17
Schema refs
9
{
"platform": "Twitch",
"endpoint": "twitch-channel",
"method": "GET",
"path": "/twitch/channel",
"auth": "apiKey"
}Use cases
Collect Twitch channel, live stream, clips, videos, search, top games, and team data through documented Crawlora API endpoints.
Use Twitch endpoints to turn streamer and channel research into repeatable API requests with documented inputs and JSON responses.
Use Twitch endpoints to turn live viewership and category tracking into repeatable API requests with documented inputs and JSON responses.
Use Twitch endpoints to turn esports team and org monitoring into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Twitch endpoint catalog — 9 endpoints, 24 documented request parameters, and 9 published response schemas — the same catalog Docs and Playground run against.
9 documented Twitch endpoints, grouped into 9 request families — Channel, Clips and Schedule, plus 6 more.
24 request parameters are documented across those Twitch endpoints, 17 of them required — the full input contract is public before you write any integration code.
9 of the 9 Twitch endpoints ship a recorded example response, and 9 carry a documented response schema — you can code against the real JSON before the first request.
Twitch endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
9 hosted MCP tools back the Twitch endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/twitch/channel
/twitch/clips
/twitch/schedule
/twitch/search
/twitch/streams
/twitch/team
Endpoint catalog
/twitch/channelReturns a Twitch channel's profile (partner status, team, last broadcast title) plus its current live status (started time and game/category, when live). Public data sourced from Twitch's own GraphQL API.
Response notes
- `is_live`/`stream` reflect the channel's live status at request time. `stream` is omitted when the channel is offline. - `stream.game` is the game/category the channel is currently streaming under — pass its `slug` to [`/twitch/streams`](twitch-streams.md) to see other live streams in the same category. - Live viewer count is not available from this endpoint — see [`/twitch/streams`](twitch-streams.md), which only exposes viewer counts on the per-category listing shape. - An unknown login returns `404`. A missing `login` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": "92038375", "login": "caedrel", "is_partner": true, "profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/483a37ac-58fd-4e2f-8dc3-2c68a0164112-profile_image-70x70.png", "primary_color_hex": "8205B3", "primary_team": { "id": "1366421358", "name": "Yume Talent" }, "last_broadcast_title": "LCK T1 VS DK - T1 HOMEGROUND", "is_live": true, "stream": { "id": "317457454434", "started_at": "2026-08-14T07:18:46Z", "game": { "id": "21779", "slug": "league-of-legends", "name": "League of Legends" } } } } ```
MCP tool twitch_channel
/twitch/streamsReturns the top currently-live streams for a Twitch game/category, ranked by viewer count: title, viewer count, broadcaster, and tags. Public data sourced from Twitch's own GraphQL API.
Response notes
- `streams` is ordered by `viewers_count` descending — Twitch's own default directory sort. - `tags` are the stream's freeform tags (language, event, etc.) as Twitch itself surfaces them, not a curated taxonomy. - An unknown game/category slug returns `404`. A missing `game` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "game": "league-of-legends", "count": 20, "streams": [ { "id": "317457454434", "title": "LCK T1 VS DK - T1 HOMEGROUND", "viewers_count": 59142, "preview_image_url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_caedrel-640x360.jpg", "broadcaster": { "id": "92038375", "login": "caedrel", "display_name": "Caedrel", "is_partner": true }, "tags": ["English", "LCK", "Worlds", "Esports"] } ] } } ```
MCP tool twitch_streams
/twitch/clipsReturns a Twitch channel's clips (last 7 days), most-viewed first: title, view count, duration, curator, and the game it was recorded under. Public data sourced from Twitch's own GraphQL API.
Response notes
- `clips` is ordered by view count descending, scoped to clips created in the last 7 days — Twitch's own default clips-tab window and sort. - `curator` is the user who created the clip, which is often a viewer, not the broadcaster. - An unknown login returns `404`. A missing `login` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "login": "caedrel", "count": 20, "clips": [ { "id": "3804362741", "url": "https://www.twitch.tv/caedrel/clip/LitigiousChillyBaboonCclamChamp-hhXP4-A8YhevOQRo", "title": "ROAMER LOCKE PENTA KILL ends the game", "view_count": 5370, "duration_seconds": 42, "created_at": "2026-08-07T10:59:22Z", "thumbnail_url": "https://static-cdn.jtvnw.net/twitch-video-assets/.../thumb-0000000000-1920x1080.jpg", "game": { "id": "21779", "slug": "league-of-legends", "name": "League of Legends" }, "curator": { "id": "29221067", "login": "daniel0527", "display_name": "凡人" } } ] } } ```
MCP tool twitch_clips
/twitch/videosReturns a Twitch channel's past-broadcast videos (VODs), ranked by view count: title, view count, length, publish date, and the game it was recorded under. Public data sourced from Twitch's own GraphQL API.
Response notes
- `videos` is ordered by view count descending — Twitch's own "Popular" sort for the videos tab, scoped to `ARCHIVE`-type broadcasts (past livestreams), not highlights or uploads. - An unknown login returns `404`. A missing `login` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "login": "lck", "count": 20, "videos": [ { "id": "1443936760", "title": "T1 vs GEN | 2022 LCK Spring FINALS", "view_count": 2800795, "length_seconds": 20818, "published_at": "2022-04-02T07:10:16Z", "thumbnail_url": "https://static-cdn.jtvnw.net/cf_vods/.../thumb0-320x180.jpg", "game": { "id": "21779", "slug": "league-of-legends", "name": "League of Legends" }, "owner": { "id": "124425501", "login": "lck", "display_name": "LCK", "is_partner": true } } ] } } ```
MCP tool twitch_videos
/twitch/searchReturns mixed category and channel matches for a query -- live channels include current viewer count and stream title. Sourced from Twitch's own search-typeahead surface (a capped suggestion list, not a fully paginated results page).
Response notes
- This endpoint is sourced from Twitch's own search **typeahead** surface (what powers the suggestions dropdown as you type in the site's search box), not a fully paginated `/search` results page — results are capped to a small, ranked suggestion list rather than paginated. It still returns complete, real category and channel data. - Each `results` entry has `type` set to either `category` or `channel`, with only the matching field (`category` or `channel`) populated. - A `channel` entry's `viewers_count`, `stream_title`, and `game_name` are only populated when `is_live` is `true`. - A missing `query` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "valorant", "count": 10, "results": [ { "type": "category", "text": "VALORANT", "category": { "id": "516575", "slug": "valorant", "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/516575-60x80.jpg" } }, { "type": "channel", "text": "VALORANT_Pacific", "channel": { "id": "610457628", "login": "valorant_pacific", "is_live": true, "viewers_count": 3433, "stream_title": "FS vs QTD / TS vs XIP - VCT Pacific - Stage 2 - Play Ins - Day 2", "game_name": "VALORANT", "profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/abba2816-c2e0-44b2-9841-49ad1660465b-profile_image-50x50.png" } } ] } } ```
MCP tool twitch_search
/twitch/top-gamesReturns the top games/categories site-wide, ranked by total current viewers across all live streams under each one. Public data sourced from Twitch's own GraphQL API.
Response notes
- `games` is ordered by `viewers_count` descending — Twitch's own default directory sort, matching the unfiltered `twitch.tv/directory` page. - `viewers_count` is the sum across every live stream currently under that game, not a single stream's count — use [`/twitch/streams`](twitch-streams.md) for per-stream viewer counts within a game. Example response: ```json { "code": 200, "msg": "OK", "data": { "count": 20, "games": [ { "id": "29595", "slug": "dota-2", "name": "Dota 2", "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/29595-285x380.jpg", "viewers_count": 390201, "tags": ["Strategy", "MOBA", "Action"] }, { "id": "21779", "slug": "league-of-legends", "name": "League of Legends", "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/21779-285x380.jpg", "viewers_count": 206554, "tags": ["RPG", "Strategy", "MOBA", "Action"] } ] } } ```
MCP tool twitch_top_games
/twitch/teamReturns a Twitch team's full member roster, with live status and viewer count for whoever is currently live, plus team-level metadata (banner, logo, description, owner). Public data sourced from Twitch's own GraphQL API.
Response notes
- `member_count` is the team's total member count; `members` lists every member with `is_live`/`viewers_count` populated for whoever is currently streaming. - Team-level metadata (`display_name`, `description`, `logo_url`, `banner_url`, `owner_login`) comes from a second upstream call. If that call fails, the response still succeeds with the member roster populated and metadata fields omitted — the roster is the primary payload. - An unknown team slug returns `404`. A missing `team` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "id": "1366421358", "name": "yumetalent", "display_name": "Yume Talent", "logo_url": "https://static-cdn.jtvnw.net/team-assets/yumetalent-726f49791ba64632b59c99061780353f.jpeg", "banner_url": "https://static-cdn.jtvnw.net/team-assets/yumetalent-c01a9fe59fed40579144aaf79ba5edd1.jpeg", "owner_login": "yumetalent", "member_count": 5, "members": [ { "id": "92038375", "login": "caedrel", "display_name": "Caedrel", "profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/483a37ac-58fd-4e2f-8dc3-2c68a0164112-profile_image-50x50.png", "is_live": true, "viewers_count": 38800 }, { "id": "35739604", "login": "rekkles", "display_name": "Rekkles", "is_live": true, "viewers_count": 1186 } ] } } ```
MCP tool twitch_team
/twitch/scheduleReturns a Twitch channel's upcoming broadcast schedule -- planned segments with title, start/end time, and game/category -- starting today. A channel with no schedule configured returns an empty segments list, not an error. Public data sourced from Twitch's own GraphQL API.
Response notes
- A channel with no schedule configured returns a `200` with an empty `segments` list, not an error. - `next_segment_id`/`next_segment_at` identify the next upcoming segment (which may be outside the requested `weeks` window if the window starts mid-gap). - Each segment's `categories` lists the game(s) planned for that broadcast; a segment can have zero categories if none was set. - An unknown channel login returns `404`. A missing `channel` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "channel": "caedrel", "count": 5, "next_segment_id": "eyJzZWdtZW50SUQiOiJkYjgzMmNiYi1lMmUzLTQzODUtOTRiYS1iNTQ4MTk2M2E4ODkiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozM30=", "next_segment_at": "2026-08-15T12:00:00Z", "segments": [ { "id": "eyJzZWdtZW50SUQiOiI3YmJmYzA3OC00Nzg3LTQzMWEtOWQ4Yy0xNDRjYmI3YWRkOWIiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozM30=", "title": "LEC", "start_at": "2026-08-10T12:00:00Z", "end_at": "2026-08-10T19:00:00Z", "is_cancelled": false, "categories": [ { "id": "21779", "slug": "league-of-legends", "name": "League of Legends", "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/21779-144x192.jpg" } ] } ] } } ```
MCP tool twitch_schedule
/twitch/vod-commentsReturns one page of a Twitch VOD's chat replay (past-broadcast chat messages), starting at a given point in the video's timeline. Paginate forward by re-requesting with the last returned comment's offset_seconds. Public data sourced from Twitch's own GraphQL API.
Response notes
- Pagination is offset-based only: use the last returned comment's `offset_seconds` (or `next_offset_seconds`) as the next request's `offset` to page forward. Twitch's own cursor-based paging mode for this operation requires a device-integrity token this endpoint does not carry, so it is not exposed here. - `message` is the comment's flattened plain text; `fragments` breaks it into text/emote runs, with `emote_id` set on emote fragments. - `has_more` reflects whether Twitch has additional comments after this page's last offset. - A video with no chat replay data (or that never had chat) returns a `200` with an empty `comments` list. - An unknown video id returns `404`. A missing `video` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "video_id": "2845804307", "offset_seconds": 0, "count": 55, "has_more": true, "next_offset_seconds": 140, "comments": [ { "id": "d19286b9-dd9c-45b7-91eb-1fff28926f2c", "commenter": { "id": "271911711", "login": "mrfluffernuts", "display_name": "mrfluffernuts" }, "offset_seconds": 53, "created_at": "2026-08-14T07:19:45.217Z", "message": "I'm going to spend my 50million during game 5 of worlds so you have to end stream @caedrel", "fragments": [ { "text": "I'm going to spend my 50million during game 5 of worlds so you have to end stream @caedrel" } ] } ] } } ```
MCP tool twitch_vod_comments
Related APIs
Social & Creator Platforms
Build creator intelligence, video research, transcript, and audience-comment workflows without maintaining YouTube scrapers.
Social & Creator Platforms
Track creator, content, hashtag, music, trend, and public ad creative signals from TikTok with production-ready API routes.
Social & Creator Platforms
Turn Instagram public data into structured inputs for social listening and creator research.
Company coverage
Amazon.com, Inc. · AMZN
Twitch is operated by Amazon.com, Inc. (AMZN). Crawlora's SEC endpoints take the same company's CIK, so filings, financials, insider transactions and 13F holdings come from the same API key as the Twitch endpoints above.
SEC filings & financials API →How to scrape Twitch
Crawlora's Twitch endpoints return channel, stream, clip, video, and team data as structured JSON with one API key — no Twitch account or OAuth required.
Pass a channel login to /twitch/channel for profile, partner status, team, and current live status.
Pass a game/category slug to /twitch/streams for the top live streams, ranked by viewer count.
Use /twitch/clips and /twitch/videos for a channel's clips and past-broadcast videos.
Use /twitch/search for mixed category/channel matches, or /twitch/top-games for the site-wide top games directory.
Pass a team slug to /twitch/team for the full member roster with live status and viewer counts.
FAQ
Send a channel login to Crawlora's /twitch/channel endpoint and get profile and live-status data as structured JSON — no Twitch account required.
Yes — /twitch/streams returns the top live streams for a game/category, ranked by viewer count.
No Twitch login or OAuth token is required from the caller — only your Crawlora API key.
Yes — /twitch/team returns a team's full member roster, with live status and viewer count for whoever is currently live.
Collecting publicly accessible channel, stream, and clip data is generally permissible if you respect Twitch's terms of use, robots directives, rate limits, and applicable law. This is for public data you are authorized to collect.