Twitch Profile API
Twitch channel — handle + displayName, socials[], topClips, schedule preview, stream only when live (1 credit).
GET request to /v1/twitch/profile that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the Twitch Profile API?
Pass a Twitch channel URL or username and get a clean profile (no GraphQL junk). Identity is handle + displayName only — login/username/name are not shipped (they collide with handle or displayName depending on the channel). bio / avatar / banner have no description/profileImage/bannerImage twins. Also: isPartner/isAffiliate, isLive, stream{title, game, gameBoxArtUrl, viewers, startedAt, thumbnail} when live (omitted when offline — isLive:false already said it), lastBroadcast{} when Twitch exposes one, socials[{platform,url,title}] from channel panels / socialMedias, recentVideos[] (same lean row as /twitch/user-videos: broadcastType, gameId/gameSlug, no per-row broadcaster*), topClips[], and schedule[] (lean preview, max 10). Canonical full schedule: GET /v1/twitch/user-schedule. Empty bio is omitted, not nulled. Accepts cache / cacheMaxAge=1d|3d|7d|14d|30d. Flat 1 credit.
What you get
- socials[] from DefaultPanel linkURLs + socialMedias
- topClips[] + schedule[] preview (user-schedule is the dedicated schedule endpoint)
- stream omitted when offline; VOD thumbs substituted to 320x180
- handle + displayName (no login/username/name twins)
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/twitch/profile?url=https%3A%2F%2Fwww.twitch.tv%2Fshroud" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"platform": "twitch",
"id": "37402112",
"displayName": "shroud",
"url": "https://www.twitch.tv/shroud",
"followers": 11290546,
"isPartner": true,
"isAffiliate": false,
"isLive": false,
"recentVideos": [
{
"platform": "twitch",
"id": "2827992810",
"url": "https://www.twitch.tv/videos/2827992810",
"embedUrl": "https://player.twitch.tv/?video=2827992810&parent=captapi.com",
"title": "ME N THE GIRLS R GONNA POP OFF IN THIS 100K TWITCH RIVALS",
"createdAt": "2026-07-24T17:56:52Z",
"durationSeconds": 20988,
"views": 246850,
"thumbnail": "https://static-cdn.jtvnw.net/cf_vods/d2nvs31859zcd8/c43d1ce993fae5a15f69_shroud_317074350583_1784915807//thumb/thumb0-320x180.jpg",
"thumbnailTemplate": "https://static-cdn.jtvnw.net/cf_vods/d2nvs31859zcd8/c43d1ce993fae5a15f69_shroud_317074350583_1784915807//thumb/thumb0-{width}x{height}.jpg",
"animatedPreviewUrl": "https://d2nvs31859zcd8.cloudfront.net/c43d1ce993fae5a15f69_shroud_317074350583_1784915807/storyboards/2827992810-strip-0.jpg",
"broadcastType": "ARCHIVE",
"game": "VALORANT",
"gameId": "516575",
"gameSlug": "valorant",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/516575-144x192.jpg",
"language": "en"
},
{
"platform": "twitch",
"id": "2827192082",
"url": "https://www.twitch.tv/videos/2827192082",
"embedUrl": "https://player.twitch.tv/?video=2827192082&parent=captapi.com",
"title": "HALO CE REMAKE! TIME TO CO-OP LEGENDARY AND GET OUR MEAT BEAT",
"createdAt": "2026-07-23T18:19:36Z",
"durationSeconds": 20254,
"views": 176103,
"thumbnail": "https://static-cdn.jtvnw.net/cf_vods/d2vi6trrdongqn/43c3501090df2005acdf_shroud_319635395040_1784830770//thumb/thumb0-320x180.jpg",
"thumbnailTemplate": "https://static-cdn.jtvnw.net/cf_vods/d2vi6trrdongqn/43c3501090df2005acdf_shroud_319635395040_1784830770//thumb/thumb0-{width}x{height}.jpg",
"animatedPreviewUrl": "https://d2vi6trrdongqn.cloudfront.net/43c3501090df2005acdf_shroud_319635395040_1784830770/storyboards/2827192082-strip-0.jpg",
"broadcastType": "ARCHIVE",
"game": "Halo: Campaign Evolved",
"gameId": "796500915",
"gameSlug": "halo-campaign-evolved",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/796500915_IGDB-144x192.jpg",
"language": "en"
}
],
"topClips": [
{
"platform": "twitch",
"id": "2358589597",
"slug": "TangentialBillowingJalapenoYee-ccA2oB1pEYh4CHWJ",
"url": "https://www.twitch.tv/shroud/clip/TangentialBillowingJalapenoYee-ccA2oB1pEYh4CHWJ",
"embedUrl": "https://clips.twitch.tv/embed?clip=TangentialBillowingJalapenoYee-ccA2oB1pEYh4CHWJ",
"title": "F Shroud",
"views": 562324,
"createdAt": "2023-06-02T11:41:50Z",
"thumbnail": "https://static-cdn.jtvnw.net/twitch-video-assets/twitch-vap-video-assets-prod-us-west-2/5696a6a8-e053-4c2e-a54c-5ca62c48102e/landscape/thumb/thumb-0000000000-1920x1080.jpg",
"game": "Diablo IV",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/515024-144x192.jpg"
},
{
"platform": "twitch",
"id": "3663533447",
"slug": "SuccessfulEndearingPidgeonPunchTrees-46KXLAMeuS9kpp5Q",
"url": "https://www.twitch.tv/shroud/clip/SuccessfulEndearingPidgeonPunchTrees-46KXLAMeuS9kpp5Q",
"embedUrl": "https://clips.twitch.tv/embed?clip=SuccessfulEndearingPidgeonPunchTrees-46KXLAMeuS9kpp5Q",
"title": "it's gonna be over",
"views": 561935,
"createdAt": "2023-08-05T10:53:38Z",
"thumbnail": "https://static-cdn.jtvnw.net/twitch-video-assets/twitch-vap-video-assets-prod-us-west-2/05f80190-90b4-4569-94ce-36a01d87b191/landscape/thumb/thumb-0000000000-1920x1080.jpg",
"game": "Baldur's Gate 3",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/512923_IGDB-144x192.jpg"
}
],
"schedule": [
{
"id": "eyJzZWdtZW50SUQiOiI4OTdjMTZjNy1jYTYyLTQ4OGItODI4ZS0wY2Q1OTdjMzEyNzUiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozM30=",
"startAt": "2026-08-16T18:00:00Z",
"endAt": "2026-08-17T02:00:00Z",
"isRecurring": false,
"isCancelled": false
},
{
"id": "eyJzZWdtZW50SUQiOiJkNDYzZDJmNy1jNGQ3LTQ0ZTgtYWU0OS01OTlkNjI1Y2RkMTMiLCJpc29ZZWFyIjoyMDI2LCJpc29XZWVrIjozNH0=",
"startAt": "2026-08-17T18:00:00Z",
"endAt": "2026-08-18T02:00:00Z",
"isRecurring": true,
"isCancelled": false,
"firstOccurrenceAt": "2025-11-24T19:00:00Z"
}
],
"socials": [
{
"platform": "link",
"url": "https://shroud.gg/"
},
{
"platform": "link",
"url": "https://streamelements.com/shroud/tip"
}
],
"createdAt": "2012-11-03T15:50:32.87847Z",
"bio": "I'm back baby",
"avatar": "https://static-cdn.jtvnw.net/jtv_user_pictures/c754eebf-745b-4e0a-814a-10bcaecaabbc-profile_image-300x300.png",
"banner": "https://static-cdn.jtvnw.net/jtv_user_pictures/dbee25e8-55b7-4565-87f0-e9d4661dcc66-profile_banner-480.jpeg",
"lastBroadcast": {
"title": "ME N THE GIRLS MAY BE OUT! BUT WE HAD FUN!",
"game": "VALORANT",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/516575-144x192.jpg",
"startedAt": "2026-07-24T23:46:43.553428Z"
},
"handle": "shroud"
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
platformPlatform identifier for this response (matches the endpoint's platform).idStable platform ID for the item.displayNameChannel display name (e.g. Ninja, KaiCenat). Distinct from handle on most channels.urlCanonical URL of the item.followersFollower count.isPartnerWhether the channel is a platform Partner/partner.isAffiliateWhether the channel is an affiliate.isLiveWhether the channel is currently live.createdAtCreation date (ISO 8601).bioChannel about text when the channel published one; omitted when empty.avatarProfile image URL.bannerChannel banner URL.handleTwitch login / URL slug (e.g. ninja). The join key — not a third username twin.
Recent videos
Each item in recentVideos contains:
platformPlatform identifier for this response (matches the endpoint's platform).idId of this recent videos item.urlCanonical URL of the item.embedUrlPlatform embed URL when a real embed id is known. Do not invent from a page/permalink id.titleTitle of this recent videos item.createdAtCreation date (ISO 8601).durationSecondsLength in seconds for this item (full media length, or a segment span when the endpoint documents a start/end).viewsView count when the platform exposes one.thumbnailVOD/clip thumbnail URL with Twitch's {width}x{height} placeholders substituted to 320x180 so the URL loads. See thumbnailTemplate for the raw template.thumbnailTemplateUnsubstituted Twitch thumbnail template (…/{width}x{height}.jpg) when the source used placeholders — pick your own size.animatedPreviewUrlVOD storyboard / animated preview strip when Twitch exposes it.broadcastTypeBroadcast type. Example: "ARCHIVE".gameCategory / game name string (not a GraphQL Game object).gameIdTwitch game/category id.gameSlugTwitch game/category slug.gameBoxArtUrlCategory box art URL (additive media field).languageDetected or requested language code.
Top clips
Each item in topClips contains:
platformPlatform identifier for this response (matches the endpoint's platform).idId of this top clips item.slugURL slug of the item.urlCanonical URL of the item.embedUrlPlatform embed URL when a real embed id is known. Do not invent from a page/permalink id.titleTitle of this top clips item.viewsView count when the platform exposes one.createdAtCreation date (ISO 8601).thumbnailVOD/clip thumbnail URL with Twitch's {width}x{height} placeholders substituted to 320x180 so the URL loads. See thumbnailTemplate for the raw template.gameCategory / game name string (not a GraphQL Game object).gameBoxArtUrlCategory box art URL (additive media field).
Schedule
Each item in schedule contains:
idId of this schedule item.startAtStart at. Example: "2026-08-16T18:00:00Z".endAtEnd at. Example: "2026-08-17T02:00:00Z".isRecurringIs recurring. Example: false.isCancelledIs cancelled. Example: false.
Socials
Each item in socials contains:
platformPlatform identifier for this response (matches the endpoint's platform).urlCanonical URL of the item.
Last broadcast
The lastBroadcast object contains:
titleTitle of this last broadcast item.gameCategory / game name string (not a GraphQL Game object).gameBoxArtUrlCategory box art URL (additive media field).startedAtWhen the stream, clip, or broadcast segment started (ISO 8601).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Twitch channel URL or username, e.g. https://www.twitch.tv/shroud. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| cache | boolean | No | Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control. |
| cacheMaxAge | string | No | Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/twitch/profileand parse the JSON response.
Use cases
Profile Enrichment
Add live stats, bio, and account flags to a contact you already have.
Creator Verification
Confirm a known handle, audience size, and business/verified status before outreach.
Competitive Analysis
Track follower growth and posting cadence for accounts you already follow.
Partnership Qualification
Vet known partnership and sponsorship targets with fresh profile data.
Frequently asked questions
What does the Twitch Profile API do?+
The Twitch Profile API lets you fetch profile or page details and audience stats from a public Twitch profile or page using one GET request to /v1/twitch/profile. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Twitch Profile API cost?+
Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Twitch API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Where did login / username / name go?+
Dropped. handle == login == username and displayName == name on every channel we sampled (shroud / ninja / kaicenat). handle and displayName cover both meanings.
Why is stream missing when the channel is offline?+
isLive:false already said it. A null stream object claimed a live block we failed to read. Empty bio is omitted the same way.
Is the Twitch Profile API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
More Twitch APIs
Ready to use the Twitch Profile API?
Sign up, grab your key, and make your first call in 60 seconds.