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.
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"
}'{
"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
TikTok Get User Profile
15 units per call
TikTok Get Video Detail
15 units per call
TikTok Get Video By Id
3 units per call
TikTok oEmbed Lookup
1 unit per call
TikTok Get Comments
15 units per call
TikTok Get Comment Replies
3 units per call
TikTok Discover Users from Comments
15 units per call
TikTok Check Account Health
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.
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.