SOCIAL MEDIA

TikTok Scraper API

These operations cover TikTok profiles, videos and comment threads without a TikTok login. Get User Profile reads a full public profile — bio, follower/following/like counts, verified status and video count — server-side, via TikTok’s own server-rendered page rather than its app API. Get Video Detail and Get Video By Id both return full video metadata (description, stats, author, music, hashtags); the difference is what you start from — Get Video Detail takes an author handle plus a video reference, while Get Video By Id resolves a video from its id alone. TikTok oEmbed Lookup is the lightest: it resolves any profile or video URL to a title, author and thumbnail through TikTok’s own public oEmbed endpoint, with no signing. Get Comments and Get Comment Replies read a video’s comment thread and the replies under one comment, both cursor-paginated. Discover Users from Comments mines the unique commenters off a video into a list of profiles — a comment thread as a lead list. Check Account Health reports whether an account is active, private or suspended, alongside its follower, video and like counts. All of them authenticate with your upAPI key alone. Reads run under a Safari TLS fingerprint, which is documented internally as the one that reaches TikTok’s pages where a default Chrome client fingerprint is blocked outright; TikTok’s WAF answers a block with a normal HTTP 200 carrying an empty page rather than an error status, and these operations classify that empty-page case rather than returning it as if it were real data.

What data you get

TikTok Get User Profile

bio
stringrequired
likes
integerrequired
secUid
stringrequired
success
booleanrequired
nickname
stringrequired
username
stringrequired
verified
booleanrequired
avatarUrl
string
elapsedMs
integerrequired
fetchedAt
stringrequired
followers
integerrequired
following
integerrequired
videoCount
integerrequired
privateAccount
booleanrequired

TikTok Get Video Detail

music
object
stats
objectrequired
author
objectrequired
success
booleanrequired
videoId
stringrequired
duration
integer
elapsedMs
integerrequired
fetchedAt
stringrequired
createTime
integerrequired
description
stringrequired

TikTok Get Video By Id

stats
objectrequired
stats.likes
integerrequired
stats.plays
integerrequired
stats.shares
integerrequired
stats.comments
integerrequired
author
objectrequired
author.likes
integerrequired
author.secUid
stringrequired
author.videos
integerrequired
author.nickname
stringrequired
author.uniqueId
stringrequired
author.verified
booleanrequired
author.followers
integerrequired
author.following
integerrequired
author.signature
stringrequired
success
booleanrequired
videoId
stringrequired
hashtags
arrayrequired
elapsedMs
integerrequired
fetchedAt
stringrequired
createTime
stringrequired
musicTitle
string
description
stringrequired
musicAuthor
string
thumbnailUrl
string
durationSeconds
integerrequired
locationCreated
stringrequired

TikTok oEmbed Lookup

title
stringrequired
success
booleanrequired
urlType
stringrequired — "video" for a video URL, otherwise "profile"
authorUrl
stringrequired
elapsedMs
integerrequired
fetchedAt
stringrequired
authorName
stringrequired
providerName
stringrequired
thumbnailUrl
string
embedProductId
stringrequired
thumbnailWidth
integer
thumbnailHeight
integer

TikTok Get Comments

total
integerrequired
cursor
integerrequired
hasMore
booleanrequired
success
booleanrequired
videoId
stringrequired
comments
arrayrequired
comments[].text
stringrequired
comments[].user
objectrequired
comments[].likes
integerrequired
comments[].commentId
stringrequired
comments[].createTime
integerrequired
comments[].replyCount
integerrequired
elapsedMs
integerrequired
fetchedAt
stringrequired

TikTok Get Comment Replies

total
integerrequired
cursor
integerrequired
hasMore
booleanrequired
replies
arrayrequired
replies[].text
stringrequired
replies[].user
objectrequired
replies[].user.secUid
stringrequired
replies[].user.nickname
stringrequired
replies[].user.uniqueId
stringrequired
replies[].user.verified
booleanrequired
replies[].likes
integerrequired
replies[].commentId
stringrequired
replies[].createTime
integerrequired
replies[].replyCount
integerrequired
success
booleanrequired
videoId
stringrequired
commentId
stringrequired
elapsedMs
integerrequired
fetchedAt
stringrequired

