TikTok API — Profiles, Videos, Hashtags & Comments as JSON | FetchLayer
Unofficial Third-party API
8 endpoints live

TikTok data.
Without the scraping.

Profiles & exact counts Account videos & search Hashtag feeds Video comments Transcripts — 68% of videos

One key returns profiles with exact follower counts, an account’s videos, keyword search, hashtag feeds, a video’s comments and its transcript — every video in the same typed shape.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

246,915 served today

POST /tiktok/user-videos
200 OK

Request

$ curl -X POST \
  https://api.fetchlayer.dev/tiktok/user-videos \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"username":"@nasa","limit":50,
      "sort":"popular"}'

Response

{
  "profile": {
    "uniqueId": "nasa",
    "verified": true,
    "stats": { "followerCount": 1719888,
      "heartCount": 8962614, "videoCount": 45 }
  },
  "videos": [{
    "id": "7686148096895569165",
    "description": "Turns out you can dance in space!",
    "createdAt": "2026-09-16T15:00:41.000Z",
    "durationSeconds": 58, "isPhotoPost": false,
    "stats": { "playCount": 27600, "diggCount": 4367,
      "commentCount": 173, "shareCount": 104 },
    "music": { "title": "original sound - NASA" }
  }, …49 more],
  "hasMore": true, "pagesFetched": 1
}

Used by developers at

Individual developers or teams — not official partnerships

Built for feedback workflows

Fetch the public signal. Use it wherever your team works.

Exact counts, not rounded ones

TikTok publishes both the rounded figure on the page and the precise one. This returns the precise pair, so a follower count is 1719888 rather than 1.7M — which is the difference between tracking week-to-week movement and watching a number that never changes.

One video shape on every route

A search result, an account’s post and a hashtag entry are the same record: caption, timestamp, duration, cover, assets, play, like, comment, share, save and repost counts, author, music, hashtags, mentions, ad flag and language. Write the mapping once.

Hashtags and mentions, already separated

Every video arrives with its hashtags and the accounts it mentions as their own lists, taken from TikTok’s own annotations on the post. A tag written inside a word never turns up as a false positive, and a tag TikTok recorded is never missed.

Comments, with the commenter behind each one

Text, timestamps, like and reply counts, pinned and author flags, and the profile of whoever wrote it — so a comment list comes back as people you can segment, not strings you have to match up later.

Transcripts, with the translation for free

A video’s spoken words as full text plus segments timed to the second — and a video posted in another language usually carries an English track alongside its original, already timed, for the same one credit. TikTok does not transcribe everything: a video with no transcript comes back as a normal 200 saying so, and a photo carousel has no audio to transcribe at all.

Covers and photos that still load next week

Every cover, photo-carousel frame and avatar carries a downloadUrl that fetches the asset on demand, with Range support — so the image you stored a month ago still opens, even though TikTok’s own links expire within hours.

Hashtag feeds, sized before you read them

A tag comes back with its own total view and video counts across TikTok alongside the videos posted under it — so you can tell a trend worth reading from one worth skipping before you spend a credit paging through it.

Any link, resolved for free

Hand /resolve-url a URL someone pasted and it tells you whether it is a video, an account, a hashtag, a sound or a search, plus the id, handle, tag or query it encodes. It reaches TikTok not at all, so it costs nothing.

FetchLayer Research Chat

Size up a creator or a hashtag—then export it to CSV.

Prefer not to write code? Paste a handle or a hashtag into FetchLayer Research Chat, ask how the account is really performing or what a trend looks like, and get a clean table for the next campaign review.

  • Ask questions in plain English
  • Analyze themes, sentiment, and pain points
  • Download the structured results as CSV or JSON
Analyse TikTok in Chat

No code or setup required · Uses your FetchLayer credits

TikTok research

Compare these 6 TikTok creators: exact followers, median plays per video, engagement rate, how often they post, and what share of their posts are marked as promotional. Export as CSV.

