To get TikTok video and comment data programmatically, use Scavio's TikTok API. POST /api/v1/tiktok/video with a video id returns the video's description, author, sound and statistics (views, likes, saves, shares and comment count); POST /api/v1/tiktok/video/comments returns up to 50 comments a call with text, likes, reply counts and timestamps, and /video/comments/replies opens any thread. Hashtag and search endpoints find the videos, and /video/transcript returns what is said in them. Every call is 1 credit, about $0.002 on the Growth plan billed yearly.
TikTok's own APIs do not cover this for most teams: the Research API is for approved non-commercial researchers, and the Display API reads only the videos of a user who logs in to your app, with no comments at all. Rejected for TikTok's Research API? covers who qualifies.
Step 1: Find videos by hashtag or keyword
Resolve the hashtag name to its id first:
curl -s https://api.scavio.dev/api/v1/tiktok/hashtag \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"hashtag_name": "booktok"}'On October 27, 2026, data.challengeInfo.challenge.id came back as 1622962893630470, and statsV2 reported 88,078,371 videos and 562,242,547,824 views. Pass the id to hashtag videos:
curl -s https://api.scavio.dev/api/v1/tiktok/hashtag/videos \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"hashtag_id": "1622962893630470"}'Each page returned 20 videos in data.aweme_list, with cursor and has_more for the next page. Three pages gave 60 rows and 57 distinct videos, so key your store on aweme_id. The feed is ranked by TikTok, not sorted by date: those 57 ran from August 2021 to the day we pulled them. For a keyword instead of a hashtag, send {"keyword": "book recommendations"} to /api/v1/tiktok/search/videos; it returned 12 videos with the same statistics, each under search_item_list[].aweme_info.
Step 2: Read one video's statistics
curl -s https://api.scavio.dev/api/v1/tiktok/video \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video_id": "7456818947573222689"}'The response sits under data.aweme_detail. Trimmed to the fields most pipelines keep, as captured:
{
"aweme_id": "7456818947573222689",
"create_time": 1736175971,
"region": "GB",
"author": { "unique_id": "fionalucasauthor" },
"music": { "title": "original sound - fionalucasauthor", "id_str": "7456819020759730977" },
"statistics": {
"play_count": 1269637,
"digg_count": 47880,
"comment_count": 4445,
"share_count": 2126,
"collect_count": 6998,
"download_count": 371,
"whatsapp_share_count": 285
}
}digg_count is likes and collect_count is saves. Across the 57 #BookTok videos the median video drew 91.5 likes, 7.1 saves, 6.0 shares and 0.71 comments per 1,000 views, so saves and shares carry more signal than comment counts; the chart is in the best TikTok video and comment APIs. video.duration is in milliseconds (110300 here).
Step 3: Pull the comments
curl -s https://api.scavio.dev/api/v1/tiktok/video/comments \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video_id": "7456818947573222689", "count": 50}'count takes 1 to 50 and defaults to 20; a 50-row page took 0.8 s server time. The first page also reports total (4,461 here). One comment, trimmed (commenter fields omitted):
{
"cid": "7462505518641660715",
"text": "Helpful tips! Thanks!",
"digg_count": 94,
"reply_comment_total": 0,
"create_time": 1737499986,
"comment_language": "en",
"is_author_digged": true,
"is_high_purchase_intent": false
}Send the returned cursor back for the next page and stop when has_more is 0. The cursor is an offset into a ranked list that keeps moving as people like and reply, so deduplicate on cid. is_author_digged tells you the creator liked the comment, and is_high_purchase_intent is TikTok's own flag for comments that read like buying interest. Our post on why a TikTok comment pull returns about half the count measures how much of total is replies.
Step 4: Open the replies
curl -s https://api.scavio.dev/api/v1/tiktok/video/comments/replies \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video_id": "7456818947573222689", "comment_id": "7457546236569355041"}'Replies are not inlined in the comments payload. The comment id above belongs to the video's top comment (162 likes), which reported 11 replies; this returned the 10 still visible, in the same comment shape, including one from the creator. Call it only where reply_comment_total is above zero.
Step 5: Get what the video says
curl -s https://api.scavio.dev/api/v1/tiktok/video/transcript \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video_id": "7456818947573222689"}'The 110-second video returned available: true, language_code: "en", is_auto_generated: false, 38 timestamped segments and a 340-word text. The first segment, as captured:
{ "start": 0.08, "end": 3.92, "text": "so if you're new to BookTok and you want to know how do you join BookTok" }Pair the transcript with the comments and you have both sides of the conversation for an LLM to summarise.
All the endpoints for this job
| Endpoint | What it returns | Credits |
|---|---|---|
/api/v1/tiktok/hashtag | Hashtag id, description, video and view counts | 1 |
/api/v1/tiktok/hashtag/videos | 20 videos a page under a hashtag, with statistics | 1 |
/api/v1/tiktok/search/videos | Videos for a keyword, with statistics | 1 |
/api/v1/tiktok/video | One video: description, author, sound, full statistics | 1 |
/api/v1/tiktok/video/comments | Up to 50 comments a page, with likes and reply counts | 1 |
/api/v1/tiktok/video/comments/replies | Replies under one comment | 1 |
/api/v1/tiktok/video/transcript | Timestamped transcript and full text | 1 |
/api/v1/tiktok/user/posts | A creator's videos, keyed on sec_uid | 1 |
Every TikTok endpoint costs 1 credit; the full list of 24 is on the TikTok API page.
Getting started
- Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required.
- Copy your API key from the dashboard.
- Send a POST to
/api/v1/tiktok/video/commentswith a video id and your key in theAuthorizationheader.
Try the TikTok API free in the playground first, or call it from Claude and other agents through the MCP server.
Reference: TikTok API overview · video · comments · replies · transcript · hashtag videos
Frequently asked questions
How do I get all the comments on a TikTok video?
Call Scavio's /api/v1/tiktok/video/comments with the video id and count 50, then pass the returned cursor back until has_more is 0. Deduplicate on cid, because the list is ranked and can shift between pages, and call /api/v1/tiktok/video/comments/replies for any comment whose reply_comment_total is above zero.
What is the TikTok video id and where do I find it?
It is the long number at the end of a video URL, after /video/. In https://www.tiktok.com/@fionalucasauthor/video/7456818947573222689 the id is 7456818947573222689. Hashtag, search and user-post responses return it as aweme_id on every row.
Can I get TikTok saves and shares through an API?
Yes. Scavio's video, hashtag videos, search and user posts endpoints return a statistics object with play_count, digg_count (likes), comment_count, share_count, collect_count (saves) and download_count for every video. TikTok's own Display API returns view, like, comment and share counts only for the logged-in user's videos.
Can I get the transcript of a TikTok video?
Yes, for videos that carry a caption track. POST a video id or URL to /api/v1/tiktok/video/transcript and get timestamped segments plus the full text, with the language and whether the captions were auto-generated. A video with no speech returns available: false.
How much does TikTok comment data cost?
Every TikTok call on Scavio is 1 credit, and a comments call returns up to 50 comments, so 1,000 comments take 20 credits: about $0.04 on the Growth plan billed yearly and about $0.09 on the $30 monthly Project plan. New accounts get 50 free credits with no card.