TikTok Live drives a huge slice of TikTok's overall engagement. Top creators run multi-hour streams that pull in millions of concurrent viewers, billions of virtual gifts, and chat volumes that look more like a chess.com puzzle rush than a comment section. For a product manager building social listening tools, or a developer prototyping a creator analytics dashboard, that data looks irresistible.
It is also one of the hardest surfaces to access from a third-party API. There is no public TikTok Live HTTP API for consumers. There is no documented event stream for gift transactions. There is no official way to count live viewers from outside the app. And every third-party scraper that claims real-time Live data is one detection model update away from going silent.
This post is an honest map of what is and is not possible right now, what TikLiveAPI exposes, where the workarounds live, and how to decide whether to wait for a real Live endpoint or ship today with adjacent signals. If you are scanning for a magic /tiktok-live/ route, you can stop now. It does not exist on our service, and we are not going to pretend it does.
Before evaluating any vendor's claims, it helps to break "Live data" into the four sub-surfaces people usually want:
All four of these run on TikTok's internal WebSocket protocols, not on the public REST surfaces that drive the regular app. They are also the surfaces TikTok protects most aggressively, because gift coins are real money and because moderation liability scales with chat throughput. So when a vendor advertises "TikTok Live API" they are almost always either (a) intercepting an unofficial WebSocket through reverse-engineered SDKs, or (b) talking about Live recap clips that get posted to the creator's regular feed after the stream ends. Those are very different things.
Let's be precise. Our documentation lists 37 endpoints across Users, Posts, Music, Challenge, Search, Playlist, Download, Collection, Region, and Ads. Zero of them are dedicated Live endpoints. We do not return a roster of currently-broadcasting creators. We do not stream gift events. We do not surface in-room chat.
What we do cover, and what is genuinely useful for Live-adjacent research, is the post-broadcast trail. After a stream ends, creators frequently:
For all of that, the regular endpoints work fine. /user-posts/ returns the recap clips the moment they hit the feed. /post-detail/ gives you full metadata for an individual recap, including play_count, digg_count, comment_count, share_count, and the no-watermark hdplay URL if you need to mirror the asset. /post-comments/ works on any video including recaps. And /userinfo-by-username/ gives you the snapshot follower counter you need to detect growth.
None of that is the live firehose. All of it is honest, durable data you can build on.
Here are the four most common Live-data product asks we get, with the realistic workaround for each. Auth is the same for every call: send your key as the X-Api-Key header against https://api.tikliveapi.com.
You cannot read the gift ledger. You can read the engagement lift on the creator's feed in the hours surrounding a known stream. Snapshot /user-posts/ before the stream, snapshot again 12 to 24 hours after, and diff the per-video counters. A creator who pulled in heavy Live tips usually also pulled in disproportionate engagement on the pinned or most-recent post.
import requests
from datetime import datetime, timezone
BASE = "https://api.tikliveapi.com"
HEADERS = {"X-Api-Key": "YOUR_KEY"}
def snapshot_posts(userid, count=20):
r = requests.get(
f"{BASE}/user-posts/",
params={"userid": userid, "count": count},
headers=HEADERS,
timeout=30,
)
r.raise_for_status()
data = r.json()
return {
v["aweme_id"]: {
"play_count": v.get("play_count", 0),
"digg_count": v.get("digg_count", 0),
"comment_count": v.get("comment_count", 0),
"share_count": v.get("share_count", 0),
"captured_at": datetime.now(timezone.utc).isoformat(),
}
for v in data.get("videos", [])
}
def diff_snapshots(before, after):
deltas = []
for aweme_id, post_after in after.items():
post_before = before.get(aweme_id)
if not post_before:
continue
deltas.append({
"aweme_id": aweme_id,
"delta_plays": post_after["play_count"] - post_before["play_count"],
"delta_likes": post_after["digg_count"] - post_before["digg_count"],
"delta_comments": post_after["comment_count"] - post_before["comment_count"],
})
return sorted(deltas, key=lambda d: d["delta_plays"], reverse=True)
You will not get the dollar value of a single rose gift. You will get a defensible "this creator's regular content earned 3.4x more views in the 24 hours around their Live event" number, which is often what the marketing team actually needs.
If the creator posts a recap clip and opens comments on it, the chat-style discussion that bleeds into that post is fair game for analysis. Grab the recap's URL, then page through /post-comments/. Note that comment items use id, not cid, which trips up people porting from older clients. Use that id as comment_id if you want replies via /post-comment-replies/.
def fetch_all_comments(post_url, page_size=50, hard_cap=2000):
out, cursor, collected = [], "0", 0
while collected < hard_cap:
r = requests.get(
f"{BASE}/post-comments/",
params={"url": post_url, "count": page_size, "cursor": cursor},
headers=HEADERS,
timeout=30,
)
r.raise_for_status()
data = r.json()
batch = data.get("comments", [])
if not batch:
break
out.extend(batch)
collected += len(batch)
if not data.get("hasMore"):
break
cursor = data.get("cursor", "0")
return out
def fetch_replies(video_id, comment_id, page_size=50):
cursor, replies = "0", []
while True:
r = requests.get(
f"{BASE}/post-comment-replies/",
params={
"video_id": video_id,
"comment_id": comment_id,
"count": page_size,
"cursor": cursor,
},
headers=HEADERS,
timeout=30,
)
r.raise_for_status()
data = r.json()
replies.extend(data.get("comments", []))
if not data.get("hasMore"):
break
cursor = data.get("cursor", "0")
return replies
This is a delayed archive, not a live moderation feed. If your product needs to mute slurs as they happen during a broadcast, this approach will not save you. If your product needs post-stream sentiment analysis on the comment trail, it works.
Daily snapshots of /userinfo-by-username/ give you a clean follower time series. The shape of the curve will usually betray a Live event even when you have no other signal that one occurred. Counters live under the nested stats object, not at the top level.
def follower_snapshot(username):
r = requests.get(
f"{BASE}/userinfo-by-username/",
params={"username": username},
headers=HEADERS,
timeout=30,
)
r.raise_for_status()
payload = r.json()
return {
"username": payload["user"]["uniqueId"],
"follower_count": payload["stats"]["followerCount"],
"heart_count": payload["stats"]["heartCount"],
"video_count": payload["stats"]["videoCount"],
"captured_at": datetime.now(timezone.utc).isoformat(),
}
Run that on a cron, store the rows, and a simple z-score over a 14-day rolling window will flag the spikes. Cross-reference with the creator's recap-clip publish times from /user-posts/ for confirmation.
There is no "currently live" filter on search. There is /search-user/, which returns ranked accounts for a keyword. Combine that with the follower-snapshot pattern above and you can build a niche leaderboard, then manually qualify which of those creators actually run Live regularly.
def search_creators(keyword, page_size=20, pages=3):
creators, cursor = [], "0"
for _ in range(pages):
r = requests.get(
f"{BASE}/search-user/",
params={"keyword": keyword, "count": page_size, "cursor": cursor},
headers=HEADERS,
timeout=30,
)
r.raise_for_status()
data = r.json()
creators.extend(data.get("user_list", []))
if not data.get("hasMore"):
break
cursor = data.get("cursor", "0")
return creators
Top key is user_list, not users, which is a common source of empty-list bugs.
The only official TikTok-blessed surface that touches Live is the TikTok Live Studio SDK, which is creator-side. It lets a broadcaster pipe overlays, alerts, and scene controls into their own stream. It does not let an outside developer subscribe to gifts or comments on someone else's stream. The TikTok for Developers API and Research API also do not expose Live data to third parties. If you ever see a vendor claim an "official partnership for TikTok Live data," ask which TikTok product team signed it. The answer is almost always no team at all.
It is technically possible to spin up headless browsers, scrape the TikTok Live web player, and intercept the WebSocket frames that carry gifts and comments. People do this. We have looked at it. We chose not to ship it, for three reasons:
If you want a deeper look at why scraping-based "free TikTok APIs" hit the same wall, we wrote about it in our blog.
The right call depends on what you are shipping.
Build today if your product can succeed on next-day data, your KPI is engagement lift rather than gift revenue attribution, and your audience-growth signals can tolerate a daily snapshot cadence. The workarounds above will get you 80% of the way to a usable Live-creator analytics product, on top of stable endpoints that are not going to disappear because TikTok pushed a new mobile build.
Wait if your product genuinely requires real-time gift attribution, sub-minute viewer counts, or in-stream moderation. Nothing on the third-party market today will give you all three reliably for more than a few months at a stretch. The honest move is to wait for an official surface or to partner directly with creators whose own Live Studio data they can share with you.
If you have a concrete Live use case, tell us. We track inbound Live-endpoint requests separately from the rest of our roadmap, and the requests that come with a real use case, an expected request volume, and a budget number get weight. The fastest channel is the contact page. If you are already a customer, the support form inside your profile also lands in the same queue.
If we ever ship a dedicated Live endpoint, it will land in the documentation, the interactive playground, and the auto-generated Postman collection at the same time. There will not be a quiet beta. You can also check pricing to see whether Live calls, if and when they exist, sit at the same one-credit-per-request rate as the rest of the catalog.
Not through TikLiveAPI today. The concurrent viewer counter is an internal WebSocket-driven number. We do not surface it, and we will not pretend otherwise.
No. Gift transactions are not in any of our 37 endpoints. The closest proxy is the engagement lift on the creator's regular feed before and after a known stream, which you can derive from /user-posts/ snapshots.
No. We expose /post-comments/ and /post-comment-replies/ for comments on regular videos, including Live recap clips after the fact. We do not pipe in-room chat events as they happen.
Because every reliable way to get that data today depends on intercepting unofficial protocols that break frequently. We will not ship an endpoint we cannot keep up at the SLA we advertise on the rest of the platform.
We do not have a date. The honest answer is that we are watching official TikTok developer announcements and tracking customer demand, and we will publish a roadmap update the moment either of those shifts. In the meantime, the workarounds above are the supported path.
Ready to put what you read into code? Try our endpoints live or grab the full reference.