> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keyapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Search channels

> Search YouTube channels.
Returns only channel-type results (filters out videos, playlists, etc.).
Supports paginated retrieval for more channels.

Usage flow:
1. First request: pass only the keyword parameter
2. Retrieve the continuation_token from the response
3. Next request: pass continuation_token (keyword is optional)
4. Repeat steps 2-3 until has_more is false

Notes:
Each page typically returns 10-20 channels

<div className="inline-flex items-center gap-2 px-4 py-2 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg">
  <span className="text-base">🪙</span>
  <span className="text-sm font-medium text-yellow-900 dark:text-yellow-100"><span className="font-semibold">3 credits</span><span className="text-yellow-700 dark:text-yellow-300 ml-1">per request</span></span>
</div>

## Copy for AI

<div className="my-6 rounded-xl border border-gray-200 bg-gray-50 p-5 dark:border-gray-800 dark:bg-gray-900/40">
  <div className="min-w-0">
    <p className="text-base font-semibold text-gray-900 dark:text-gray-100">🤖 Why Code When AI Can Do It For You?</p>
    <p className="mt-1 text-sm text-gray-700 dark:text-gray-300">Stop writing code like it's 1970! Let AI do the heavy lifting - click the sparkles to copy a perfectly formatted prompt for ChatGPT, Claude, or your favorite AI assistant.</p>
  </div>

  <div className="mt-4">
    <button
      type="button"
      className="inline-flex items-center gap-2 rounded-md border border-emerald-300 bg-emerald-50 px-3 py-2 text-sm font-medium text-emerald-800 hover:bg-emerald-100 dark:border-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-100 dark:hover:bg-emerald-900/50"
      onClick={() => navigator.clipboard.writeText(`I want to make an API call to https://api.keyapi.ai/v1/youtube/search_channels.

Please help me write code to make this API call and handle the response appropriately. Include error handling and best practices.

Here are the details:

Endpoint: GET https://api.keyapi.ai/v1/youtube/search_channels

Description: Search YouTube channels.
Returns only channel-type results (filters out videos, playlists, etc.).
Supports paginated retrieval for more channels.

Usage flow:
1. First request: pass only the keyword parameter
2. Retrieve the continuation_token from the response
3. Next request: pass continuation_token (keyword is optional)
4. Repeat steps 2-3 until has_more is false

Notes:
Each page typically returns 10-20 channels

Required Headers:
--header 'Authorization: Bearer <YOUR_API_KEY>'

Parameters:
- keyword (Optional): Search keyword; leave empty for subsequent requests. Example: Rick Astley
- continuation_token (Optional): Pagination token (optional), used to retrieve the next page
- need_format (Optional): Whether to format the data. Default: true
true: returns structured data in a formatted layout (recommended)
false: returns the raw YouTube API structure, useful for debugging. Example: true

Example Response:
{
"code": 0,
"message": "success",
"data": {
"keyword": "Rick Astley",
"channels": [
  {
    "channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
    "title": "Rick Astley",
    "handle": "@RickAstleyYT",
    "subscriber_count_text": "4.46M subscribers",
    "description": "2026 UK & Ireland Reflection Tour     🎟️ Tickets are on sale now. New single 'Waiting On You' out now.",
    "thumbnails": [
      {
        "url": "//yt3.googleusercontent.com/vewxKdtll-rntHAMDPY_Qa6hPac3-J2sCFFUwvGSSR0i7hB4g5rNfF39lCEcjGvsYI0RWx7V1A=s88-c-k-c0x00ffffff-no-rj-mo",
        "width": 88,
        "height": 88
      },
      {
        "url": "//yt3.googleusercontent.com/vewxKdtll-rntHAMDPY_Qa6hPac3-J2sCFFUwvGSSR0i7hB4g5rNfF39lCEcjGvsYI0RWx7V1A=s176-c-k-c0x00ffffff-no-rj-mo",
        "width": 176,
        "height": 176
      }
    ],
    "is_subscribed": false,
    "canonical_url": "/@RickAstleyYT",
    "channel_url": "https://www.youtube.com/@RickAstleyYT"
  }
],
"continuation_token": null,
"has_more": false,
"total_count": 1
},
"requestId": "10380c82-2a7b-4e53-9ef1-65eac3f48652"
}`)}
    >
      <span>✨</span>
      <span>Copy for AI</span>
    </button>
  </div>
</div>


## OpenAPI

