# List channel playlists



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

  Returns public playlists for the channel. Pass `next_cursor` as `cursor` to continue.

  <Security permission="videos:read" />

  <SchemaGroup title="Path Parameters">
    <SchemaField name="id" type="string" location="path" required>
      Channel handle or canonical channel ID (`UC...`).
    </SchemaField>
  </SchemaGroup>

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

  <div id="returns" className="mt-8">
    Response (HTTP 200) [#response-http-200]

    ```jsonc
    {
      "playlists": [                  // Playlist cards
        {
          "playlist_id": string,      // Canonical playlist ID (PL...)
          "title": string,            // Playlist title
          "video_count": number,      // Number of videos in the playlist
          "video_count_text": string, // Formatted count string (e.g. "48 videos")
          "thumbnails": [             // Thumbnail variants
            {
              "url": string,
              "width": number,
              "height": number
            }
          ]
        }
      ],
      "has_more": boolean,            // Whether another page is available
      "next_cursor": string | null    // Cursor token for the next page
    }
    ```
  </div>

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

      const page = await response.json();
      console.log(page.playlists[0]?.title, page.next_cursor);
      ```
    </LanguageSample>

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

      channel_id = "UCLA_DiR1FfKNvjuUpBHmylQ"
      response = requests.get(
          f"https://api.ytapi.dev/v1/channels/{channel_id}/playlists",
          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/UCLA_DiR1FfKNvjuUpBHmylQ/playlists" \
        -H "Authorization: Bearer $YT_API_KEY"
      ```
    </LanguageSample>

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

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

      func main() {
      	url := "https://api.ytapi.dev/v1/channels/UCLA_DiR1FfKNvjuUpBHmylQ/playlists"
      	req, _ := http.NewRequest("GET", url, 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>
  </MethodSamples>
</MethodPage>
