logoPandorLabs
social data api

Twitch

Profiles, videos, stream schedules and clips.

Channel profile1 request
Channel videos1 request
Stream schedule1 request
Clip details1 request
GET/v1/twitch/profile

Channel profile

1 request

Returns a Twitch channel's public profile from its handle: id, handle, displayName, description, follower count, and the channel's linked instagram, x and tiktok accounts. It also includes allVideos with game, duration and views, featuredClips carrying thumbnails and clip metadata, and similarStreamers.

Query parameters

handle
stringrequired
Twitch handle.
cache_max_age
string
Accept a stored response up to this age. Inside that window the answer is free and comes back with cached: true and a cached_at time; past it, the request runs live for 1 request.

1d3d7d14d30d

curl "https://api.pandorlabs.com/v1/twitch/profile?handle=ishowspeed" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "id": "220476955",
  "isLive": true,
  "currentViewersCount": 6293,
  "handle": "ishowspeed",
  "stream": {},
  "displayName": "IShowSpeed",
  "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/46a38d3a-a39c-4c43-ac12-c331b1c469c2-profile_image-150x150.png",
  "bannerImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/983dc814-a78c-4e5a-9d22-e6e7595c76e1-profile_banner-480.png",
  "description": "YouTube:IShowSpeed Instagram:IShowSpeed: Snapchat:wishowspeed Twitter: ishowspeedsui I luv y’all🐐💕",
  "followers": 3830874,
  "isPartner": true,
  "recentBroadcasts": [
    {
      "id": "2761014301",
      "title": "BALLER LEAGUE WEEK 7 ⚽️ SPEED UTD VS FOR THE WIN FC 🔥",
      "previewThumbnailURL": "https://vod-secure.twitch.tv/_404/404_processing_320x180.png",
      "publishedAt": "2026-04-30T21:38:06Z",
      "viewCount": 702,
      "lengthSeconds": 13895,
      "animatedPreviewURL": "https://d2vi6trrdongqn.cloudfront.net/1dfa1f8c049eaa77fe54_ishowspeed_318481977952_1777585080/storyboards/2761014301-strip-0.jpg",
      "resourceRestriction": null,
      "contentTags": [],
      "self": {
        "isRestricted": false,
        "viewingHistory": null,
        "__typename": "VideoSelfEdge"
      },
      "game": {
        "id": "423594505",
        "slug": "baller-league",
        "boxArtURL": "https://static-cdn.jtvnw.net/ttv-boxart/423594505-40x56.jpg",
        "displayName": "Baller League",
        "name": "Baller League",
        "__typename": "Game"
      },
      "owner": {
        "id": "220476955",
        "displayName": "IShowSpeed",
        "login": "ishowspeed",
        "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/46a38d3a-a39c-4c43-ac12-c331b1c469c2-profile_image-50x50.png",
        "primaryColorHex": "FF4747",
        "__typename": "User"
      },
      "__typename": "Video"
    }
  ],
  "allVideos": [
    {
      "animatedPreviewURL": "https://d2vi6trrdongqn.cloudfront.net/1dfa1f8c049eaa77fe54_ishowspeed_318481977952_1777585080/storyboards/2761014301-strip-0.jpg",
      "game": {
        "boxArtURL": "https://static-cdn.jtvnw.net/ttv-boxart/423594505-40x56.jpg",
        "id": "423594505",
        "slug": "baller-league",
        "displayName": "Baller League",
        "name": "Baller League",
        "__typename": "Game"
      },
      "id": "2761014301",
      "lengthSeconds": 13895,
      "owner": {
        "displayName": "IShowSpeed",
        "id": "220476955",
        "login": "ishowspeed",
        "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/46a38d3a-a39c-4c43-ac12-c331b1c469c2-profile_image-50x50.png",
        "primaryColorHex": "FF4747",
        "roles": {
          "isPartner": true,
          "__typename": "UserRoles"
        },
        "__typename": "User"
      },
      "previewThumbnailURL": "https://vod-secure.twitch.tv/_404/404_processing_320x180.png",
      "publishedAt": "2026-04-30T21:38:06Z",
      "self": {
        "isRestricted": false,
        "viewingHistory": null,
        "__typename": "VideoSelfEdge"
      },
      "title": "BALLER LEAGUE WEEK 7 ⚽️ SPEED UTD VS FOR THE WIN FC 🔥",
      "viewCount": 702,
      "resourceRestriction": null,
      "contentTags": [],
      "__typename": "Video"
    }
  ],
  "similarStreamers": []
}
GET/v1/twitch/user/videos

