Channels

Channel endpoints

Five metric sets describe a single channel over a time window. Every single-channel endpoint costs 1 credit per request — standard, extra, paid subscribers, chat analytics. The one exception is the joint audience set (geography + demographics), which costs 2. One request returns data for a single channel; because a name can exist on several platforms, platform={name} is required.

YouTube uses channel IDs

For YouTube, pass the channel ID rather than a handle, e.g. /channels/UC1dGHGJTXU_dkiR8tW3qQgg?platform=youtube.

Standard stats

Aggregate performance metrics for a single channel. Available on all active platforms.

GET /api/v2/channels/{name}?platform={platform}
Set of metricsAvailabilityCost / request
StandardAll platforms1
REQUESTCURL
curl -X GET https://streamscharts.com/api/v2/channels/shroud?platform=twitch \ -H 'Client-ID: XXXXXXXXXXXX' -H 'Token: YYYYYYYYYYYYYY'
RESPONSEJSON
{ "data": { "platform": "twitch", "channel_name": "shroud", "channel_display_name": "shroud", "channel_id": "37402112", "hours_watched": 2554370, "peak_viewers": 33925, "average_viewers": 16262, "airtime_in_m": 9425, "followers_gain": 9574, "followers_gain_per_h": 61, "total_followers": 10602496, "stream_count": 18, "streams_list": [ { "id": "48882015229", "name": "life of a gamer !mggiveaway", "date": "2023-07-16 20:45:00" } ], "games_count": 3, "top_5_games_by_hw": [ { "name": "Diablo IV", "hours_watched": 2488439, "%_of_hours_watched": 97.4 } ], "stream_days": 25, "avatar_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/7ed5e0c6-...-300x300.png", "channel_country": "CA", "stream_language": "en", "partnership_status": "partner", "channel_type": "Male" } }

Response fields

FieldTypeDescription
channel_display_namestringDisplay name as shown on the platform.
hours_watchedintegerTotal hours watched across the window.
peak_viewersintegerHighest concurrent viewers reached.
average_viewersintegerAverage concurrent viewers.
airtime_in_mintegerTotal minutes live.
followers_gainintegerNet followers gained in the window.
followers_gain_per_hnumberAverage followers gained per hour live.
total_followersintegerTotal followers as of the window's end.
stream_countintegerNumber of broadcasts in the window.
streams_listarrayBroadcasts in the window — id, title, start date.
games_countintegerDistinct games/categories streamed.
top_5_games_by_hwarrayTop 5 games by hours watched, with share.
stream_daysintegerDistinct calendar days the channel was live.
avatar_urlstringChannel avatar image URL.
channel_countrystringISO 3166 Alpha-2 country (user-contributed).
stream_languagestringISO 639-1 broadcast language.
partnership_statusstringpartner, affiliate, or none.
channel_typestringMale, Female, or Organization (user-contributed).

Field availability by platform

Platform(s)Fields not returned
NimoTV, Bigo LIVE, SOOP Korea, CHZZK, SOOP, SteamTVfollowers_gain, followers_gain_per_h, total_followers, partnership_status
YouTube, Trovopartnership_status
Rumblefollowers_gain, followers_gain_per_h, total_followers, games_count, top_5_games_by_hw

Supported time periods

Use time={value} — default 30-days. Presets: today, 7-days, 30-days, 90-days, this-month, last-month, this-year, last-year, or a custom range YYYY-MM-DD,YYYY-MM-DD. For minute-level precision pass YYYY-MM-DD HH:MM,YYYY-MM-DD HH:MM (max 7-day span). See time periods.

Extra metrics TWITCH

Returns the full standard set plus an extra_metrics object with authorized-viewer and audience-quality signals. Twitch only. Use route /api/v2/channels-extra/{name}.

GET /api/v2/channels-extra/{name}?platform=twitch
Set of metricsAvailabilityCost / request
ExtraTwitch only1
RESPONSE · extra_metricsJSON
// standard fields, then: "extra_metrics": { "live_views": 17636629, "unique_viewers": 3210179, "unique_auth_viewers": 2696550, "auth_viewers_average_view_duration_in_m": 76, "authorized_to_all_viewers_ratio_%": 84, "avg_daily_estimated_audience": 234358, "avg_daily_estimated_audience_average_view_duration_in_m": 47 }
Authorized vs. all viewers

