Skip to content

User Videos

GET /v1/twitch/user/videos

Fetches a list of videos (100 max) for a Twitch user, returning each video's id, slug, url, embedURL, title, viewCount, language, durationSeconds, game info, broadcaster details with follower count, thumbnailURL, and videoQualities at multiple resolutions with a signed videoURL for playback. Supports pagination via cursor and a trim option for lighter responses.

Authentication

All requests require the x-api-key header. Get your key at scrapecreators.com.

Query Parameters

NameTypeRequiredDescriptionExample
handlestringyesTwitch handleishowspeed
filter_byenum(HIGHLIGHT, ARCHIVE, UPLOAD)noFilter by
sort_byenum(TIME, VIEWS)noSort by

Example Request

curl

bash
curl 'https://api.scrapecreators.com/v1/twitch/user/videos?handle=ishowspeed' \
  -H 'x-api-key: $SCRAPECREATORS_API_KEY'

Node / TypeScript

js
const params = new URLSearchParams({ handle: 'ishowspeed' });
const res = await fetch(`https://api.scrapecreators.com/v1/twitch/user/videos?${params}`, {
  headers: { 'x-api-key': process.env.SCRAPECREATORS_API_KEY }
});
const data = await res.json();
console.log(data);

Python

python
import os, requests
r = requests.get(
    'https://api.scrapecreators.com/v1/twitch/user/videos',
    headers={'x-api-key': os.environ['SCRAPECREATORS_API_KEY']},
    params={'handle': 'ishowspeed'},
)
r.raise_for_status()
print(r.json())

CLI

bash
scrapecreators twitch user-videos --help

Example Response

json
{
  "success": true,
  "credits_remaining": 49998363426,
  "id": "51496027",
  "isLive": true,
  "currentViewersCount": 2740,
  "stream": {
    "id": "319166855259",
    "createdAt": "2026-05-01T16:44:37Z",
    "game": {
      "id": "21779",
      "displayName": "League of Legends",
      "__typename": "Game"
    },
    "type": "live",
    "viewersCount": 2740,
    "__typename": "Stream",
    "tags": [
      {
        "id": "fft:CHANNEL:51496027:0",
        "name": "English",
        "__typename": "FreeformTag"
      }
    ]
  },
  "handle": "loltyler1",
  "displayName": "loltyler1",
  "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/f3591dbe4ee3d94b-profile_image-150x150.png",
  "bannerImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/303b0767-0fb4-4a9f-b8a1-2d8b99f24630-profile_banner-480.png",
  "description": "Season 6 Challenger | Most REFORMED Player NA | #1 Draven World ",
  "followers": 5469372,
  "x": "https://x.com/loltyler1?mx=2",
  "instagram": "https://www.instagram.com/tyler1_alpha/#",
  "youtube": "https://www.youtube.com/channel/UCwV_0HmQkRrTcrReaMxPeDw",
  "tiktok": "https://www.tiktok.com/@loltyler1",
  "isPartner": true,
  "allVideos": [
    {
      "animatedPreviewURL": "https://d1m7jfoe9zdc1j.cloudfront.net/f2ca91ee909630bdb3df_loltyler1_319166855259_1777653877/storyboards/2761630321-strip-0.jpg",
      "game": {
        "boxArtURL": "https://static-cdn.jtvnw.net/ttv-boxart/21779-40x56.jpg",
        "id": "21779",
        "slug": "league-of-legends",
        "displayName": "League of Legends",
        "name": "League of Legends",
        "__typename": "Game"
      },
      "id": "2761630321",
      "lengthSeconds": 931,
      "owner": {
        "displayName": "loltyler1",
        "id": "51496027",
        "login": "loltyler1",
        "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/f3591dbe4ee3d94b-profile_image-50x50.png",
        "primaryColorHex": null,
        "roles": {
          "isPartner": true,
          "__typename": "UserRoles"
        },
        "__typename": "User"
      },
      "previewThumbnailURL": "https://vod-secure.twitch.tv/_404/404_processing_320x180.png",
      "publishedAt": "2026-05-01T16:44:42Z",
      "self": {
        "isRestricted": false,
        "viewingHistory": null,
        "__typename": "VideoSelfEdge"
      },
      "title": "TRY MIGHT ! give NEVER ! BACKS NOT DOWN !! held high for MOMENT WAIT !!! tick ticks ticks ... CLOCK BY PATIENT THIN WAITER !! tick ... NOW !",
      "viewCount": 0,
      "resourceRestriction": null,
      "contentTags": [],
      "__typename": "Video"
    }
  ],
  "featuredClips": [
    {
      "id": "2907296184",
      "slug": "CogentSpeedyWallabyDxCat-nm23_xWWFTxoPI0C",
      "clipTitle": "ewc",
      "clipViewCount": 19427,
      "curator": {
        "id": "24179021",
        "login": "testrox",
        "displayName": "Testrox",
        "__typename": "User"
      },
      "clipGame": {
        "id": "55453844",
        
... (truncated)

Credits

Most ScrapeCreators endpoints consume 1 credit per successful response. Some heavier endpoints (transcripts, AI-driven enrichment, ad detail lookups) may cost more. Check GET /v1/credit-balance for your remaining balance.

Errors

StatusMeaningAction
200Success.Use the JSON payload.
400Invalid or missing parameter.Verify required parameters and value format.
401Missing or invalid x-api-key.Pass a valid API key in the header.
402Out of credits.Top up at scrapecreators.com or wait for plan reset.
404Resource not found or private.Confirm the handle, URL, or id and that the resource is public.
429Rate limited.Backoff and retry with exponential delay.
500Server error or upstream platform failure.Retry with backoff; report persistent errors to support.