Channel videos

1 request

Lists up to 100 videos from a Twitch channel. Each has id, slug, url, embedURL, title, viewCount, language, durationSeconds, game details, broadcaster details including its follower count, thumbnailURL, and videoQualities at several resolutions, each with a signed videoURL you can play. Pagination uses a cursor, and a trim option gives a lighter payload.

Query parameters

handle
stringrequired
Twitch handle.
filter_by
string
Video type to return: highlights, past broadcasts or uploads.

HIGHLIGHTARCHIVEUPLOAD

sort_by
string
Order videos by recency or by views.

TIMEVIEWS

curl "https://api.pandorlabs.com/v1/twitch/user/videos?handle=ishowspeed" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "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",
        "slug": "street-fighter-6",
        "name": "Street Fighter 6",
        "displayName": "Street Fighter 6",
        "boxArtURL": "https://static-cdn.jtvnw.net/ttv-boxart/55453844_IGDB-52x72.jpg",
        "__typename": "Game"
      },
      "broadcaster": {
        "id": "51496027",
        "login": "loltyler1",
        "displayName": "loltyler1",
        "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/f3591dbe4ee3d94b-profile_image-50x50.png",
        "primaryColorHex": null,
        "roles": {
          "isPartner": true,
          "__typename": "UserRoles"
        },
        "__typename": "User"
      },
      "thumbnailURL": "https://static-cdn.jtvnw.net/twitch-video-assets/twitch-vap-video-assets-prod-us-west-2/53f846ec-21aa-49e4-92e0-3e93b61726f7/landscape/thumb/thumb-0000000000-1920x1080.jpg",
      "createdAt": "2025-07-05T08:09:03Z",
      "durationSeconds": 25,
      "isFeatured": true,
      "guestStarParticipants": {
        "host": {
          "id": "51496027",
          "login": "loltyler1",
          "displayName": "loltyler1",
          "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/f3591dbe4ee3d94b-profile_image-300x300.png",
          "primaryColorHex": null,
          "description": "Season 6 Challenger | Most REFORMED Player NA | #1 Draven World ",
          "__typename": "User"
        },
        "guests": [],
        "sessionIdentifier": "2xmd2itvLAiTeLZsWCYYpifxYv1",
        "__typename": "GuestStarParticipants"
      },
      "__typename": "Clip"
    }
  ],
  "similarStreamers": [
    {
      "id": "459567713",
      "displayName": "SpectateTyler1",
      "login": "spectatetyler1",
      "primaryColorHex": "1F69FF",
      "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/184aa4fd-1fd7-42ab-8170-5b98bd2fb37f-profile_image-300x300.png",
      "stream": null,
      "__typename": "User"
    }
  ]
}
GET/v1/twitch/user/schedule

Stream schedule

1 request

Returns a Twitch channel's broadcast schedule from its handle. Every scheduled event carries its title, description, thumbnail URL, and when it starts and ends. Pagination uses a cursor, and a trim option gives a lighter payload.

Query parameters

