Douyin Comments API — Comments on a Video
Documentation menu
FetchLayer FetchLayer API

Read the comments on a video

Top-level comments on a video in Douyin’s own ranking, each with its exact likes, reply count and the province it was posted from. Up to 2000 in one request, continuing with a cursor. comment-replies reads the replies. 1 credit per 50 comments.

POST /video-comments Videos
https://api.fetchlayer.dev/douyin/video-comments
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

video string required

A video or image post: its id (7665908051974704410), a douyin.com or iesdouyin.com link, a v.douyin.com share link, or pasted share text containing one.

limit integer optional

Maximum comments returned, up to 2000, or -1 for as many as available. Comments come 50 to a page and each page is 1 credit; leaving out repeats can occasionally take one more page. (default: 50)

cursor string optional

The cursor from a previous response, passed back unchanged with the same request, to continue exactly where it stopped. Treat it as opaque: a cursor from another route, video or collection, or one this service did not issue, is a 400 naming cursor.

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. Where possible a partial answer comes back with a note; a request with nothing to return yet fails with a 503 you can retry, marked with the response header X-Timeout-Source: caller.

Response Fields

video-comments

Read the comments on a video

transport string

The data source: always the platform id, "douyin".

fetchedAt string

When the data was read (ISO 8601).

notes string[]

Caveats you can act on, such as older videos existing beyond the list. Empty when there are none.

videoId string

The video’s id.

totalComments number

Douyin’s own comment total for the video.

comments object[]

Top-level comments, in Douyin’s ranking. The ranking can shift slightly between calls, so a continuation may differ a little from one long read.

comments[].id string

The comment’s id.

comments[].text string

The comment’s text.

comments[].createdAt string

When it was posted (ISO 8601); createTime is unix seconds.

comments[].likes number

Likes, exact.

comments[].replyCount number

How many replies it has. comment-replies reads them.

comments[].ipLocation string | null

The province or country Douyin shows for the commenter (IP属地), e.g. 山东.

comments[].author object

The same shape as a video’s author: uid, secUid, uniqueId, nickname, avatarUrl, followerCount (null here, never zero), verification and profileUrl.

commentCount number

How many comments are in this response.

skippedRecords object[]

Items Douyin listed that could not be returned whole, each as { id, reason, fieldsPresent }; id may be null. Normally empty.

pagesFetched number

Pages read, 50 comments to a page, which is what the request costs: one credit per page.

hasMore boolean

Whether more comments remain.

cursor string | null

Pass back as cursor, with the same request, to continue exactly where this response stopped. null when there is nothing further.

Request

curl -X POST "https://api.fetchlayer.dev/douyin/video-comments" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"video":"7665908051974704410","limit":120}'

Response

{
  "transport": "douyin",
  "fetchedAt": "2026-10-15T15:54:07.597Z",
  "notes": [],
  "videoId": "7665908051974704410",
  "totalComments": 6899,
  "comments": [
    {
      "id": "7666861957731435300",
      "text": "奇怪的珠子能强化治疗自身…",
      "createdAt": "2026-07-26T15:40:08.000Z",
      "createTime": 1785080408,
      "likes": 11,
      "replyCount": 1,
      "ipLocation": "山东",
      "author": {
        "uid": "3654426877240749",
        "secUid": "MS4wLjABAAAAVjA_8KSzJiJtVxGi4u5W9YLL_fNAi4SxtfdymYk321853zRQdT0_UBrPcYnCyFOj",
        "nickname": "²⁰²⁶"
      }
    }
  ],
  "commentCount": 120,
  "pagesFetched": 3,
  "hasMore": true,
  "cursor": "dy1.eyJy…"
}