Y

I read each account and its 50 most recent videos. The table gives the exact follower count, median and best play count, the like, comment and share rates against plays, posting cadence, and the share of posts flagged as ads. It is ready to download.

tiktok-creator-comparison.csv

6 creators · 9 columns · ready to download

CSV

From raw feedback to action

One request is the start of the workflow.

Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.

  1. 01

    Point at an account, term or tag

    A handle, a profile URL, a keyword or a hashtag. If all you have is a link someone pasted, run it through /resolve-url first — that is free.

  2. 02

    Read the posts

    One request returns up to 500 videos across up to 20 pages, each with its full stats block, author and music. The account’s profile comes back with its videos, so that is one call, not two.

  3. 03

    Go deeper where it matters

    Pull one video in full, or read its comments to find out what people actually said. Store what you read: counts are as at the time of the request, and there is no history to go back for.

MCP & agents

Live

Your AI already knows how to use this.

Use the TikTok endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.

1
Pick your editor
2
Agent discovers 8 tools
3
Query any platform instantly
connect your agent ~30s

Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.

Get your free API key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

How is @nasa doing on TikTok, and which of their recent videos did best?

Used fetchlayer.tiktok_user_videos

1,719,888 followers and 8.96M total likes across 45 public videos. Their most recent post took 27,600 plays, 4,367 likes, 173 comments and 104 shares in its first hours — a like rate of about 16%. One request, one credit: the profile came back with the videos.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 8 endpoints exposed as tools
Official & maintained
Free to install

Use cases

What teams build with TikTok data.

Same API, endless applications. Here is what teams ship with TikTok profiles, videos and comments.

01

Creator vetting

Read a creator’s exact follower and like totals and their last fifty posts, then judge them on median plays and engagement rate rather than on the rounded number in their media kit.

influencervettingagencies
02

Trend research

Pull the top videos under a hashtag alongside the tag’s own total view count, and see which formats, sounds and accounts are actually carrying it before you brief anything.

trendscontentbriefs
03

Competitor content tracking

Watch what rival brands post, how often, and which videos outperform the rest of their feed — with captions, durations, sounds and hashtags on every post.

competitorscronreporting
04

Comment mining

Read the comments on the videos that took off and find the questions, objections and feature requests buyers repeat, straight from the people watching.

vocresearchproduct
05

Campaign measurement

Follow a branded hashtag or a set of creator posts after launch and report plays, likes, comments, shares and saves per post, with the promotional flag where TikTok sets it.

campaignsreportingbrand
06

Social listening datasets

Search a term on a schedule and build your own corpus of captions, hashtags and engagement counts — counts are point-in-time, so storing them is how you get a history at all.

datasetslisteningcron

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Public data with no app reviewApplication requiredYou run the browsers
Exact follower and like countsOwn account onlyYou parse them out
One record shape on every routeVaries by endpointYou design it
Partial results explained, not silentn/aYou detect it
Ready for AI and MCP workflowsYour integrationYour integration

FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.

Pricing

Start free. Scale when ready.

Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.

Free plan — 30 requests

Verify responses, inspect the API, no credit card required.

Try free

Pay as you go

$1.99

per 1,000 requests

$0.00199 per request · credits never expire

How credits work — no multipliers

One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.

  • No multipliers — 1 request = 1 credit
  • No monthly commitment
  • Credits never expire
  • Same API & MCP access as subscribers
  • ∞ req/min, ∞ API keys
Get API key

Expiry

Credits stay until you use them. No monthly reset, no pressure to hit a quota.

0

Commitments

No subscription, no contract, no minimums. Start, pause, or scale whenever.

100%

Access

Every endpoint and MCP included. Not a limited tier — same data as any subscriber.

API reference

Every parameter, documented.

All requests are POST with a JSON body and Bearer auth header.

POST /tiktok/user-videos

