Skip to content
Eden Engine

Douyin Comment Replies Lookup (by Video ID and Comment ID)

omnial/douyin-app-fetch-video-comment-replies

Given a Douyin video id and a comment id on that video, returns the replies posted under that comment: each reply's text, like count, timestamp, author (display name, handle, public user id), which reply or user it was addressed to, and pagination cursor/total for walking the full thread. A comment id that does not belong to the given video still returns real reply data rather than an error -- the endpoint does not cross-validate the pairing.

activeper callv1
Provider
Web & Business Data Network
Category
douyin
Provider price
$0.0020475 per call
Latency p50 / p95
— / —
Success rate
—
Verified
—

Provider list price; Omnial MCP charges provider cost plus a platform markup on top.

Contract

input_schema.json
{
  "type": "object",
  "required": [
    "item_id",
    "comment_id"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "default": 20,
      "description": "Number"
    },
    "cursor": {
      "type": "integer",
      "default": 0,
      "description": "Cursor"
    },
    "item_id": {
      "type": "string",
      "examples": [
        "7354666303006723354"
      ],
      "description": "Video id"
    },
    "comment_id": {
      "type": "string",
      "examples": [
        "7354669356632638218"
      ],
      "description": "Comment id"
    }
  },
  "additionalProperties": false
}
output_schema.json
{
  "type": "object",
  "required": [
    "comments",
    "cursor",
    "has_more",
    "total"
  ],
  "properties": {
    "total": {
      "type": "number",
      "description": "Total reply count under the queried comment. Observed as 0 on one real fixture despite 8 replies being returned -- do not treat this as an accurate count."
    },
    "cursor": {
      "type": "number",
      "description": "Pass back as `cursor` to fetch the next page."
    },
    "comments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The reply's own comment id (source: cid)."
          },
          "text": {
            "type": "string"
          },
          "user": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Source: uid."
              },
              "handle": {
                "type": "string",
                "description": "The author's public Douyin handle. Empty string when unset (source: unique_id)."
              },
              "region": {
                "type": "string",
                "description": "Country code, e.g. 'CN'."
              },
              "sec_uid": {
                "type": "string",
                "description": "Douyin's opaque secure user id."
              },
              "nickname": {
                "type": "string",
                "description": "The author's public display name."
              },
              "short_id": {
                "type": "string"
              }
            },
            "description": "The reply's author.",
            "additionalProperties": false
          },
          "is_hot": {
            "type": "boolean"
          },
          "video_id": {
            "type": "string",
            "description": "The video this reply belongs to (source: aweme_id)."
          },
          "can_share": {
            "type": "boolean",
            "description": "Not present on every reply observed."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the reply is buried/collapsed by moderation (source: user_buried)."
          },
          "badge_text": {
            "type": "string",
            "description": "A badge label Douyin shows next to the reply, e.g. '作者' (author). Empty string when none."
          },
          "badge_type": {
            "type": "number"
          },
          "created_at": {
            "type": "number",
            "description": "Unix seconds."
          },
          "like_count": {
            "type": "number",
            "description": "Source: digg_count."
          },
          "can_collect": {
            "type": "boolean"
          },
          "reply_count": {
            "type": "number",
            "description": "Total replies to this specific reply, when the endpoint reports it (source: comment_reply_total). Absent on every reply in `invalid-comment-id.json`."
          },
          "author_liked": {
            "type": "boolean",
            "description": "Whether the video's own author liked this reply (source: is_author_digged)."
          },
          "nesting_level": {
            "type": "number",
            "description": "Source: level."
          },
          "root_comment_id": {
            "type": "string",
            "description": "The thread's top-level comment id. Present on every reply in `example-video-replies.json`, absent on every reply in `invalid-comment-id.json` -- the endpoint does not always return it, not required."
          },
          "commenter_region": {
            "type": "string",
            "description": "Coarse IP-derived region label Douyin itself displays next to the reply (e.g. a Chinese province name, or 'IP未知' when unresolved) -- source: ip_label."
          },
          "reply_to_user_id": {
            "type": "string",
            "description": "Public user id of the user this reply is addressed to (source: reply_to_userid)."
          },
          "parent_comment_id": {
            "type": "string",
            "description": "The comment id this reply was posted under (source: reply_id)."
          },
          "reply_to_nickname": {
            "type": "string",
            "description": "Display name of the user this reply is addressed to. Present only on replies nested under another reply, not on a reply addressed directly to the root comment (source: reply_to_username)."
          },
          "reply_to_comment_id": {
            "type": "string",
            "description": "The specific reply this one is addressed to within the thread, when nested more than one level deep (source: reply_to_reply_id). '0' on a reply addressed directly to the root comment."
          },
          "reply_to_user_sec_id": {
            "type": "string",
            "description": "Douyin's opaque secure user id for the user this reply is addressed to."
          }
        },
        "additionalProperties": false
      },
      "description": "The replies to the given comment. Never observed empty in either fixture."
    },
    "has_more": {
      "type": "number",
      "description": "Observed as 0 or 1 (not a boolean) on real calls -- truthy/falsy integer."
    }
  },
  "description": "The reply-list record, as returned at routing.responseResultPath ($.output).",
  "additionalProperties": false
}

Pricing

Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.

Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.

ChargeRate
Per call
Flat, regardless of what comes back
$0.0020475
Cost basis
Not recorded

This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.

Updated
Sep 23, 2026