Read a video’s comments
The public comments on a TikTok video, by id or URL, each with its text, time, likes, reply count, pinned and author flags. Paged: up to 50 comments a page, 1 credit per page fetched.
/comments Videos https://api.fetchlayer.dev/tiktok/comments Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
video string required A video URL or a numeric video id. Shortened share links are rejected — resolve them first.
limit integer optional Maximum comments returned, up to 500. Use -1 for the maximum. TikTok serves at most 50 to a page, so a larger limit needs more pages; a page often holds a few fewer, because TikTok counts comments it does not show, and the note says so. (default: 30)
pages integer optional Pages of results to return in one request, up to 20. Use -1 for the maximum. Each page fetched is 1 credit, and the response reports how many as pagesFetched. A limit larger than one page needs more pages: with pages: 1 the response holds one page, a nextCursor and a note saying the pages limit was reached. When leaving out videos already returned would bring a response short of limit, it takes one more page to fill it; that page shows in pagesFetched, so a request can cost one credit more than the pages asked for. (default: 1)
cursor string optional Continue from a previous response’s nextCursor, passed back unchanged with the same request. A cursor continues only the route, and the account and sort, hashtag, search term or video, it came from; a cursor from anywhere else, or one this service did not return, is a 400. Bare numeric cursors from before still work, except on search-videos, where one is a 400 asking you to repeat the search.
format string optional json or markdown, lowercase; any other value is a 400. Over MCP, markdown returns the result rendered as text; the REST API accepts it and returns JSON. (default: json)
timeoutMs integer optional Time limit for the whole request, in milliseconds (1000–120000); a value outside that range is a 400. When it runs out, a paged request returns what it has with nextCursor, billed for the pages it returned; a request with nothing to return yet fails with a 503 you can retry, marked with the response header X-Timeout-Source: caller. Left out, the request runs as long as it needs.
Response Fields
comments
Read a video’s comments
transport string The data source: always the platform id, "tiktok".
notes string[] Caveats you can act on — a private account, comments turned off, a list that ran out early, paging that has gone as deep as it goes. Empty when there are none. An empty result always comes with a note explaining it, never as an unexplained empty array.
pagesFetched number Pages of results fetched, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed.
videoId string The video the comments belong to.
comments object[] The comments, in TikTok’s own order. Empty when comments are turned off, with the note "Comments are turned off for this video."
comments[].id string Numeric comment id.
comments[].text string The comment body.
comments[].createdAt string ISO 8601 timestamp, or null.
comments[].likeCount number Likes on the comment.
comments[].replyCount number How many replies exist in total — which can exceed what `replies` holds.
comments[].isAuthor boolean Whether the video’s author wrote it.
comments[].likedByAuthor boolean Whether the video’s author liked it.
comments[].pinned boolean Whether it is pinned to the top.
comments[].author object id, uniqueId, nickname, avatarUrl, signature, verified, privateAccount, profileUrl and secUid. Fields TikTok does not publish on a commenter are null.
comments[].replies object[] Only the replies TikTok shows alongside the comment — usually none or a handful. Read replyCount for the true total.
commentCount number How many comments are in this response.
totalCount number The total TikTok publishes for the video, which can exceed what paging can reach.
hasMore boolean Whether more comments exist beyond what was returned.
nextCursor string | null An opaque token (tt1.…) to pass back unchanged as cursor, or null. TikTok ranks comments afresh for each request, so a further page can repeat a few you already have and miss others: de-duplicate on id.
Request
curl -X POST "https://api.fetchlayer.dev/tiktok/comments" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"video":"7686148096895569165","limit":30}'Response
{
"transport": "tiktok",
"notes": [],
"pagesFetched": 1,
"videoId": "7686148096895569165",
"comments": [
{
"id": "7686156652273713942",
"text": "Imagine trying to nod to the beat in zero gravity and accidentally rotating the rest of yourself 😂",
"createdAt": "2026-09-16T15:33:48.000Z",
"likeCount": 5,
"replyCount": 0,
"isAuthor": false,
"likedByAuthor": false,
"pinned": false,
"author": {
"id": "6992252002843853829",
"uniqueId": "newy963",
"nickname": "newy963",
"verified": null,
"profileUrl": "https://www.tiktok.com/@newy963"
},
"replies": []
}
],
"commentCount": 30,
"totalCount": 183,
"hasMore": true,
"nextCursor": "tt1.eyJyIjoiY20iLCJrIjoiNzY4NjE0ODA5Njg5NTU2OTE2NSIsImMiOiIzMCJ9"
}