Twitch Profile API
Twitch channel — socials[], topClips, schedule preview, live stream block (null when offline), clean VODs (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). Canonical core: platform, id, handle, url, displayName, bio, avatar, banner, followers, createdAt — plus deprecated aliases login/username/description/profileImage/bannerImage for one release. Also: isPartner/isAffiliate, isLive, stream{title, game, gameBoxArtUrl, viewers, startedAt, thumbnail} when live (null when offline — not six null fields), lastBroadcast{}, socials[{platform,url,title}] from channel panels / socialMedias, recentVideos[] (embedUrl from real video id, thumbnail with {width}x{height} substituted to 320x180, thumbnailTemplate kept for custom sizes, language, animatedPreviewUrl, gameBoxArtUrl), topClips[], and schedule[] (lean preview, max 10). Canonical full schedule with id/isRecurring/canceledUntil: GET /v1/twitch/user-schedule. game stays the category name string; gameBoxArtUrl and animatedPreviewUrl are additive media fields. 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 null when offline; VOD thumbs substituted to 320x180
- Canonical avatar/banner/displayName (+ deprecated aliases)
Platform limits
Honest ceilings from the upstream platform surface — not Captapi bugs. Unexpected truncation here is usually the platform, not us.
- schedule[] on profile is a short upcoming preview — use /twitch/user-schedule for the full schedule surface.
- embedUrl is only emitted when a real embed id is known (Twitch video/clip id) — never invented from an unrelated page id.
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%2Fibai" \
-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": "83232866",
"login": "ibai",
"displayName": "ibai",
"url": "https://www.twitch.tv/ibai",
"description": "Si lees esto que sepas que te aprecio",
"followers": 20346592,
"profileImage": "https://static-cdn.jtvnw.net/jtv_user_pictures/574228be-01ef-4eab-bc0e-a4f6b68bedba-profile_image-300x300.png",
"bannerImage": "https://static-cdn.jtvnw.net/jtv_user_pictures/4de9a7f1-42a9-477f-9cd4-6fb585272f3c-profile_banner-480.jpeg",
"isPartner": true,
"isAffiliate": false,
"isLive": false,
"stream": {
"title": null,
"game": null,
"gameBoxArtUrl": null,
"viewers": null,
"startedAt": null,
"thumbnail": null
},
"lastBroadcast": {
"title": "FLAKKED Y OSCARININ SE ESTRENAN | GX VS SK | NAVI VS KC | #WatchLEC",
"game": "League of Legends",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/21779-144x192.jpg",
"startedAt": "2026-08-01T20:18:56.367677Z"
},
"recentVideos": [
{
"platform": "twitch",
"id": "2834463106",
"url": "https://www.twitch.tv/videos/2834463106",
"embedUrl": "https://player.twitch.tv/?video=2834463106&parent=captapi.com",
"title": "FLAKKED Y OSCARININ SE ESTRENAN | GX VS SK | NAVI VS KC | #WatchLEC",
"createdAt": "2026-08-01T14:31:37Z",
"durationSeconds": 20835,
"views": 500540,
"thumbnail": "https://static-cdn.jtvnw.net/cf_vods/d3stzm2eumvgb4/ecd0accc3ebc7ced4d7e_ibai_317377393636_1785594690//thumb/thumb0-{width}x{height}.jpg",
"animatedPreviewUrl": "https://d3stzm2eumvgb4.cloudfront.net/ecd0accc3ebc7ced4d7e_ibai_317377393636_1785594690/storyboards/2834463106-strip-0.jpg",
"game": "League of Legends",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/21779-144x192.jpg",
"language": "es",
"broadcaster": "ibai",
"broadcasterProfileImage": "https://static-cdn.jtvnw.net/jtv_user_pictures/574228be-01ef-4eab-bc0e-a4f6b68bedba-profile_image-300x300.png"
},
{
"platform": "twitch",
"id": "2833593338",
"url": "https://www.twitch.tv/videos/2833593338",
"embedUrl": "https://player.twitch.tv/?video=2833593338&parent=captapi.com",
"title": "MKOI vs SHFT | NOS JUGAMOS LA VIDA | VAMOS 0-3 | YO CONFIO | AVE FENIX | TH vs VIT | #WatchLEC",
"createdAt": "2026-07-31T14:40:08Z",
"durationSeconds": 17708,
"views": 545528,
"thumbnail": "https://static-cdn.jtvnw.net/cf_vods/d3stzm2eumvgb4/f6e52764cb70a8846ecb_ibai_317369348836_1785508801//thumb/thumb0-{width}x{height}.jpg",
"animatedPreviewUrl": "https://d3stzm2eumvgb4.cloudfront.net/f6e52764cb70a8846ecb_ibai_317369348836_1785508801/storyboards/2833593338-strip-0.jpg",
"game": "League of Legends",
"gameBoxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/21779-144x192.jpg",
"language": "es",
"broadcaster": "ibai",
"broadcasterProfileImage": "https://static-cdn.jtvnw.net/jtv_user_pictures/574228be-01ef-4eab-bc0e-a4f6b68bedba-profile_image-300x300.png"
}
],
"topClips": [],
"schedule": [],
"createdAt": "2015-02-20T16:47:56.548434Z"
}
}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, cached, creditsUsed, 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.loginDeprecated alias of handle — prefer handle.displayNameChannel display name. Canonical across profile endpoints (prefer over name).urlCanonical URL of the item.descriptionDeprecated alias of bio — prefer bio.followersFollower count.profileImageDeprecated alias of avatar — prefer avatar.bannerImageDeprecated alias of banner — prefer banner.isPartnerWhether the channel is a platform Partner/partner.isAffiliateWhether the channel is an affiliate.isLiveWhether the channel is currently live.topClipsTop public clips for the channel (slug, embedUrl, views, thumbnail).scheduleLean upcoming schedule preview (max 10) — same segment shape as /twitch/user-schedule (id, startedAt/endedAt, isRecurring, canceledUntil, …). Canonical full schedule: GET /v1/twitch/user-schedule.createdAtCreation date (ISO 8601).
Stream
The stream object contains:
titleTitle of the item.gameCategory / game name string (not a GraphQL Game object).gameBoxArtUrlCategory box art URL (additive media field).viewersCurrent live viewer count.startedAtWhen the stream, clip, or broadcast segment started (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.
Last broadcast
The lastBroadcast object contains:
titleTitle of the 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).
Recent videos
Each item in recentVideos contains:
platformPlatform identifier for this response (matches the endpoint's platform).idStable platform ID for 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 the 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.animatedPreviewUrlVOD storyboard / animated preview strip when Twitch exposes it.gameCategory / game name string (not a GraphQL Game object).gameBoxArtUrlCategory box art URL (additive media field).languageDetected or requested language code.broadcasterName of the broadcaster.broadcasterProfileImageBroadcaster profile image URL.
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. Envelope includes cached + cachedAt on hits. |
| cacheMaxAge | string | No | Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope: cached + cachedAt. |
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. Hits include cached + cachedAt. 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.
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. Hits include cached + cachedAt. 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.