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

# YouTube Video Comment

> Get the comment list for YouTube videos.

<Info>
  **Product**: Visual Intelligence — Social Media Scraping
  **Use case**: Fetch video metadata, transcripts, captions, and comments from YouTube, Instagram, TikTok, and Twitter/X
  **Host**: `https://mavi-backend.memories.ai/serve/api/v2`
  **Auth**: `Authorization: sk-mavi-...` (no `Bearer` prefix)
</Info>

This API is used to get the comment list for YouTube videos with pagination support.

<Note>
  Channel routing guide: see [Social Media Scraping Overview](/visual-intelligence/social-media-scraping-overview). Endpoints with a `channel` request field let you choose `apify`, `rapid`, or `memories.ai`; endpoints without this field use managed routing.
</Note>

<Note>
  Each API call costs **\$0.01 USD**.
</Note>

### Channel Options

If your request supports a `channel` option, use it to control how scraper data is sourced:

| Channel       | What it means                                                                                    | Typical trade-off                                                       |
| ------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
| `apify`       | Uses [Apify](https://apify.com/), a dedicated web scraping platform with broad content coverage. | Most stable and most complete results, but usually more expensive.      |
| `rapid`       | Uses [RapidAPI](https://rapidapi.com/), a lower-cost aggregation platform.                       | Lower cost, but less stable and often narrower coverage.                |
| `memories.ai` | Managed routing by Memories.ai.                                                                  | Automatically selects the best price/performance path for your request. |

<Note>
  Recommendation: Start with `memories.ai` unless you need to force a specific provider.
</Note>

<Warning>
  * The maximum value for pagination parameter `page_size` is **100**
  * `next_page_token` should be **null** for the first request, use the `next_page_token` returned from the previous response for subsequent requests
  * When `next_page_token` in the response is `null`, it indicates all comments have been retrieved
</Warning>

### Code Example

<CodeGroup>
  ```python Python theme={null}
  import requests

  BASE_URL = "https://mavi-backend.memories.ai/serve/api/v2"
  API_KEY = "sk-mavi-..."
  HEADERS = {
      "Authorization": f"{API_KEY}",
      "Content-Type": "application/json"
  }

  def youtube_video_comment(video_id: str):
      url = f"{BASE_URL}/youtube/video/comment"
      page_size = 100
      next_page_token = None
      all_comments = []
      while True:
          data = {"video_id": video_id, "page_size": page_size, "next_page_token": next_page_token}
          resp = requests.post(url, json=data, headers=HEADERS).json()
          comments = resp.get("items", [])
          all_comments.extend(comments)
          next_page_token = resp.get("next_page_token")
          if not next_page_token:
              break
      return all_comments

  # Usage example
  comments = youtube_video_comment("your_youtube_video_id")
  print(comments)
  ```

  ```javascript JavaScript theme={null}
  const axios = require('axios');

  const BASE_URL = 'https://mavi-backend.memories.ai/serve/api/v2';
  const API_KEY = 'sk-mavi-...';

  const headers = {
      'Authorization': API_KEY,
      'Content-Type': 'application/json'
  };

  async function youtubeVideoComment(videoId) {
      const response = await axios.post(
          `${BASE_URL}/youtube/video/comment`,
          { video_id: videoId, page_size: 100, next_page_token: null },
          { headers }
      );
      return response.data;
  }

  // Usage example
  youtubeVideoComment('your_youtube_video_id')
      .then(result => console.log(result));
  ```

  ```bash cURL theme={null}
  curl -X POST "https://mavi-backend.memories.ai/serve/api/v2/youtube/video/comment" \
    -H "Authorization: sk-mavi-..." \
    -H "Content-Type: application/json" \
    -d '{
      "video_id": "your_youtube_video_id",
      "page_size": 100,
      "next_page_token": null
    }'
  ```
</CodeGroup>

### Request Body

| Field             | Type           | Required | Description                                                                                                                      |
| ----------------- | -------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
| video\_id         | string         | Yes      | YouTube video ID (the `v` parameter from a YouTube URL, e.g., `Y2y4OpzKIK4`)                                                     |
| page\_size        | number         | No       | Number of comments returned per page, maximum value is 100, default is 100                                                       |
| next\_page\_token | string \| null | No       | Next page token, should be null for the first request, use the value returned from the previous response for subsequent requests |

### Response

Returns the standard envelope (`code` / `msg` / `data`) wrapping a `data.data` array of comments.

<ResponseExample>
  ```json theme={null}
  {
    "code": 200,
    "msg": "success",
    "data": {
      "data": [
        {
          "comment_id": "UgwNEbW4EeYHeo7wBOp4AaABAg",
          "video_id": "otECntwBTVU",
          "reply_count": "74",
          "comment": {
            "comment_id": "UgwNEbW4EeYHeo7wBOp4AaABAg",
            "parent_comment_id": null,
            "text": "SUPPORT THE RESTAURANTS! ...",
            "author_name": "@StevenSchapiro",
            "author_url": "http://www.youtube.com/@StevenSchapiro",
            "publish_time": "2026-01-10T14:31:50Z",
            "like_count": "3676"
          }
        }
      ]
    }
  }
  ```
</ResponseExample>

### Response Parameters

| Parameter                                | Type           | Description                                                                 |
| ---------------------------------------- | -------------- | --------------------------------------------------------------------------- |
| code                                     | integer        | Response code (`200` on success)                                            |
| msg                                      | string         | Response message                                                            |
| data                                     | object         | Wrapper object                                                              |
| data.data                                | array\[object] | Comment list                                                                |
| data.data\[].comment\_id                 | string         | Comment ID (also repeated inside `comment.comment_id`)                      |
| data.data\[].video\_id                   | string         | Echo of the requested YouTube video ID                                      |
| data.data\[].reply\_count                | string         | Reply count, returned as a **string**                                       |
| data.data\[].comment                     | object         | The comment payload                                                         |
| data.data\[].comment.comment\_id         | string         | Same comment ID, repeated                                                   |
| data.data\[].comment.parent\_comment\_id | string \| null | Always `null` for top-level comments (this endpoint only returns top-level) |
| data.data\[].comment.text                | string         | Comment text                                                                |
| data.data\[].comment.author\_name        | string         | Author handle (e.g. `@StevenSchapiro`) — flat, not nested under `author`    |
| data.data\[].comment.author\_url         | string         | Author channel URL                                                          |
| data.data\[].comment.publish\_time       | string         | Published time, ISO 8601                                                    |
| data.data\[].comment.like\_count         | string         | Like count, returned as a **string**                                        |

<Note>
  Pagination is asserted in the page Warning but the live response examined in this audit did **not** include a `next_page_token` or `page_info` block at any level. If your script depends on pagination, verify the field path against your own request before shipping — it may live on a different envelope or only appear when there are more pages than `page_size`.
</Note>

\| next\_page\_token | string | null | Next page token, used to get the next page of data, null indicates all data has been retrieved |
\| page\_info | object | Pagination information |
\| page\_info.total\_results | number | Total number of comments |
\| page\_info.results\_per\_page | number | Number of results per page |


## OpenAPI

````yaml POST /youtube/video/comment
openapi: 3.1.0
info:
  title: Scraper API Reference
  description: REST APIs for scraping TikTok and YouTube video data
  version: v1.0.0
servers:
  - url: https://mavi-backend.memories.ai/serve/api/v2
security:
  - ApiKeyAuth: []
paths:
  /youtube/video/comment:
    post:
      summary: YouTube Video Comment
      description: >-
        Get the comment list for YouTube videos. Each API call costs $0.01 USD.
        The maximum value for pagination parameter pageSize is 100,
        nextPageToken should be null for the first request.
      operationId: youtube_video_comment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                video_id:
                  type: string
                  description: YouTube video ID
                  example: Y2y4OpzKIK4
                page_size:
                  type: integer
                  description: >-
                    Number of comments returned per page, maximum value is 100,
                    default is 100
                  example: 100
                  maximum: 100
                  default: 100
                next_page_token:
                  type: string
                  nullable: true
                  description: >-
                    Next page token, should be null for the first request, use
                    the value returned from the previous response for subsequent
                    requests
                  example: null
              required:
                - video_id
      responses:
        '200':
          description: Successfully returned comment list
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    description: Comment list array
                    items:
                      type: object
                  next_page_token:
                    type: string
                    nullable: true
                    description: >-
                      Next page token, used to get the next page of data, null
                      indicates all data has been retrieved
                  page_info:
                    type: object
                    description: Pagination information
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization

````