Making requests
Three query parameters appear across almost every endpoint, plus a platform and time-period vocabulary shared by all of them.
Shared parameters
| Parameter | Type | Description |
|---|---|---|
| platform | string | Target platform. Required wherever a name could exist on more than one platform. |
| time | string | Reporting window. Omit it and you get the last 30-days; sending it empty is an error, not a default. |
| page | integer | List pagination. 100 rows per page; defaults to 1. |
For YouTube, pass the channel ID in the path instead of a handle, e.g. /channels/UC1dGHGJTXU_dkiR8tW3qQgg?platform=youtube.
Supported platforms
Streams Charts collects and computes this data independently. The table below states, per platform, when coverage starts, how often we collect, and the minimum audience a channel needs to be included.
Pass one platform per request via platform={name}. The standard metric set is available across all active platforms below. Chat analytics and the joint audience set cover Twitch, Kick and YouTube; the extra and subscriber sets are Twitch-only.
| Platform | Data since | Collection frequency | Min. requirement |
|---|---|---|---|
| Twitch | June 2019 | every 1 min | 2+ avg viewers |
| YouTube Gaming (Non-Gaming) | Nov 2020 (Apr 2022) | every 2 min | 10+ avg viewers |
| NimoTV | Aug 2021 | every 2 min | 3+ avg viewers |
| Bigo LIVE | Aug 2021 | every 2 min | 3+ avg viewers |
| SOOP Korea (slug: afreecatv) | Feb 2022 | every 4 min | 3+ avg viewers |
| Kick | Dec 2022 | every 1 min | 1+ avg viewers |
| Rumble | June 2023 | every 2 min | 15+ avg viewers |
| Naver's CHZZK | Jan 2024 | every 2 min | 1+ avg viewers |
| SteamTV | July 2024 | every 2 min | 10+ avg viewers |
Discontinued platforms
The following platforms are no longer collected. Historical data within the ranges below remains queryable. Note: SOOP Korea (slug afreecatv, active) and SOOP Global (slug soop, discontinued) are different platforms.
| Platform | Data range | Min. requirement |
|---|---|---|
| Trovo | June 2020 – June 30, 2026 | 3+ avg viewers |
| SOOP Global (slug: soop) | June 2024 – March 2025 | 3+ avg viewers |
| Nonolive | Nov 2021 – March 2024 | 3+ avg viewers |
| Mildom | June 2022 – Aug 2024 | 5+ avg viewers |
Time periods
Control the reporting window with time={value}. Omit it and you get the last 30-days. Supported presets:
For a custom range, pass two dates: time=YYYY-MM-DD,YYYY-MM-DD. For minute-level precision, pass timestamps: time=YYYY-MM-DD HH:MM,YYYY-MM-DD HH:MM.
A date range ends exclusively. time=2026-07-26,2026-07-27 reports the 26th only. To include both days, pass time=2026-07-26,2026-07-28.
How `time` is validated
| Input | Result |
|---|---|
No time parameter | Defaults to the last 30-days. |
time= with no value | 422 invalid_parameter — time must not be empty. There is no fallback to the default. |
Unparseable value, e.g. 25:00 or 2026-13-40 | 422 invalid_parameter — Invalid time: could not parse "<your value>". |
| End earlier than start | 422 invalid_parameter — a reversed window is rejected, not answered empty. |
| A window that matches no data on that resource | 404 not_found. |
Every one of these is a non-2xx response, so none of them is charged and none carries a x-credits-charged header at all.
Not every endpoint accepts every form. Presets and plain dates aggregate over a window, so they apply to channels, games and lists; a single broadcast — the 5-minute interval series included — is sliced with the exact-time form only. Audience data takes no time parameter at all.
When you specify time down to the minute, the range may span at most 7 days. Lists accept windows up to 365 days.