TikTok APITikTok

TikTok comments API

Call GET /v1/tiktok/posts/{id}/comments with the video ID. Each request returns one page of public comments and a cursor for the next page. Replies to a comment have their own endpoint.

You do not need a TikTok login or Research API access.

GET /v1/tiktok/posts/{id}/comments
curl "https://api.openhandle.dev/v1/tiktok/posts/920100000000000001/comments" \
  -H "Authorization: Bearer $OPENHANDLE_API_KEY"
TypeScript SDK
import { OpenHandle } from '@openhandle/sdk';

const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
let page = await openhandle.tiktok.post('920100000000000001').comments.list();

while (true) {
    for (const comment of page.data) console.log(comment.author?.handle, comment.text);
    const next = await page.next();
    if (!next) break;
    page = next;
}
200 OK
{
  "platform": "tiktok",
  "resource": "comment",
  "capturedAt": "2026-09-19T09:12:44Z",
  "source": "live",
  "data": [
    {
      "id": "920200000000000001",
      "postId": "920100000000000001",
      "text": "The loop is satisfyingly synthetic.",
      "createdAt": "2026-08-09T16:30:00Z",
      "isPinned": true,
      "author": { "id": "920000000020", "handle": "soft_signal_tt_test" },
      "metrics": { "likes": 31, "replies": 20 }
    }
  ],
  "meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}

Trimmed to one comment and the fields most apps need. The example video is a Test fixture with 24 comments over several pages, so you can test paging on a free Test key.

What you get

  • —Comments. Each comment has id, text, createdAt, and the author with ID and handle.
  • —Counts. Likes and replies sit in metrics.
  • —Pinned comments. A comment the creator pinned has isPinned: true and sits at the top of the first page.
  • —Replies. Read the thread under a comment with GET /v1/tiktok/posts/{id}/comments/{commentId}/replies.

Price

  • —Per request. $0.0025 per live request. $0.002 per request after 100,000 requests in a month. One page of results is one request.
  • —Older data costs less. Set freshness to say how old the data may be. Data up to 24 hours old: $0.0005. Data up to 7 days old: $0.0001. Data up to 30 days old: free.
  • —Failed means free. Errors and invalid requests are never billed. You pay for answers, and a confirmed not-found is an answer.
  • —Free to start. Every new workspace starts with 100 free live requests, no card needed. Test keys are never charged.

When this does not work

These answers are definitive. Store them, do not retry them.

SituationStatusCode
The video is deleted or never existed404POST_NOT_FOUND
The account is private403PROFILE_PRIVATE
The cursor came from another video or freshness400CURSOR_MISMATCH
The identifier is malformed400INVALID_IDENTIFIER
404 Not Found
{
  "error": {
    "code": "POST_NOT_FOUND",
    "message": "This post was not found.",
    "requestId": "req_01j8…",
    "retryable": false
  }
}

A creator can turn comments off. That video answers with an empty page, which bills as an answered request.

Read next

More TikTok data

Send your agent ahead.

Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.

For agents

100 free requests. No card needed.