# List the comments on a TikTok video

Returns the comments on a TikTok video, with author, likes and reply count, a page at a time. Use it to read how an audience reacts to a video.

Tool `tiktok.video.comments` on TikTok. Contract version 1, released 2026-10-27.

## Example call

Over REST, send the input in the body. Over MCP, pass the same input to `call_tool`.

cURL:

```bash
curl https://api.voxoria.ai/v1/tools/tiktok.video.comments/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"video_id":"7606449212716305678"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/tiktok.video.comments/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={"input": {"video_id": "7606449212716305678"}},
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/tiktok.video.comments/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"input": {"video_id": "7606449212716305678"}}),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "tiktok.video.comments",
    "input": {
      "video_id": "7606449212716305678"
    }
  }
}
```

Both return [the full response](/docs/call-response.md): the call's ID, status and cost, with this tool's result in `output`.

## Input

| Input | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `video_id` | string | Yes |  | TikTok's numeric identifier of the video, the digits after /video/ in its address. Matches `^[0-9]+$`. |
| `next_page_token` | string | No |  | Fetches the next page. Take it from pagination.next_page_token of the previous page, and send the same video_id. |

## Output

A successful call returns these blocks in its `output`. A field not marked required can be `null`.

### comments

A list of rows. Always present, possibly empty.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes | TikTok's numeric identifier of the comment, as a string. |
| `text` | string | No | What the comment says. |
| `published_at` | string | No | When the comment was posted, in ISO 8601. |
| `author_id` | string | No | TikTok's numeric identifier of the author, as a string. |
| `author_sec_uid` | string | No | TikTok's secure identifier of the author, which tiktok.user.videos takes as sec_uid. |
| `author_username` | string | No | The author's handle, without the @. |
| `author_name` | string | No | The author's display name. |
| `author_image_url` | string | No | Address of the author's profile picture. |
| `like_count` | integer | No |  |
| `reply_count` | integer | No |  |
| `image_urls` | array of string | No | Address of each image attached to the comment. |

### pagination

One object. Can be `null`. How to fetch the next page. Null on the last page.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `next_page_token` | string | Yes | Send as next_page_token to fetch the next page. |

## Example output

The `output` of a real call, each list cut to 3 items.

```json
{
  "comments": [
    {
      "id": "7606529313643954962",
      "text": "is this her",
      "published_at": "2026-02-14T01:38:57Z",
      "author_id": "7422429654504702992",
      "author_sec_uid": "MS4wLjABAAAAxLohPNJFrlZLSwuyAkAoaBhHVDw0tlBiiFsSa5AYIyqm9wLLT4BTpYhWs4rnDqKU",
      "author_username": "sheengie0",
      "author_name": "NICOLE",
      "author_image_url": "https://p16-common-sign.tiktokcdn-us.com/tos-alisg-avt-0068/fab4a81f26421679e69134dea85b38ed~tplv-tiktokx-cropcenter:100:100.jpg?dr=9640&refresh_token=6fcf79e7&x-expires=1793246400&x-signature=tvEk0iO7X4DMU3FJuh0ZdPTBbrA%3D&t=4d5b0474&ps=13740610&shp=30310797&shcp=ff37627b&idc=useast5",
      "like_count": 133098,
      "reply_count": 42,
      "image_urls": [
        "https://p16-comment-sg-sign.tiktokcdn-us.com/tos-alisg-i-zt8igodiya-sg/4c828bee6fca403db073f67cf316029b~tplv-jj85edgx6n-image-origin.image?dr=11732&refresh_token=0b6025e4&x-expires=1795752000&x-signature=mfUaYzY%2FPoxS32oXB4%2BMV3AI0wg%3D&t=67a6c45e&ps=a0626fcd&shp=ff37627b&shcp=ff37627b&idc=useast5"
      ]
    },
    {
      "id": "7606779946837164820",
      "text": "Kimberly Kim looks different",
      "published_at": "2026-02-14T17:53:54Z",
      "author_id": "7418277300980106245",
      "author_sec_uid": "MS4wLjABAAAAT0JJPQ81h53wUtrlsBgWwiqYtVsruIgS1W0UwSpXdOIXV3TL3wNHWYkskMAdhsUG",
      "author_username": "user9950261282307",
      "author_name": "𝓡𝓲𝓶𝓷𝓪💫",
      "author_image_url": "https://p16-common-sign.tiktokcdn-us.com/tos-alisg-avt-0068/92fe3e657e2fd502437049af5691b2cf~tplv-tiktokx-cropcenter:100:100.jpg?dr=9640&refresh_token=aa87951c&x-expires=1793246400&x-signature=AcS2SaMMqINUyZZdx3fc8wO0LkE%3D&t=4d5b0474&ps=13740610&shp=30310797&shcp=ff37627b&idc=useast5",
      "like_count": 4378,
      "reply_count": 7,
      "image_urls": null
    },
    {
      "id": "7606611415797711646",
      "text": "Kimberly looks so different",
      "published_at": "2026-02-14T06:58:50Z",
      "author_id": "7100727391399609387",
      "author_sec_uid": "MS4wLjABAAAAvqAH9NegMXxhfGxY58j3rFhMvYC7sYZtHzX_v1JiSGzAqTFUBYb32YLotOX_PZhH",
      "author_username": "ilikelimes67",
      "author_name": "ilikelimes67",
      "author_image_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/8c94bc43ccfdc00e1d244ea29a144b7d~tplv-tiktokx-cropcenter:100:100.jpg?dr=9640&refresh_token=fb6ea4de&x-expires=1793246400&x-signature=fTzuvr67tfyqvLU0xxyg9WQt59g%3D&t=4d5b0474&ps=13740610&shp=30310797&shcp=ff37627b&idc=useast5",
      "like_count": 32532,
      "reply_count": 43,
      "image_urls": null
    }
  ],
  "pagination": {
    "next_page_token": "pt1.dGlraHViOjIw"
  }
}
```
