Video comments
/api/v1/comments/:videoIdRead one page of public comments using your API key. Each nonempty page costs 1 credit from the same balance as transcripts, including continuation and reply pages. You do not need to fetch a transcript first. Errors and empty pages are not charged, but at least 1 credit must be available before the request runs.
Request
Pass an 11-character video ID. Optional sort is top (default) or newest. To page forward or open replies, pass an opaque continuation token from the previous response; it carries the ordering and thread context.
curl -H "Authorization: Bearer yvt_live_..." \
"https://api.youtubevideotranscript.io/api/v1/comments/dQw4w9WgXcQ?sort=top"Response
The response contains video_id, nullable title, nullable total_comments, a comments array, and continuation (null when there is no next page). Title and total may be null on later pages. Top-level pages usually contain about 20 comments; page size is set by YouTube and reply pages can be smaller.
Each comment includes comment_id, text,likes, reply_count, published, author information, a YouTube url, and a nullable reply_continuation. Likes and publication times are display text, not exact numeric counts or timestamps. Replies include is_reply and parent_comment_id.
Comment fields
| Name | Type | Description |
|---|---|---|
comment_id, text, author, url | string | Comment identifier, body, author display name, and direct YouTube comment link. |
likes, published | string | null | YouTube's display text, not an exact count or timestamp. |
reply_count | number | Reported reply count for the comment; replies are fetched separately. |
is_reply | boolean | True on reply rows. |
parent_comment_id | string | null | Top-level parent for a reply, null for a top-level comment. |
author_channel_id | string | null | Author's channel identifier when available. |
author_is_creator, author_is_verified | boolean | Creator and verification markers returned by the parser. |
is_pinned, is_hearted | boolean | Pinned and creator-heart markers returned by the parser. |
reply_continuation | string | null | Token for fetching this comment's replies; absent from saved bulk samples. |
Pagination and billing
Send the response's continuation as the next request's continuation parameter for more comments. Send a comment's reply_continuation instead to open its replies. URL-encode tokens when building the query string. Each nonempty response costs another credit, even when requesting a page you fetched before. GET requests do not have idempotency protection.
# Use the page continuation for more top-level comments,
# or a comment's reply_continuation for its replies.
curl --get -H "Authorization: Bearer yvt_live_..." \
--data-urlencode "continuation=OPAQUE_TOKEN" \
"https://api.youtubevideotranscript.io/api/v1/comments/dQw4w9WgXcQ"Keep each reply walk separate from the top-level walk. The returned continuation advances whichever walk you requested; a null token ends that walk. Tokens contain the original video and ordering. To switch from Top to Newest, start without a token; sort does not change an existing continuation. There is no amount or all parameter on this endpoint. Your client chooses how many pages to fetch.
Insufficient credits return 402 insufficient_quota. Disabled comments return 404 not_found without a charge. Malformed IDs, sort values, or tokens return 400 bad_request. If you also want the transcript, call the transcript endpoint separately for 1 credit. MCP offers include_comments on its transcript tool for a combined cost of 2 credits when both succeed.
Saved samples and background collections
Transcript bulk jobs can include one Top page per successful transcript. Read those saved samples with GET /jobs/:id/videos?include=comments or download the ZIP; neither operation spends another credit.
For an amount per video, all available comments, optional replies, and a job-wide budget, use the website comments collector. There is no public API or MCP tool to create that standalone job yet. Once created, it appears in API job history and can be exported through GET /jobs/:id/export as JSON and CSV in one ZIP. Its comment rows are not returned by include=comments on the per-video endpoint; that flag reads transcript-job samples only.
See Quotas & credits for the full billing rules and GET /usage to check your balance without spending a credit.