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

# Video comments

> Fetches the comments on a YouTube video or Short, 20 per page, by top comments or newest first. Each comment has its id, text and the links in it, its author (channel id, handle, avatar, verified, whether it is the video's creator), when it was posted and whether it was edited, its likes and reply count (rounded, as YouTube shows them), whether it is pinned or hearted by the creator, any attached image, and a `repliesToken` — pass it to `/v1/youtube/video/comment/replies` to get its replies. The response also gives the exact total number of comments. Pass the returned `cursor` back (with the same `url`) for the next page. A video with comments turned off returns no comments and `commentsDisabled: true`. Only publicly available data is returned.

> [!NOTE]
>
> **Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.

> [accordion] Copy for AI assistant
>
> Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
>
> ```text Prompt
> I want to make an API call to /v1/youtube/video/comments. Here are the details:
>
> Endpoint: GET https://api.scraperize.com/v1/youtube/video/comments
> Description: Fetches the comments on a YouTube video or Short, 20 per page, by top comments or newest first. Each comment has its id, text and the links in it, its author (channel id, handle, avatar, verified, whether it is the video's creator), when it was posted and whether it was edited, its likes and reply count (rounded, as YouTube shows them), whether it is pinned or hearted by the creator, any attached image, and a `repliesToken` — pass it to `/v1/youtube/video/comment/replies` to get its replies. The response also gives the exact total number of comments. Pass the returned `cursor` back (with the same `url`) for the next page. A video with comments turned off returns no comments and `commentsDisabled: true`. Only publicly available data is returned.
>
> Required Headers:
> - x-api-key: Your API key
>
> Parameters:
> - url (string) [required]: A YouTube video or Short URL — `youtube.com/watch?v=<id>`, `youtu.be/<id>`, `youtube.com/shorts/<id>`.
> - order (select): `top` (default) or `newest`. Ignored with a cursor — the cursor keeps its order.
> - cursor (string): The `cursor` from the previous page, to get the next one. Omit for the first page.
> - cache_max_age (select): Optional. Return a cached result if one this age or newer exists — served for **0 credits** with `meta.cached=true` and `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and refreshes the cache. Omit to always scrape fresh.
>
> Example Response:
> {
>   "data": {
>     "video": {
>       "id": "dQw4w9WgXcQ",
>       "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
>     },
>     "order": "top",
>     "totalCount": 2461342,
>     "commentsDisabled": false,
>     "comments": [
>       {
>         "id": "Ugw10bSluCDSZMIxUSB4AaABAg",
>         "parentId": null,
>         "text": "Let’s put the meme aside, this is actually a banging song.",
>         "links": [],
>         "author": {
>           "id": "UCHpvHTRSILoOFKWX5oFCYDA",
>           "handle": "LK-ht7qz",
>           "url": "https://www.youtube.com/@LK-ht7qz",
>           "avatarUrl": "https://yt3.ggpht.com/RJnrz4JwDmHNgtFdnVdJ6FKLiuo59IuHkY6bvqaEJM0mxTSlq0GKQs_ItA-sJ8QMqps_lf9Lvgs=s88-c-k-c0x00ffffff-no-rj",
>           "isVerified": false,
>           "isCreator": false,
>           "isArtist": false
>         },
>         "publishedText": "6 years ago",
>         "isEdited": false,
>         "likeCount": 221000,
>         "likeCountText": "221K",
>         "replyCount": 620,
>         "isPinned": false,
>         "pinnedText": null,
>         "isHearted": false,
>         "heartedBy": null,
>         "images": [],
>         "repliesToken": "Eg0SC2RRdzR3OVdnWGNRGAYygwEaUBIaVWd3MTBiU2x1Q0RTWk1JeFVTQjRBYUFCQWciAggAKhhVQ3VBWEZrZ3N3MUw3eGFDZm5kNUpKT3cyC2RRdzR3OVdnWGNRQAFICoIBAggBQi9jb21tZW50LXJlcGxpZXMt…"
>       }
>     ],
>     "count": 20,
>     "cursor": "eyJrIjoiZFF3NHc5V2dYY1EiLCJvIjoidG9wIiwiYyI6IkVnMFNDMlJSZHpSM09WZG5XR05SR0FZeV9nSUsxQUpuWlhSZmNtRnVhMlZrWDNOMGNtVmhiWE10TFVOeFdVSkRTVUZGUmxKbE16QlVaMkZ0ZDBWTGJH…",
>     "hasMore": true,
>     "fetchedAt": "2026-11-05T15:05:11.703Z"
>   },
>   "meta": {
>     "requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
>     "creditsCharged": 1,
>     "creditsRemaining": 4999,
>     "cached": false
>   }
> }
>
> Please help me write code in my preferred programming language to make this API call and handle the response appropriately. Include error handling and best practices.
> ```


## OpenAPI

````yaml /api-reference/openapi.json get /v1/youtube/video/comments
openapi: 3.0.3
info:
  title: Scraperize API
  version: 1.0.0
  description: >-
    Extract public data from social media platforms as clean JSON. Endpoints are
    split by platform and by what they return, e.g. `GET /v1/twitter/tweet`.


    ## Authentication

    Send your API key in the `x-api-key` header (or `Authorization: Bearer
    <key>`). Create keys in your dashboard.


    ## Credits

    Each successful live scrape costs **1 credit**. Credits are prepaid and
    never expire.


    ## Caching

    Every endpoint accepts an optional `cache_max_age`
    (`1d`|`3d`|`7d`|`14d`|`30d`). A cache hit within that window is returned for
    **0 credits**.


    ## Responses

    Success returns `{ "data": …, "meta": { "requestId", … } }`. Errors return
    `{ "error": { "code", "message", "requestId" } }` with a matching HTTP
    status. `meta` on a scrape carries `creditsCharged`, `creditsRemaining`,
    `cached`, and (on a hit) `cachedAt`.


    ## Rate limits

    Requests are limited per team per minute; over the limit returns `429` with
    a `Retry-After` header.
servers:
  - url: https://api.scraperize.com
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Twitter
    description: Twitter / X scraping endpoints
  - name: Facebook
    description: Facebook scraping endpoints
  - name: Linkme
    description: Linkme (link.me) scraping endpoints
  - name: Amazon
    description: Amazon (creator shop / storefront) scraping endpoints
  - name: Linkbio
    description: Linkbio (lnk.bio) scraping endpoints
  - name: Pillar
    description: Pillar (pillar.io) scraping endpoints
  - name: Komi
    description: Komi (komi.io) scraping endpoints
  - name: Linktree
    description: Linktree (linktr.ee) scraping endpoints
  - name: Kick
    description: Kick (kick.com) scraping endpoints
  - name: Snapchat
    description: Snapchat (snapchat.com) scraping endpoints
  - name: Telegram
    description: Telegram (t.me) scraping endpoints
  - name: LinkedIn
    description: LinkedIn scraping endpoints
  - name: Twitch
    description: Twitch scraping endpoints
  - name: TikTok
    description: TikTok (tiktok.com) scraping endpoints
  - name: Instagram
    description: Instagram scraping endpoints
  - name: Lagos Life
    description: Lagos Life scraping endpoints
  - name: Bluesky
    description: Bluesky (bsky.app) scraping endpoints
  - name: Threads
    description: Threads (threads.com) scraping endpoints
  - name: Reddit
    description: Reddit (reddit.com) scraping endpoints
  - name: Rumble
    description: Rumble (rumble.com) scraping endpoints
  - name: Truth Social
    description: Truth Social (truthsocial.com) scraping endpoints
  - name: YouTube
    description: YouTube (youtube.com) scraping endpoints
paths:
  /v1/youtube/video/comments:
    get:
      tags:
        - YouTube
      summary: Video comments
      description: >-
        Fetches the comments on a YouTube video or Short, 20 per page, by top
        comments or newest first. Each comment has its id, text and the links in
        it, its author (channel id, handle, avatar, verified, whether it is the
        video's creator), when it was posted and whether it was edited, its
        likes and reply count (rounded, as YouTube shows them), whether it is
        pinned or hearted by the creator, any attached image, and a
        `repliesToken` — pass it to `/v1/youtube/video/comment/replies` to get
        its replies. The response also gives the exact total number of comments.
        Pass the returned `cursor` back (with the same `url`) for the next page.
        A video with comments turned off returns no comments and
        `commentsDisabled: true`. Only publicly available data is returned.
      parameters:
        - name: url
          in: query
          required: true
          description: >-
            A YouTube video or Short URL — `youtube.com/watch?v=<id>`,
            `youtu.be/<id>`, `youtube.com/shorts/<id>`.
          schema:
            type: string
          example: https://www.youtube.com/watch?v=dQw4w9WgXcQ
        - name: order
          in: query
          required: false
          description: >-
            `top` (default) or `newest`. Ignored with a cursor — the cursor
            keeps its order.
          schema:
            type: string
            enum:
              - top
              - newest
        - name: cursor
          in: query
          required: false
          description: >-
            The `cursor` from the previous page, to get the next one. Omit for
            the first page.
          schema:
            type: string
        - name: cache_max_age
          in: query
          required: false
          description: >-
            Optional. Return a cached result if one this age or newer exists —
            served for **0 credits** with `meta.cached=true` and
            `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and
            refreshes the cache. Omit to always scrape fresh.
          schema:
            type: string
            enum:
              - 1d
              - 3d
              - 7d
              - 14d
              - 30d
          example: 7d
      responses:
        '200':
          description: One page of the video's comments (none when comments are off).
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      video:
                        type: object
                      order:
                        type: string
                      totalCount:
                        type: integer
                        nullable: true
                      commentsDisabled:
                        type: boolean
                      comments:
                        type: array
                        items:
                          type: object
                      count:
                        type: integer
                      cursor:
                        type: string
                        nullable: true
                      hasMore:
                        type: boolean
                      fetchedAt:
                        type: string
                        format: date-time
                  meta:
                    type: object
                    description: >-
                      requestId + credit/caching metadata (creditsCharged,
                      creditsRemaining, cached, cachedAt).
                required:
                  - data
                  - meta
              example:
                data:
                  video:
                    id: dQw4w9WgXcQ
                    url: https://www.youtube.com/watch?v=dQw4w9WgXcQ
                  order: top
                  totalCount: 2461342
                  commentsDisabled: false
                  comments:
                    - id: Ugw10bSluCDSZMIxUSB4AaABAg
                      parentId: null
                      text: >-
                        Let’s put the meme aside, this is actually a banging
                        song.
                      links: []
                      author:
                        id: UCHpvHTRSILoOFKWX5oFCYDA
                        handle: LK-ht7qz
                        url: https://www.youtube.com/@LK-ht7qz
                        avatarUrl: >-
                          https://yt3.ggpht.com/RJnrz4JwDmHNgtFdnVdJ6FKLiuo59IuHkY6bvqaEJM0mxTSlq0GKQs_ItA-sJ8QMqps_lf9Lvgs=s88-c-k-c0x00ffffff-no-rj
                        isVerified: false
                        isCreator: false
                        isArtist: false
                      publishedText: 6 years ago
                      isEdited: false
                      likeCount: 221000
                      likeCountText: 221K
                      replyCount: 620
                      isPinned: false
                      pinnedText: null
                      isHearted: false
                      heartedBy: null
                      images: []
                      repliesToken: >-
                        Eg0SC2RRdzR3OVdnWGNRGAYygwEaUBIaVWd3MTBiU2x1Q0RTWk1JeFVTQjRBYUFCQWciAggAKhhVQ3VBWEZrZ3N3MUw3eGFDZm5kNUpKT3cyC2RRdzR3OVdnWGNRQAFICoIBAggBQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3cxMGJTbHVDRFNaTUl4VVNCNEFhQUJBZw%3D%3D
                    - id: Ugxzbv_ZeZXNRcfwsSF4AaABAg
                      parentId: null
                      text: >-
                        Is everyone going to ignore the fact that Rick Astley
                        looks like a twelve year old boy but has a uniquely deep
                        voice?
                      links: []
                      author:
                        id: UCNLgzvqrGzFi5SEAbVkFchg
                        handle: candycake9531
                        url: https://www.youtube.com/@candycake9531
                        avatarUrl: >-
                          https://yt3.ggpht.com/ytc/AIdro_mEO82VrM8XtyGrBUkJgbAYgpAmDpUZixd1QvK9kyA=s88-c-k-c0x00ffffff-no-rj
                        isVerified: false
                        isCreator: false
                        isArtist: false
                      publishedText: 6 years ago
                      isEdited: false
                      likeCount: 293000
                      likeCountText: 293K
                      replyCount: 727
                      isPinned: false
                      pinnedText: null
                      isHearted: false
                      heartedBy: null
                      images: []
                      repliesToken: >-
                        Eg0SC2RRdzR3OVdnWGNRGAYygwEaUBIaVWd4emJ2X1plWlhOUmNmd3NTRjRBYUFCQWciAggAKhhVQ3VBWEZrZ3N3MUw3eGFDZm5kNUpKT3cyC2RRdzR3OVdnWGNRQAFICoIBAggBQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3h6YnZfWmVaWE5SY2Z3c1NGNEFhQUJBZw%3D%3D
                    - id: UgwPwTibxdgqCHZxktd4AaABAg
                      parentId: null
                      text: >-
                        My algebra teacher said that this was a link to the test
                        answers
                      links: []
                      author:
                        id: UCdi6tGxvFvTRGe-7dAn7m7w
                        handle: bdr8823
                        url: https://www.youtube.com/@bdr8823
                        avatarUrl: >-
                          https://yt3.ggpht.com/ytc/AIdro_kcDoQJUNDkDzTrA5kaF5ADVujN-6UcDjMP2Kydtw=s88-c-k-c0x00ffffff-no-rj
                        isVerified: false
                        isCreator: false
                        isArtist: false
                      publishedText: 7 years ago
                      isEdited: false
                      likeCount: 71000
                      likeCountText: 71K
                      replyCount: 672
                      isPinned: false
                      pinnedText: null
                      isHearted: false
                      heartedBy: null
                      images: []
                      repliesToken: >-
                        Eg0SC2RRdzR3OVdnWGNRGAYygwEaUBIaVWd3UHdUaWJ4ZGdxQ0haeGt0ZDRBYUFCQWciAggAKhhVQ3VBWEZrZ3N3MUw3eGFDZm5kNUpKT3cyC2RRdzR3OVdnWGNRQAFICoIBAggBQi9jb21tZW50LXJlcGxpZXMtaXRlbS1VZ3dQd1RpYnhkZ3FDSFp4a3RkNEFhQUJBZw%3D%3D
                  count: 20
                  cursor: >-
                    eyJrIjoiZFF3NHc5V2dYY1EiLCJvIjoidG9wIiwiYyI6IkVnMFNDMlJSZHpSM09WZG5XR05SR0FZeV9nSUsxQUpuWlhSZmNtRnVhMlZrWDNOMGNtVmhiWE10TFVOeFdVSkRTVUZGUmxKbE16QlVaMkZ0ZDBWTGJHZEZTVEpHT0ZGblFWRlpRbmxMVEVGYWMzZGlUREl4UVMxMWNXOXVkMUpoZVVOeFlVdE9hbFJvVWtsRWMzSnlSRE5PVGtkdVRGQm5hR2hGY0RCMVNtMW1VbVJ5WDJWeFNVTlNNVTF0VUVWRFFXeEVOakJUY0ZoSmJIcGFOMHhNV0doV1ZsWnNNMGhJV1VsVlNuVkdlVFZGZFVOTVVUbGFZM1pIUlVOSGVrVXRXbWsyVDNGUU9WaG5XWFJaYWtZNVMyeE9XRE15V0ZGTFRVYzNRM2xwTkZvd1JGZEVRbmQzVDI4eVdtbGZjMWRUYnpSM1pXRTBia05TT1U1UlUzVlhNMGRVUW05QllVRmpWRFJSUmtKSlNFTkpWV2RGUVZWWlFWSkpSa05OUVdkSFFVRlRRbEZwU1VsQ1owRkZaMVZKYUhsQldVRkNTVVpEU1d0blIwRkJVMEpSYVVkSlFtZEJSV2RqU1doRFFWRkVlR2RDUldkVlNYRkRRVmxCUWtsR1EweHpaMGRCUWxGQlJtZENJaEVpQzJSUmR6UjNPVmRuV0dOUk1BQjRBU2dVUWhCamIyMXRaVzUwY3kxelpXTjBhVzl1IiwibiI6MjQ2MTM0Mn0
                  hasMore: true
                  fetchedAt: '2026-11-05T15:05:11.703Z'
                meta:
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
                  creditsCharged: 1
                  creditsRemaining: 4999
                  cached: false
        '400':
          description: Invalid or expired cursor (or one for another video).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: BAD_REQUEST
                  message: The request was invalid.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '401':
          description: Missing, invalid, or revoked API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: UNAUTHORIZED
                  message: API key required — pass it in the `x-api-key` header.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '402':
          description: Not enough credits for this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: INSUFFICIENT_CREDITS
                  message: >-
                    This request costs 1 credit, but your balance is 0. Top up
                    to continue.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '404':
          description: >-
            No YouTube video found (it may not exist, be private or have been
            removed).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: NOT_FOUND
                  message: >-
                    The requested content was not found (it may not exist, be
                    deleted, or be private).
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '422':
          description: >-
            Invalid query parameters (url is required; order is `top` or
            `newest`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: VALIDATION_ERROR
                  message: Request validation failed
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
                  details:
                    - path: url
                      message: url is required
        '429':
          description: Over the per-minute rate limit — honour `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: RATE_LIMITED
                  message: >-
                    Rate limit exceeded — max 100 requests per 60s. Retry in
                    ~30s.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '503':
          description: >-
            Temporarily unavailable — retry after `Retry-After`. `error.code`
            tells you why: `UPSTREAM_BLOCKED` (the source blocked this request),
            `EXTRACTION_FAILED` (the source returned unexpected data),
            `PLATFORM_UNAVAILABLE` (the source is down), or
            `SERVICE_UNAVAILABLE` (we are at capacity).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: UPSTREAM_BLOCKED
                  message: >-
                    The source is temporarily unavailable. Please try again
                    shortly.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: NOT_FOUND
            message:
              type: string
              example: The requested content was not found.
            requestId:
              type: string
              example: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
            details:
              type: array
              items:
                type: object
              description: Present on validation errors.
          required:
            - code
            - message
            - requestId
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your API key. Send it in the `x-api-key` header (or `Authorization:
        Bearer <key>`). Create and manage keys from your dashboard.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.