TikTok Comments API — Scrape Comments on a Video

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.

POST /comments Videos
https://api.fetchlayer.dev/tiktok/comments
OpenAPI JSON

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"
}
Product overviewTikTok API: what it returns, pricing and use cases