# List channel streams



<MethodPage method="GET" path="/v1/channels/{id}/streams" credits={1}>
  <MethodSignature name="listChannelStreams" args={[{ name: "id" }, { name: "query", optional: true }, { name: "options", optional: true }]} returns="ChannelStreamsPage" />

  Lists the channel **Live** tab: current broadcasts and past streams. Uploads live on [`List channel videos`](/channels/videos). The two lists are different YouTube tabs and do not substitute for each other.

  Page with the returned `next_cursor`.

  <Security permission="transcripts:read" />

  <SchemaGroup title="Parameters">
    <SchemaField name="id" type="string" location="path">
      Channel handle or canonical channel ID.
    </SchemaField>

    <SchemaField name="cursor" type="string" optional location="query">
      Continuation cursor from the previous response.
    </SchemaField>
  </SchemaGroup>

  <SchemaGroup title="Returns" id="returns">
    <SchemaField name="channel_id" type="string">
      Canonical channel ID.
    </SchemaField>

    <SchemaField name="videos" type="ChannelVideo[]">
      Stream items for this page. Same video card shape as channel uploads.
    </SchemaField>

    <SchemaField name="has_more" type="boolean">
      Whether another page is available.
    </SchemaField>

    <SchemaField name="next_cursor" type="string" optional>
      Cursor for the next page.
    </SchemaField>
  </SchemaGroup>

  <MethodSamples>
    <LanguageSample language="TypeScript">
      ```ts
      const response = await fetch(
        "https://api.ytapi.dev/v1/channels/@MrBeast/streams",
        {
          headers: {
            Authorization: `Bearer ${process.env.YT_API_KEY}`,
          },
        },
      );

      const page = await response.json();
      console.log(page.videos.length, page.next_cursor);
      ```
    </LanguageSample>

    <LanguageSample language="Python">
      ```python
      import os
      import requests

      response = requests.get(
          "https://api.ytapi.dev/v1/channels/@MrBeast/streams",
          headers={"Authorization": f"Bearer {os.environ['YT_API_KEY']}"},
      )

      print(response.json())
      ```
    </LanguageSample>

    <LanguageSample language="cURL">
      ```bash
      curl -X GET "https://api.ytapi.dev/v1/channels/@MrBeast/streams" \
        -H "Authorization: Bearer $YT_API_KEY"
      ```
    </LanguageSample>

    <LanguageSample language="Go">
      ```go
      package main

      import (
      	"fmt"
      	"net/http"
      	"os"
      )

      func main() {
      	req, _ := http.NewRequest("GET", "https://api.ytapi.dev/v1/channels/@MrBeast/streams", nil)
      	req.Header.Set("Authorization", "Bearer "+os.Getenv("YT_API_KEY"))

      	resp, err := http.DefaultClient.Do(req)
      	if err != nil {
      		panic(err)
      	}
      	defer resp.Body.Close()
      	fmt.Println(resp.Status)
      }
      ```
    </LanguageSample>

    <ResponseExample status={200}>
      ```json
      {
        "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
        "has_more": true,
        "next_cursor": "yt_7c0e86b240fe81347072",
        "videos": [
          {
            "video_id": "abcLiveStream",
            "title": "Live: $1 vs $1,000,000 Hotel",
            "length_text": "LIVE",
            "thumbnails": [
              { "url": "https://i.ytimg.com/vi/abcLiveStream/hqdefault.jpg", "width": 480, "height": 360 }
            ]
          }
        ]
      }
      ```
    </ResponseExample>
  </MethodSamples>
</MethodPage>
