.md raw

GET /v1/profile

The creator behind the posts — one shape across TikTok, Instagram, YouTube and X. Pass a profile URL, or a bare handle with platform.

Request

curl "https://tikdata.io/v1/profile?url=https://www.tiktok.com/@tiktok" \
  -H "Authorization: Bearer thr_live_xxx"
curl "https://tikdata.io/v1/profile?handle=nasa&platform=x" \
  -H "Authorization: Bearer thr_live_xxx"
param required notes
url one of url or handle a profile URL — tiktok.com/@user, instagram.com/user, youtube.com/@user or /channel/UC…, x.com/user
handle one of url or handle bare handle; needs platform
platform with handle tiktok | instagram | youtube | x

A post URL sent here is rejected with a hint pointing at /v1/post.

Response — 200

{
  "platform": "tiktok",
  "id": "107955",
  "handle": "tiktok",
  "url": "https://www.tiktok.com/@tiktok",
  "name": "TikTok",
  "bio": "One TikTok can make a big impact",
  "avatar": "https://p16-common-sign.tiktokcdn-us.com/…",
  "verified": true,
  "private": false,
  "createdAt": null,
  "stats": {
    "followers": 95632564,
    "following": 1,
    "posts": 1583,
    "likes": 463326549,
    "views": 0
  }
}
field type notes
id string platform's own account id (X: rest_id; YouTube: UC… channel id)
handle string bare, no @
url string canonical profile URL
name bio avatar string "" if absent
verified boolean TikTok: enterprise verification or badge; X: blue check; Instagram/YouTube: the platform flag
private boolean TikTok/Instagram private account; X protected
createdAt ISO 8601 | null X and YouTube only
stats.followers integer subscribers on YouTube
stats.following integer 0 on YouTube
stats.posts integer videos on YouTube, tweets on X
stats.likes integer TikTok lifetime likes received; 0 elsewhere
stats.views integer YouTube lifetime channel views; 0 elsewhere

Verified live, per platform

followers posts extra
TikTok @tiktok 95,632,564 1,583 463M lifetime likes
X @nasa 92,385,909 74,276 117 following
Instagram @instagram 686,452,333 8,579
YouTube @RickAstleyYT 4,540,000 435 2.56B channel views

Per-platform notes

  • X reports followers as sub_count. followers_count does not exist on that endpoint — the obvious key reads 0.
  • X and Instagram answer HTTP 200 for accounts that do not exist — X with status: "notfound", Instagram with status: false and an errorMessage. Both become 404 here; without that check, a creator who renamed would record as one who lost their whole audience.
  • Instagram's not-found is sometimes a lie. About 1 in 4 calls returns "This account does not exist." for accounts that exist. TikData retries that response once (≈600 ms later) before believing it; a genuine not-found is still a 404. See errors.
  • TikTok's endpoint accepts sec_user_id as well as unique_id, but a handle sent as sec_user_id answers 200 with an empty body rather than an error. Always unique_id.
  • YouTube needs a channel id, so an @handle costs one extra call to resolve (get_channel_id, which takes channel_name). A /channel/UC… URL skips it. Subscriber count is parsed from a display string ("4.54M subscribers").

Errors

status body
400 {"error":"url is required","hint":"GET /v1/profile?url=https://www.tiktok.com/@tiktok"}
400 {"error":"unknown platform","hint":"supported: tiktok, instagram, youtube, x"}
400 {"error":"unrecognized url","hint":"pass a profile url, or ?handle=<name>&platform=…"}
400 {"error":"could not extract a tiktok handle from that url","hint":"this looks like a post url — use /v1/post for a single post"}
404 {"error":"profile not found","platform":"x","handle":"…"}
502 {"error":"upstream unreachable"} or {"error":"upstream error", …}

Billing

One upstream call (two for a YouTube @handle), attributed to your key's project. Every profile endpoint used is $0.001.