authorized_to_all_viewers_ratio_% is the strongest audience-quality signal. From April 3 2023, Authorized and Unique Viewers are collected only for channels authorized on Streams Charts via Twitch — and only for the period a channel has been authorized. Windows before that return null for these fields however large the channel, so an empty extra_metrics block means the channel was not authorized then, not that it had no viewers.

Under an exact-time window

live_views is always null when time carries hours and minutes: the metric is counted once per broadcast, not over an arbitrary slice of one. That is the documented answer for minute-level windows, not missing data — read live_views from a request without time, or from the stream endpoints.

Paid subscribers TWITCH

Subscriber counts, tiers, and estimated income for a single channel. Twitch only.

GET /api/v2/channels-extra/{name}/subs?platform=twitch
Set of metricsAvailabilityCost / request
Paid subscribersTwitch only1
RESPONSEJSON
{ "data": { "platform": "twitch", "channel_name": "shroud", "channel_display_name": "shroud", "channel_id": "37402112", "avatar_url": "https://static-cdn.jtvnw.net/.../7ed5e0c6-...-300x300.png", "stream_language": "en", "partnership_status": "partner", "total_subs": 3429, "min_income_from_subs_in_$": 5083, "max_income_from_subs_in_$": 8889, "paid_subs": 2180, "gifted_subs": 1249, "prime_subs": 1388, "tier_1_subs": 2018, "tier_2_subs": 1, "tier_3_subs": 22 } }
Methodology note

Subscriber figures are Streams Charts estimates, not verified by streamers, and may differ from Twitch's own numbers. Subscriptions while offline are generally not counted, and auto-renewals are tracked only when the viewer announces them in chat.

Chat analytics

Chat volume and engagement for a single channel. Available for Twitch, Kick, and YouTube.

GET /api/v2/channels-extra/{name}/chat?platform={platform}
Set of metricsAvailabilityCost / request
Chat analyticstwitch, kick, youtube1
RESPONSE · TwitchJSON
{ "data": { "platform": "twitch", "channel_name": "shroud", "channel_display_name": "shroud", "channel_id": "37402112", "avatar_url": "https://static-cdn.jtvnw.net/.../300x300.png", "stream_language": "en", "partnership_status": "partner", "total_messages": 258088, "total_words_count": 1213817, "active_chatters": 47609, "avg_daily_passive_chatters": 134091, "avg_daily_engagement_rate_%": 2.5, "messages_per_chatter": 5.4, "chatters_with_1_message": 23780, "chatters_with_2+_message": 23829, "cheer_messages": 9, "cheer_chatters": 9, "total_bits": 12000, "income_from_bits_in_$": 120, "bits_per_cheered_message": 1333, "bits_per_cheered_chatter": 1333 } }
RESPONSE · Kick / YouTubeJSON
{ "data": { "platform": "kick", "channel_name": "xqc", "total_messages": 890938, "total_words_count": 2550177, "active_chatters": 32501, "messages_per_chatter": 27.4, "chatters_with_1_message": 9416, "chatters_with_2+_message": 23085, "active_chatters_to_viewers_ratio_%": 2.2 } }
Coverage

Twitch chat data covers 200,000+ channels since January 2022. Kick covers 70,000+ channels since July 2025; YouTube covers top Gaming channels since July 2025. Kick and YouTube responses omit bits/cheer fields and add active_chatters_to_viewers_ratio_%. For YouTube, pass the channel ID. Chat supports the standard time presets.

Audience geography & demographics

Who watches the channel: viewer distribution by country with average view duration, plus audience composition — annual income, interests, family status, occupation, age, gender, and language. Both sets come back from one request. Available for Twitch, Kick, and YouTube.