handle
stringrequired
Twitch handle.
curl "https://api.pandorlabs.com/v1/twitch/user/schedule?handle=emongg" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "id": "23220337",
  "primaryColorHex": null,
  "lastBroadcast": {
    "id": "318502443360",
    "startedAt": "2026-05-02T08:26:08.899139Z",
    "__typename": "Broadcast"
  },
  "broadcastSettings": {
    "id": "23220337",
    "title": "Checking out Diablo IV: Lord of Hatred! !diablo #DiabloPartner #ad",
    "__typename": "BroadcastSettings"
  },
  "stream": {
    "id": "318502443360",
    "createdAt": "2026-05-02T08:26:00Z",
    "viewersCount": 2994,
    "previewImageURL": "https://static-cdn.jtvnw.net/previews-ttv/live_user_emongg-320x180.jpg",
    "verticalPreviewImageURL": "https://static-cdn.jtvnw.net/previews-ttv/live_user_emongg-180x320.jpg",
    "height": 900,
    "width": 1600,
    "isDualFormat": false,
    "game": {
      "id": "515024",
      "slug": "diablo-iv",
      "name": "Diablo IV",
      "__typename": "Game"
    },
    "__typename": "Stream"
  },
  "videos": {
    "edges": [
      {
        "node": {
          "id": "2762226372",
          "title": "[!DROPS ENABLED + WINTON BADGE] watching owcs, gaming",
          "createdAt": "2026-05-02T08:26:09Z",
          "lengthSeconds": 41352,
          "viewCount": 196,
          "previewThumbnailURL": "https://vod-secure.twitch.tv/_404/404_processing_320x180.png",
          "game": {
            "id": "515025",
            "slug": "overwatch-2",
            "name": "Overwatch",
            "__typename": "Game"
          },
          "__typename": "Video"
        },
        "__typename": "VideoEdge"
      }
    ],
    "__typename": "VideoConnection"
  },
  "channel": {
    "id": "23220337",
    "schedule": {
      "id": "schedule-23220337",
      "nextSegment": {
        "id": "eyJzZWdtZW50SUQiOiI4ZThhMTczMS1hYjU0LTQxZDMtOTEzMy02N2JjZTM0NTRiMzUiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjoxOH0=",
        "startAt": "2026-05-03T11:00:00Z",
        "__typename": "ScheduleSegment"
      },
      "interruption": null,
      "segments": [
        {
          "id": "eyJzZWdtZW50SUQiOiI5NjU1NWMwMC03OGZkLTQ4NTQtYTIyZS1kYWNjOGU3ZWZlYzkiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjoxOH0=",
          "baseSegmentID": "96555c00-78fd-4854-a22e-dacc8e7efec9",
          "title": "",
          "startAt": "2026-04-27T11:00:00Z",
          "endAt": "2026-04-27T21:00:00Z",
          "isCancelled": false,
          "cancelledUntil": null,
          "hasReminder": false,
          "repeatEndsAfterCount": null,
          "categories": [],
          "__typename": "ScheduleSegment"
        }
      ],
      "__typename": "Schedule"
    },
    "__typename": "Channel"
  },
  "__typename": "User"
}
GET/v1/twitch/clip

Clip details

1 request

Returns a Twitch clip from its URL, with direct video links. Fields include id, slug, url, embedURL, title, viewCount, language, durationSeconds, game details, broadcaster details including its follower count, thumbnailURL, and videoQualities at several resolutions, each including a signed, playable videoURL. Other clips from the same broadcaster come back alongside it.

Query parameters

url
stringrequired
Link to the Twitch clip.
cache_max_age
string
Accept a stored response up to this age. Inside that window the answer is free and comes back with cached: true and a cached_at time; past it, the request runs live for 1 request.

1d3d7d14d30d

curl "https://api.pandorlabs.com/v1/twitch/clip?url=https%3A%2F%2Fwww.twitch.tv%2Fstaryuuki%2Fclip%2FCloudySavageMarjoramRuleFive--ErzsYbE7UWvgCMQ%3Ffilter%3Dclips%26range%3Dall%26sort%3Dtime" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

