TikTok Profile details API
type is profile: userId, secUid, handle, name, bio (as published), bioLink, avatarUrl (temporary), verified, isPrivate, followerCount, followingCount, likeCount (total likes received), videoCount, region, createdAt and url.
Profile details (mode profile)
type is profile: userId, secUid, handle, name, bio (as published), bioLink, avatarUrl (temporary), verified, isPrivate, followerCount, followingCount, likeCount (total likes received), videoCount, region, createdAt and url. region, bioLink and createdAt are null when TikTok does not show them.
With includeMilestones each profile of 1,000 followers or more is followed by a record of type creatorMilestones: userId, handle, followerCount, likeCount and milestones (each: milestone, title such as "Reached 1M followers", year, date, summary, and topVideos with videoId, description, createdAt, views, likes, comments, shares, saves). With includeCountry each profile is followed by a record of type profileCountry: userId, handle and country (the two-letter country the account is registered in). Each is one extra detail record, charged $0.002 only when it is returned; an account with no data returns nothing and costs you nothing. Profiles are then read one at a time.
The input that produced this run
Mode profile. Parameters as sent, with what each one does.
| Parameter | Value | What it does |
|---|---|---|
mode | "profile" | What to get: videos by keyword, hashtag, profile, sound, repost list, playlist, photo search or explore category; profiles by keyword or similar to a profile; sounds or places by keyword; the sounds a profile has made;... |
profiles | ["khaby.lame"] | Public profiles as khaby.lame, @khaby.lame, or a link to the profile or to one of its videos. Short vm.tiktok.com, vt.tiktok.com or tiktok.com/t/ links are not supported. Falls back to "khaby.lame" when empty... |
maxResults | 10 | Maximum items for each keyword, hashtag, profile, sound, video or category (up to 1000). Video details, profile details and analytics return one record per input, so the limit rarely matters there. A search inside... |
17 fields in every profile
From the first record of the run above. Identity fields of ordinary users are masked on this site.
| Field | Type | Example |
|---|---|---|
type | str | profile |
userId | str | <masked> |
secUid | str | <masked> |
handle | str | <masked> |
name | str | <masked> |
bio | str | <masked> |
avatarUrl | str | <masked> |
verified | bool | true |
isPrivate | bool | false |
followerCount | int | 162937142 |
followingCount | int | 82 |
likeCount | int | 2693520086 |
videoCount | int | 1361 |
region | null | null |
bioLink | null | null |
createdAt | null | null |
url | str | <masked> |
A real run, 17 fields per record
Run on 2026-11-09 with input {"mode": "profile", "profiles": ["khaby.lame"], "maxResults": 10}. Personal fields of ordinary users are masked here.
| followerCount | followingCount | likeCount | videoCount |
|---|---|---|---|
| 162937142 | 82 | 2693520086 | 1361 |
All 17 fields in one record
typeprofileuserIdsecUidhandlenamebioavatarUrlverifiedisPrivatefollowerCount162937142followingCount82likeCount2693520086videoCount1361regionbioLinkcreatedAturl
Good to know before you run it
- Video details, profile details and analytics: an unknown ID returns nothing and costs no per-item fee, and the next ID still runs.
What one profile costs
Start fee (run-start) · $0.00005 · For each keyword, hashtag, profile, sound or category you give it, and for each video (comments), profile (followers, following) or keyword (keywordSuggest) in those modes. In videoDetail, profile and videoAnalytics it is charged once per run, not per input. The first one is charged when the first request succeeds, even if that request returns nothing. Each further one is charged before that input's first request and is kept even if that input then fails or returns nothing.
Run this request yourself
The same input as above, three ways.