Appearance
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
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
handle | string | yes | Twitch handle | ishowspeed |
filter_by | enum(HIGHLIGHT, ARCHIVE, UPLOAD) | no | Filter by | |
sort_by | enum(TIME, VIEWS) | no | Sort 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 --helpExample 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
| Status | Meaning | Action |
|---|---|---|
| 200 | Success. | Use the JSON payload. |
| 400 | Invalid or missing parameter. | Verify required parameters and value format. |
| 401 | Missing or invalid x-api-key. | Pass a valid API key in the header. |
| 402 | Out of credits. | Top up at scrapecreators.com or wait for plan reset. |
| 404 | Resource not found or private. | Confirm the handle, URL, or id and that the resource is public. |
| 429 | Rate limited. | Backoff and retry with exponential delay. |
| 500 | Server error or upstream platform failure. | Retry with backoff; report persistent errors to support. |