Get a TikTok account profile
One public TikTok account’s profile: bio, avatar, verification, creation date, bio link and the exact follower, following, like and video counts. Name the account by username, userId or secUid.
/user-profile Accounts https://api.fetchlayer.dev/tiktok/user-profile Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
username string optional A username with or without the leading @, or a profile URL. Send exactly one of username, userId or secUid; none, or more than one, is a 400.
userId string optional The account’s numeric id, as a string (the `id` a profile returns). An alternative to username that survives a rename.
secUid string optional The account’s secUid, as a profile returns it. An alternative to username.
format string optional json or markdown, lowercase; any other value is a 400. Over MCP, markdown returns the result rendered as text; the REST API accepts it and returns JSON. (default: json)
timeoutMs integer optional Time limit for the whole request, in milliseconds (1000–120000); a value outside that range is a 400. When it runs out, a paged request returns what it has with nextCursor, billed for the pages it returned; a request with nothing to return yet fails with a 503 you can retry, marked with the response header X-Timeout-Source: caller. Left out, the request runs as long as it needs.
Response Fields
user-profile
Get a TikTok account profile
transport string The data source: always the platform id, "tiktok".
notes string[] Caveats you can act on — a private account, comments turned off, a list that ran out early, paging that has gone as deep as it goes. Empty when there are none. An empty result always comes with a note explaining it, never as an unexplained empty array.
pagesFetched number Pages of results fetched, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed.
profile.id string TikTok’s numeric account id.
profile.uniqueId string The @handle, without the @.
profile.nickname string The display name.
profile.url string Canonical profile URL.
profile.signature string The bio text.
profile.avatarUrl string Avatar image. Pass it to GET /media to re-fetch it after TikTok’s own signed link expires.
profile.verified boolean Whether TikTok shows the verification badge.
profile.privateAccount boolean Whether the account is private. Its profile still comes back; its posts are not, and user-videos answers with the note "This account is private, so its posts are not public."
profile.createdAt string When the account was created, or null.
profile.region string | null The account’s registered country or region, as a two-letter code such as "US" — the same fact accountRegion reports on each video. The first request for an account answers at once with null and the note “`region` is being worked out for this account; ask again shortly.”; later requests carry it, and it is kept for 90 days. It stays null for a private account or one with no public videos, with the note “This account is private or has no public videos, so `region` is null.” To have it at once, read accountRegion off a video with include ["exactStats"]. Not postingRegion, which is where the account’s recent videos were posted (the two can differ), and not a video’s createdRegion, where that one post was made.
profile.isOrganization boolean Whether TikTok marks the account as an organization.
profile.bioLink string The link in the bio, or null.
profile.secUid string TikTok’s opaque secondary account id.
profile.stats.followerCount number Followers — the exact figure, not the rounded one. Counts are as TikTok shows them to US viewers. TikTok keeps two US copies of an account’s counts, which can differ by about one post and a few hundred followers; successive requests can land on either, and neither is newer.
profile.stats.followingCount number Accounts this one follows.
profile.stats.heartCount number Total likes across the account’s videos.
profile.stats.videoCount number Public videos posted.
profile.stats.friendCount number Mutual follows.
profile.roundedStats string[] Which profile counts are rounded. Normally empty: profile counts are the exact figures, not the rounded ones shown on the page (1719888, not 1.7M).
profile.postingRegion object Where the account’s recent videos were posted, or null. Not a registered country. It is kept for 30 days per account and worked out again on the first request after that; on that request, and on the very first, it is null with the note "`postingRegion` is being worked out from where this account's recent videos were posted; ask again shortly.", and filled about 10–25 seconds later. It is also null, with a note saying why, for a private account, an account with no public videos, or one whose recent videos do not say where they were posted.
profile.postingRegion.code string The most common region, such as "US", across the videos checked; a tie goes to the region of the newest video.
profile.postingRegion.basis string Always "recent_videos": the account’s 10 most recent videos, 20 when those disagree.
profile.postingRegion.videosSampled number How many videos were checked.
profile.postingRegion.videosWithRegion number How many of those say where they were posted.
profile.postingRegion.share number The count for code divided by videosWithRegion, 0 to 1. A low share means the account posts from several regions.
profile.postingRegion.computedAt string When it was worked out (ISO 8601).
Request
curl -X POST "https://api.fetchlayer.dev/tiktok/user-profile" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"username":"@nasa"}'Response
{
"transport": "tiktok",
"notes": [],
"pagesFetched": 1,
"profile": {
"id": "7664638705177150477",
"uniqueId": "nasa",
"nickname": "NASA",
"url": "https://www.tiktok.com/@nasa",
"signature": "Making the seemingly impossible, possible.✨",
"avatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/...",
"verified": true,
"privateAccount": false,
"createdAt": "2026-07-20T15:55:49.000Z",
"region": "US",
"isOrganization": true,
"bioLink": null,
"secUid": "MS4wLjABAAAAU9BRVzC8oCaegVnia8IbqWhPb_-dbU7s00Y3wS1_Nx8g5RUaYvyXrpejgjdxTwd6",
"stats": {
"followerCount": 1719888,
"followingCount": 23,
"heartCount": 8962614,
"videoCount": 45,
"friendCount": 17
},
"roundedStats": [],
"postingRegion": {
"code": "US",
"basis": "recent_videos",
"videosSampled": 20,
"videosWithRegion": 20,
"share": 0.95,
"computedAt": "2026-10-14T10:16:54.310Z"
}
}
}