GET /api/v2/channels-extra/{name}/audience?platform={platform}
Set of metricsAvailabilityCost / request
Audience geography + demographicstwitch, kick, youtube2
REQUESTCURL
curl -X GET https://streamscharts.com/api/v2/channels-extra/xqc/audience?platform=kick \ -H 'Client-ID: XXXXXXXXXXXX' -H 'Token: YYYYYYYYYYYYYY'
RESPONSEJSON
{ "data": { "platform": "twitch", "channel_name": "xqc", "channel_display_name": "xQc", "channel_id": "71092938", "avatar_url": "https://static-cdn.jtvnw.net/.../xqc-...-300x300.jpeg", "stream_language": "en", "partnership_status": "partner", "viewers_by_country": [ { "country_name": "USA", "country_iso": "US", "%_of_viewers": 35.9, "daily_avg_view_duration_m": 18 }, { "country_name": "Canada", "country_iso": "CA", "%_of_viewers": 8.3, "daily_avg_view_duration_m": 18 } ], "audience_annual_income_range": { "10k_20k": 25, "20k_30k": 18, "50k_75k": 12, "30k_40k": 10, "40k_50k": 8 }, "audience_interests": { "video_games": 95, "streaming_influencers": 80, "esports": 70, "computers_electronics": 65, "music_art": 50 }, "audience_family_status": { "single": 55, "married": 30, "parents": 15 }, "audience_occupations": { "white_collar": 25, "students": 20, "stem_it": 18, "freelancers": 7, "service_retail": 6 }, "audience_age_ranges": { "20_to_24": 30, "25_to_29": 28, "30_to_34": 18, "17_to_19": 12, "35_to_39": 6 }, "audience_gender": { "male": 90, "female": 8, "non_binary": 2 }, "audience_languages": { "English": 90, "French": 3, "Other": 3, "German": 2, "Spanish": 2 } } }
Same response on every supported platform

Kick and YouTube return the same fields as Twitch — one viewers_by_country array plus all seven audience_* blocks — for the same 2 credits. Two values differ by platform; everything else is identical.

Platform differences

DifferenceTwitchKickYouTube
Path parameterchannel namechannel namechannel ID (UC…), not a handle
audience_languages keysEnglish language names — English, FrenchISO 639-1 codes — en, frISO 639-1 codes — en, es
partnership_statuspartner / affiliatepartner / affiliatealways null

Any other platform answers 422 invalid_parameter — No audience data for this type of platform.

Response blocks

Every audience_* block is a JSON object mapping a bucket name to its percentage share — not an array. Bucket sets are fixed per block; buckets with no data are omitted.

FieldTypeDescription
viewers_by_countryarrayArray of objects — country_name, country_iso, %_of_viewers, daily_avg_view_duration_m. Countries below the reporting threshold are pooled into a single row where both country_name and country_iso are the literal string Other, so country_iso is not always a valid ISO code. daily_avg_view_duration_m is null when there is not enough data for that country.
audience_annual_income_rangeobjectShare of the audience per income bracket.
audience_interestsobjectAffinity score per interest category.
audience_family_statusobjectSingle / married / parents split.
audience_occupationsobjectShare per occupation group.
audience_age_rangesobjectShare per age bracket.
audience_genderobjectGender split of the audience.
audience_languagesobjectShare per audience language.
Not every channel has audience data

Audience data exists only for channels with enough measured viewership, and coverage is thinner outside Twitch — on YouTube in particular, many large channels have none. A channel without it returns 404 not_found — This channel does not have audience data in our database. Like every non-2xx response, it is not charged, so probing a list of channels for coverage costs nothing until one answers.

No time parameter

Selecting a time period is not available for audience data. It is current as of today and aggregated over the channel’s full history. All percentages are shares of the channel’s audience.

Now available on Kick and YouTube

Audience geography and demographics used to be Twitch-only. The same endpoint, the same response shape and the same 2-credit cost now cover Kick and YouTube as well. See the changelog.

Replaces /geo and /demo

Geography and demographics used to be two endpoints at 2 credits each. They are now one request at 2 credits total returning both blocks — half the cost and one round trip. See the changelog.