The videos an account has posted, newest first by default, with the account’s profile alongside them — so listing an account’s posts does not also need a profile call. Sort by latest, popular or oldest, and page with a cursor.

username* string A handle with or without the @, or a profile URL
limit number Maximum videos, up to 500, or -1 for the maximum. Defaults to 30.
sort string 'latest' (default) | 'popular' | 'oldest'
pages / cursor number | string Pages to read in one request, up to 20, or resume from a previous nextCursor.
POST /tiktok/user-profile

One account’s profile: bio, avatar, verification and organization flags, region, creation date, bio link, and the exact follower, following, like, video and friend counts rather than the rounded figures shown on the page.

username* string A handle with or without the @, or a profile URL
POST /tiktok/search-videos

Videos matching a term, in TikTok’s own ranking for it. There is no sort order and no date filter, because TikTok offers a public caller neither — passing one is a 400 rather than a parameter that is accepted and ignored.

query* string What to search TikTok for
limit number Maximum videos, up to 500. Defaults to 30.
pages / cursor number | string Page through the result list.
POST /tiktok/hashtag-videos

Videos posted under a hashtag, plus the tag itself — its id, name, description, cover and its own total view and video counts across TikTok, which is how you size a trend before deciding how much of it to read.

hashtag* string A tag with or without the #, or a hashtag URL
limit number Maximum videos, up to 500. Defaults to 30.
pages / cursor number | string Page through the tag feed.
POST /tiktok/comments

Comments on a video with text, timestamp, like and reply counts, pinned and author flags, and each commenter’s profile. replyCount reports the true reply total even where replies holds only the handful TikTok inlines.

video* string A video URL or numeric id
limit number Maximum comments, up to 500. Defaults to 30.
pages / cursor number | string Page through the comment list.
POST /tiktok/video-detail

One video in full by id or URL, in the same shape every other route returns videos in: caption, timestamp, duration, cover, assets, engagement stats, author, music, hashtags, mentions, ad flag and language.

video* string A video URL or numeric id. Short share links are rejected — resolve them first.
POST /tiktok/video-transcript

The transcript TikTok publishes for a video: full text plus segments with start and end times in seconds. 68% of videos measured had one, and a non-English video usually carries a free English track alongside its original.

video* string A video URL or numeric id
POST /tiktok/resolve-url

What a TikTok link points to — video, account, hashtag, sound or search — plus the id, handle, tag or query it encodes. Makes no request to TikTok, so it is free.

url* string Any TikTok link

Fields marked * are required. Full API reference →

FAQ

Common questions.

What is a TikTok API?

Here it means one HTTP endpoint that returns public TikTok data as clean JSON: an account’s profile and posts, one video in full, keyword search, the videos under a hashtag, a video’s comments, and the transcript TikTok publishes for a video. You send a handle, a URL, a term or a tag with a Bearer token, and get back typed records with captions, timestamps, durations, engagement counts, authors, music and hashtags. It is not TikTok’s own developer platform — there is no application to file, no review, and no OAuth. Everything returned is what an unauthenticated visitor to tiktok.com can see.

Do I need a TikTok account or developer approval?

No. You send your FetchLayer key and nothing else. There is no TikTok login, no app registration and no approval step, because this reads the public site rather than a partner API. FetchLayer is not affiliated with, endorsed by, or sponsored by TikTok, and the TikTok name is used only to identify the platform the data comes from.

What does a video record contain?

The same fields on every route that returns videos, so code written against a search result works unchanged on an account’s posts or a hashtag feed: id, url, description (the caption), createdAt, durationSeconds, isPhotoPost, coverUrl, assets, stats with playCount, diggCount, commentCount, shareCount, collectCount and repostCount, author, music, hashtags, mentions, isAd and language. Hashtags and mentions come from TikTok’s own annotations on the post rather than from parsing the caption, so a tag written inside a word does not produce a false positive. A null counter means TikTok did not publish that figure; a real zero comes back as 0.