````yaml en/youtube.openapi.json GET /v1/youtube/search_channels
openapi: 3.0.1
info:
  title: YouTube API english document
  description: >-
    The english reference documentation of the YouTube API includes the
    interface's purpose, parameter description, response status, and sample
    structure.
  version: 1.0.0
servers:
  - url: https://api.keyapi.ai
    description: Production
security: []
tags: []
paths:
  /v1/youtube/search_channels:
    get:
      tags: []
      summary: Search channels
      description: |-
        Search YouTube channels.
        Returns only channel-type results (filters out videos, playlists, etc.).
        Supports paginated retrieval for more channels.

        Usage flow:
        1. First request: pass only the keyword parameter
        2. Retrieve the continuation_token from the response
        3. Next request: pass continuation_token (keyword is optional)
        4. Repeat steps 2-3 until has_more is false

        Notes:
        Each page typically returns 10-20 channels
      parameters:
        - name: keyword
          in: query
          description: Search keyword; leave empty for subsequent requests
          required: false
          example: Rick Astley
          schema:
            type: string
            example: Rick Astley
        - name: continuation_token
          in: query
          description: Pagination token (optional), used to retrieve the next page
          required: false
          schema:
            type: string
        - name: need_format
          in: query
          description: |-
            Whether to format the data. Default: true
            true: returns structured data in a formatted layout (recommended)
            false: returns the raw YouTube API structure, useful for debugging
          required: false
          example: 'true'
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties: {}
              example:
                code: 0
                message: success
                data:
                  keyword: Rick Astley
                  channels:
                    - channel_id: UCuAXFkgsw1L7xaCfnd5JJOw
                      title: Rick Astley
                      handle: '@RickAstleyYT'
                      subscriber_count_text: 4.46M subscribers
                      description: >-
                        2026 UK & Ireland Reflection Tour     🎟️ Tickets are on
                        sale now. New single 'Waiting On You' out now.
                      thumbnails:
                        - url: >-
                            //yt3.googleusercontent.com/vewxKdtll-rntHAMDPY_Qa6hPac3-J2sCFFUwvGSSR0i7hB4g5rNfF39lCEcjGvsYI0RWx7V1A=s88-c-k-c0x00ffffff-no-rj-mo
                          width: 88
                          height: 88
                        - url: >-
                            //yt3.googleusercontent.com/vewxKdtll-rntHAMDPY_Qa6hPac3-J2sCFFUwvGSSR0i7hB4g5rNfF39lCEcjGvsYI0RWx7V1A=s176-c-k-c0x00ffffff-no-rj-mo
                          width: 176
                          height: 176
                      is_subscribed: false
                      canonical_url: /@RickAstleyYT
                      channel_url: https://www.youtube.com/@RickAstleyYT
                  continuation_token: null
                  has_more: false
                  total_count: 1
                requestId: 10380c82-2a7b-4e53-9ef1-65eac3f48652
          headers: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 400
                  data: null
                  message: 'Missing required parameter: handle'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 401
                  data: null
                  message: apiKey is null
        '402':
          description: Payment Required
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 402
                  data: null
                  message: apiKey quota is not enough
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 429
                  data: null
                  message: qps limit exceeded
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 500
                  data: null
                  message: Internal server error
      deprecated: false
      security:
        - JWT Bearer: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://api.keyapi.ai/v1/youtube/search_channels?keyword=Rick+Astley&need_format=true' \
              --header 'Authorization: Bearer <YOUR_API_KEY>'
        - lang: python
          label: Python
          source: |-
            import requests

            response = requests.get(
                'https://api.keyapi.ai/v1/youtube/search_channels',
                params={"keyword": "Rick Astley", "need_format": "true"},
                headers={'Authorization': 'Bearer <YOUR_API_KEY>'}
            )
            print(response.json())
        - lang: javascript
          label: JavaScript
          source: >-
            const params = new URLSearchParams({"keyword": "Rick Astley",
            "need_format": "true"});


            const response = await
            fetch(`https://api.keyapi.ai/v1/youtube/search_channels?${params}`,
            {
              method: 'GET',
              headers: { 'Authorization': 'Bearer <YOUR_API_KEY>' }
            });

            const data = await response.json();

            console.log(data);
components:
  securitySchemes:
    JWT Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |-
        API key for authentication. Format: `sk_live_xxxxxxxxxxxxx`
        Get your API key from the [Dashboard](http://keyapi.ai/app/dashboard).

````