[
  {
    "data": {
      "clip": {
        "id": "387484507",
        "slug": "CloudySavageMarjoramRuleFive--ErzsYbE7UWvgCMQ",
        "url": "https://clips.twitch.tv/CloudySavageMarjoramRuleFive--ErzsYbE7UWvgCMQ",
        "embedURL": "https://clips.twitch.tv/embed?clip=CloudySavageMarjoramRuleFive--ErzsYbE7UWvgCMQ",
        "title": "un grande el mesero",
        "viewCount": 52441,
        "language": "ES",
        "isFeatured": true,
        "assets": [
          {
            "id": "AT-cm|W4NkMPhK87GGxO1Fr4AjEA",
            "aspectRatio": 1.7777777777777777,
            "type": "SOURCE",
            "createdAt": "2024-03-30T21:52:12.134391826Z",
            "creationState": "CREATED",
            "curator": {
              "id": "192477639",
              "login": "satagul_sy",
              "displayName": "Satagul_SY",
              "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/a7d1cf0c-6482-475c-a7ba-9fedf75f0149-profile_image-50x50.png",
              "__typename": "User"
            },
            "thumbnailURL": "https://clips-media-assets2.twitch.tv/W4NkMPhK87GGxO1Fr4AjEA/AT-cm%7CW4NkMPhK87GGxO1Fr4AjEA-preview-480x272.jpg",
            "videoQualities": [
              {}
            ],
            "portraitMetadata": null,
            "__typename": "ClipAsset"
          }
        ],
        "curator": {
          "id": "192477639",
          "login": "satagul_sy",
          "displayName": "Satagul_SY",
          "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/a7d1cf0c-6482-475c-a7ba-9fedf75f0149-profile_image-70x70.png",
          "__typename": "User"
        },
        "game": {
          "id": "509672",
          "name": "IRL",
          "boxArtURL": "https://static-cdn.jtvnw.net/ttv-boxart/509672-52x72.jpg",
          "displayName": "IRL",
          "slug": "irl",
          "__typename": "Game"
        },
        "broadcast": {
          "id": "43930529883",
          "title": null,
          "__typename": "Broadcast"
        },
        "broadcaster": {
          "id": "167189231",
          "login": "staryuuki",
          "displayName": "Staryuuki",
          "primaryColorHex": "689AFF",
          "isPartner": true,
          "profileImageURL": "https://static-cdn.jtvnw.net/jtv_user_pictures/b45a3305-bc42-41cc-a754-e6679a2d9ef0-profile_image-70x70.png",
          "followers": {
            "totalCount": 3450065,
            "__typename": "FollowerConnection"
          },
          "stream": null,
          "lastBroadcast": {
            "id": "314597248121",
            "startedAt": "2025-01-23T06:52:10.179125Z",
            "__typename": "Broadcast"
          },
          "self": null,
          "__typename": "User"
        },
        "thumbnailURL": "https://clips-media-assets2.twitch.tv/W4NkMPhK87GGxO1Fr4AjEA/AT-cm%7CW4NkMPhK87GGxO1Fr4AjEA-preview-260x147.jpg",
        "createdAt": "2024-03-30T21:52:12Z",
        "isPublished": true,
        "durationSeconds": 27,
        "champBadge": null,
        "playbackAccessToken": {
          "signature": "43c84d015eddd8ebc145f914824caa1c37ff6559",
          "value": "{\"authorization\":{\"forbidden\":false,\"reason\":\"\"},\"clip_uri\":\"https://production.assets.clips.twitchcdn.net/W4NkMPhK87GGxO1Fr4AjEA/AT-cm%7CW4NkMPhK87GGxO1Fr4AjEA.mp4\",\"clip_slug\":\"CloudySavageMarjoramRuleFive--ErzsYbE7UWvgCMQ\",\"device_id\":\"g…",
          "__typename": "PlaybackAccessToken"
        },
        "video": null,
        "videoOffsetSeconds": null,
        "videoQualities": [
          {
            "sourceURL": "https://production.assets.clips.twitchcdn.net/W4NkMPhK87GGxO1Fr4AjEA/AT-cm%7CW4NkMPhK87GGxO1Fr4AjEA.mp4",
            "__typename": "ClipVideoQuality"
          }
        ],
        "isViewerEditRestricted": true,
        "suggestedCropping": null,
        "__typename": "Clip",
        "videoURL": "https://production.assets.clips.twitchcdn.net/W4NkMPhK87GGxO1Fr4AjEA/AT-cm%7CW4NkMPhK87GGxO1Fr4AjEA.mp4?sig=43c84d015eddd8ebc145f914824caa1c37ff6559&token=%7B%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22c…"
      }
    },
    "extensions": {
      "durationMilliseconds": 87,
      "operationName": "ShareClipRenderStatus",
      "requestID": "01JJD92A0J3G5ND9PWV2SSXCPC"
    }
  }
]