Are the follower counts the rounded ones?

No. TikTok publishes both the rounded figure shown on the page and the precise one, and this returns the precise pair — a follower count comes back as 1719888 rather than 1.7M. That is the difference between being able to track week-to-week movement and not: a creator can gain thirty thousand followers without 1.7M changing at all.

Can I search TikTok by date, or sort the results?

No, and the API says so rather than pretending otherwise. TikTok offers a public caller neither a date filter nor a sort order on search, so passing one returns a 400 naming the field instead of being accepted and quietly ignored — which would hand you the wrong data with no indication why. Search results come back in TikTok’s own ranking for the term. An account’s own videos can be sorted: latest, popular or oldest.

How does paging work?

limit caps the items returned and pages caps how many pages are read to get them, up to 20 in one request. When more exists, hasMore is true and nextCursor carries an opaque value to pass back as cursor. Cursors belong to the route and query that produced them, so do not carry one between routes. Passing -1 on limit or pages means "the maximum this service allows", which is 500 videos, 500 comments and 20 pages.

How does billing work?

One credit per page of results read, and every response states it as pagesFetched, so a bill is never a surprise. A single-page request costs 1 credit whatever the page holds — thirty videos or five. Asking for five pages costs five. Parsing a URL with /resolve-url reaches TikTok not at all, reports pagesFetched 0 and is free. TikTok is in Beta while coverage expands, billed at half credit.

Can I get a video’s transcript, and how many videos have one?

Yes, and the honest figure is 68% — 125 of 185 videos measured across 14 languages carried a transcript. TikTok transcribes spoken audio for most videos but not all, and a photo carousel is 0% by nature because there is no audio to transcribe. What makes the route worth more than the number suggests is that the translations are free: a video posted in another language usually carries an English track alongside its original, already timed, for the same one credit. You get the full text plus segments with start and end times in seconds. A video without one is a normal 200 — transcript.available is false, tracks is empty, durationSeconds is still filled in, and a note says why — so do not retry it.

How complete are a video’s comments?

The comments themselves page normally, up to 500 in one request. Two things are worth knowing. The replies array on a comment holds only the replies TikTok shows alongside it — usually none or a handful — while replyCount reports how many exist in total, and a response where the two differ carries a note saying so. And totalCount is the figure TikTok publishes for the video, which can exceed what paging can reach. Both are stated rather than glossed over, so you can tell a complete read from a partial one.

What happens when there is nothing to return?

You get an explanation, not an empty array. Every response carries a notes array, and an empty result always comes with a note saying why: the account is private, the account has no public posts, comments are turned off for the video, the hashtag has no public videos, or the list stopped before the requested number was reached. A missing answer and an explained absence are different things, and the response distinguishes them.

How reliable is it?

Every route is monitored 24/7 and a failure alerts our team, and you are only charged for successful responses. Being honest about the one soft spot: listing an account’s videos is the route TikTok declines most often. In practice it succeeds about 199 times in 200, so the failures are rare but real. A 503 there means the route has genuinely run out of road — wait before retrying rather than retrying immediately.

Can my AI agent use it?

Yes. All eight routes are MCP tools on the same FetchLayer MCP server, named tiktok_user_profile, tiktok_user_videos, tiktok_video_detail, tiktok_search_videos, tiktok_hashtag_videos, tiktok_comments, tiktok_video_transcript and tiktok_resolve_url. They are distinct from the tiktok_ad_library_* tools, which read the paid ad library rather than organic posts. Tool calls use the same key and are billed exactly like REST.

What is not available?

Account analytics — audience demographics, watch time, traffic sources — are not available from anyone for an account you do not own, because TikTok publishes none of it. There are no historical snapshots either: counts are as they stand when you ask, so tracking movement means storing what you read and asking again.

Start pulling TikTok data today.

Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.