TikTok Discover Users from Comments

users
arrayrequired
users[].secUid
stringrequired
users[].nickname
stringrequired
users[].uniqueId
stringrequired
users[].avatarUrl
string
success
booleanrequired
videoId
stringrequired
complete
booleanrequired — False when a block or upstream failure cut the scan short — the users listed are real but the list is partial.
elapsedMs
integerrequired
fetchedAt
stringrequired
stopReason
stringrequired — "limit-reached", "exhausted", or "blocked-mid-scan"
commentsScanned
integerrequired

TikTok Check Account Health

message
stringrequired
success
booleanrequired
username
stringrequired
verified
booleanrequired
elapsedMs
integerrequired
fetchedAt
stringrequired
isPrivate
booleanrequired
likeCount
integerrequired
videoCount
integerrequired
isSuspended
booleanrequired
accountActive
booleanrequired
followerCount
integerrequired
followingCount
integerrequired

Calling TikTok Get User Profile

A schema-derived request and response shape — not a captured production call, since upAPI has none to publish. Every field is real, from the operation’s own published schema.

bash
curl -X POST https://api.upapi.io/tiktok-get-user-profile.post \
  -H "X-Api-Key: $UPAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "username": "torvalds"
}'
json — example response shape
{
  "bio": "example",
  "likes": 1,
  "secUid": "example",
  "success": false,
  "nickname": "example",
  "username": "torvalds",
  "verified": false,
  "avatarUrl": "example",
  "elapsedMs": 1,
  "fetchedAt": "example",
  "followers": 1,
  "following": 1,
  "videoCount": 1,
  "privateAccount": false
}

Pricing

Every unit draws from one pooled monthly quota shared across the whole catalog. See upapi.io/pricing for what a unit costs on each plan.

Questions people actually ask

Do I need a TikTok account or login?

No. Every operation here reads TikTok’s public surface — server-rendered pages, the public oEmbed endpoint, and public comment threads — and authenticates only with your upAPI key.

What is the difference between Get Video Detail and Get Video By Id?

Get Video Detail needs an author handle alongside the video reference; Get Video By Id resolves the same full metadata (description, hashtags, play/like/comment counts, author stats) from the video id alone, with no author handle required.

How much does this cost?

TikTok Get User Profile is 15 units per call; TikTok Get Video Detail is 15 units per call; TikTok Get Video By Id is 3 units per call; TikTok oEmbed Lookup is 1 unit per call; TikTok Get Comments is 15 units per call; TikTok Get Comment Replies is 3 units per call; TikTok Discover Users from Comments is 15 units per call; TikTok Check Account Health is 15 units per call — every unit draws from one pooled monthly quota shared across the whole catalog. See upapi.io/pricing for what a unit costs on each plan.

How does this handle TikTok blocking the request?

TikTok’s WAF answers a blocked request with HTTP 200 and an empty page rather than an error code, so a naive integration would read a block as an empty result. These operations detect the missing rehydration payload and raise a classified error instead.

Can I turn a video’s commenters into a lead list?

Discover Users from Comments does exactly that — it mines the unique commenters off one video and returns their profiles in a single call, scanning until it has enough distinct users or runs out of comments.

How fresh is the data — is it cached?

TikTok Get User Profile is cached for 10 minutes; TikTok Get Video Detail is cached for 5 minutes; TikTok Get Video By Id is cached for 10 minutes; TikTok oEmbed Lookup is cached for 1 hour; TikTok Get Comments is cached for 2 minutes; TikTok Get Comment Replies is cached for 2 minutes; TikTok Discover Users from Comments is cached for 5 minutes; TikTok Check Account Health is cached for 1 minute. A repeat call inside a cached window returns the cached response and is billed nothing.

Related