Ask any major label A&R scout what their first signal source is in 2026, and the answer will not be radio, Spotify editorial, or Shazam. It is TikTok. A 15-second snippet looped across a few hundred thousand UGC clips can chart a song globally in under a week, and the labels who win are the ones who see the velocity curve early enough to clear samples, brief the artist, and brief retail before the peak.
The problem is that TikTok's native Creator Center and Commercial Music Library were never built for catalog-scale workflows. They do not expose programmatic access to sound usage counts, creator metadata, or historical post velocity. Music teams end up paying analyst vendors thousands of dollars per month for dashboards that re-skin data anyone with API access could pull directly.
This guide walks through how A&R, marketing, sync, and distribution teams use the TikLiveAPI 37-endpoint surface to power four production workflows: trend discovery, creator scouting, sync monitoring, and release campaign measurement. Every code sample below is verified against live endpoint shapes.
Before diving into endpoints, it helps to frame what music industry teams actually want to do with TikTok data:
Each of these maps to a small set of endpoints. You do not need all 37 to run a music desk - you need maybe six, used together.
TikTok's internal model is the sound, not the song. A sound is anything attached to a video: a snippet of a commercial track, a user's original audio, a voice-over, or a remix. Every sound gets a numeric music_id and is reusable across unlimited videos.
That means a single song can have hundreds of sound IDs - the original distributor upload, the sped-up version someone made, a slowed-and-reverb edit, and so on. A real catalog monitoring system has to track all of them.
The API exposes sound data in two places:
id, title, play (audio stream URL), cover, author, original (boolean - is this user-generated original audio?), duration, album, and video_count.music_info field inside /post-detail/ - the same sound metadata embedded in every post response so you can pivot from any video to the underlying sound.The original flag is what distinguishes user-generated audio from commercial tracks. It is the first thing a sync team checks.
Velocity matters more than volume. A sound with 50,000 posts and 80% of them from the last 24 hours is a hotter signal than a sound sitting at 2 million posts with flat recent activity.
Use /music-posts/ to fetch posts attached to a given music_id in reverse-chronological order, then compute a simple velocity score:
import requests, time
API_KEY = "YOUR_API_KEY"
BASE = "https://api.tikliveapi.com"
HDR = {"X-Api-Key": API_KEY}
def sound_velocity(music_id, sample=100):
"""Returns (posts_last_24h, posts_last_7d, ratio)."""
now = int(time.time())
day_ago = now - 86400
week_ago = now - 7 * 86400
posts, cursor, fetched = [], 0, 0
while fetched < sample:
r = requests.get(f"{BASE}/music-posts/", headers=HDR,
params={"music_id": music_id, "count": 35, "cursor": cursor}).json()
videos = r.get("videos", [])
posts.extend(videos)
fetched += len(videos)
if not r.get("hasMore"): break
cursor = r.get("cursor", 0)
d24 = sum(1 for v in posts if v.get("create_time", 0) >= day_ago)
d7 = sum(1 for v in posts if v.get("create_time", 0) >= week_ago)
return d24, d7, (d24 / d7) if d7 else 0
print(sound_velocity("7234567890123456789"))
A ratio above ~0.30 on a sample of 100 recent posts means a third of last week's usage happened in the last day. That is a rising sound. Pair it with video_count from /music-info/ to filter out sounds that are still too small to bet on.
Once you have a watchlist of music IDs, snapshot the velocity ratio nightly and trigger alerts when a sound crosses your threshold.
A&R teams want to find creators who are gaining traction in a specific genre or niche before they get signed to a competitor. The pattern uses /search-video/ with sort and freshness filters, then dedupes to creators:
def scout_creators(keyword, max_results=200):
seen, creators, cursor = set(), [], 0
while len(seen) < max_results:
r = requests.get(f"{BASE}/search-video/", headers=HDR, params={
"keyword": keyword,
"count": 35,
"cursor": cursor,
"publish_time": 7, # last 7 days
"sort_by": 1 # like count
}).json()
for v in r.get("videos", []):
uid = v.get("author", {}).get("id")
if uid and uid not in seen:
seen.add(uid)
creators.append(uid)
if not r.get("hasMore"): break
cursor = r.get("cursor", 0)
return creators
ids = scout_creators("bedroom pop")
Now hydrate each creator with /userinfo-by-id/ and filter by follower tier. Most labels target the 10k-250k follower band - large enough to have proven traction, small enough that signing is still affordable.
def hydrate(userid):
r = requests.get(f"{BASE}/userinfo-by-id/", headers=HDR,
params={"userid": userid}).json()
user, stats = r.get("user", {}), r.get("stats", {})
return {
"username": user.get("uniqueId"),
"nickname": user.get("nickname"),
"verified": user.get("verified"),
"followers": stats.get("followerCount", 0),
"videos": stats.get("videoCount", 0),
"hearts": stats.get("heartCount", 0),
}
shortlist = [hydrate(u) for u in ids[:50]]
candidates = [c for c in shortlist if 10000 <= c["followers"] <= 250000]
Cross-reference username against your signed roster CSV to drop existing artists, and you have a daily A&R sheet.
Sync teams care about two things: revenue-leak (commercial use of your catalog without a license) and pitch surface (which brands are using TikTok sounds in their ads). Both come out of the same pipeline.
For each music_id in your catalog, periodically crawl /music-posts/ and look at three signals inside each post:
commerce_info and commercial_video_info - present and populated when the post is a paid promotion.is_ad - boolean flag.mentioned_users - if a brand handle is tagged it is usually a paid collab even when is_ad is false.def scan_for_commercial_use(music_id, since_ts):
flagged, cursor = [], 0
while True:
r = requests.get(f"{BASE}/music-posts/", headers=HDR,
params={"music_id": music_id, "count": 35, "cursor": cursor}).json()
for v in r.get("videos", []):
if v.get("create_time", 0) < since_ts:
return flagged
ci = v.get("commerce_info") or {}
cvi = v.get("commercial_video_info") or {}
mu = v.get("mentioned_users") or []
if v.get("is_ad") or ci or cvi or mu:
flagged.append({
"aweme_id": v.get("aweme_id"),
"author": v.get("author", {}).get("unique_id"),
"plays": v.get("play_count"),
"is_ad": v.get("is_ad"),
"brands": [m.get("nickname") for m in mu],
})
if not r.get("hasMore"): break
cursor = r.get("cursor", 0)
return flagged
Push the flagged list into a triage queue. Each row becomes one of three things: a takedown notice (no license, low pitch value), a sync proposal (no license but the brand is worth pitching), or a routine match (already licensed).
When a label releases a track, the question after week one is always "is it sticking?" Streaming DSPs give you stream counts but not the cultural-velocity context. TikTok sound usage answers the second question.
The pattern is daily snapshots of three numbers per release sound: total post count, sum of play_count across all posts, and average engagement (digg+comment+share over plays). Compare against a baseline of similar-tier releases.
def daily_snapshot(music_id, sample_cap=500):
posts, cursor = [], 0
while len(posts) < sample_cap:
r = requests.get(f"{BASE}/music-posts/", headers=HDR,
params={"music_id": music_id, "count": 35, "cursor": cursor}).json()
posts.extend(r.get("videos", []))
if not r.get("hasMore"): break
cursor = r.get("cursor", 0)
info = requests.get(f"{BASE}/music-info/", headers=HDR,
params={"music_id": music_id}).json()
total_plays = sum(v.get("play_count", 0) for v in posts)
eng = sum((v.get("digg_count", 0) + v.get("comment_count", 0)
+ v.get("share_count", 0)) for v in posts)
return {
"date": time.strftime("%Y-%m-%d"),
"music_id": music_id,
"total_posts": info.get("video_count"),
"sampled_plays": total_plays,
"engagement_rate": (eng / total_plays) if total_plays else 0,
}
Write the snapshot to a daily CSV or a tiny SQLite file. After ten days you have a clean day-over-day curve you can chart alongside Spotify streams. Plug it into your existing release dashboard or test the live calls first in the browser playground.
Concrete numbers. Say a small indie is releasing one single and wants to track it for 30 days.
Daily ops: one /music-info/ call (1 credit), four /music-posts/ pagination calls to sample ~140 recent posts (4 credits), and roughly 10 /userinfo-by-id/ calls to enrich the top creators using the sound (10 credits). That is 15 credits per day, or 450 credits over 30 days.
On top of that, run a weekly creator-scouting pass: /search-video/ across three keywords with 70 results each (~6 paginated calls per keyword = 18 credits/week, ~80 over the month) and hydration on 50 creators per week (200 credits over the month).
Total: roughly 730 credits for a full month of release tracking plus A&R scouting. That fits comfortably in the entry-paid tier on the pricing page, well under $50. Compare against $1,500-$3,000/month for traditional vendor dashboards.
A few notes for legal/business affairs teams reviewing this approach:
play/hdplay fields in /post-detail/ are intended for internal review (clearance evaluation, A&R review reels), not for redistribution. Re-uploading TikTok content elsewhere remains subject to TikTok's terms and any third-party rights in the underlying content.For questions on volume pricing or enterprise SLAs reach out via the contact form or check status before peak release windows at the /status/ page.
Yes. The /music-info/ endpoint returns an original boolean. When original is true the sound was uploaded by a regular TikTok user (could be a snippet, voice-over, or remix). When false it is typically a commercial track sourced from TikTok's licensed library. Sync teams should pull both - bootleg sped-up versions usually show up as original=true uploads.
All endpoints hit TikTok in real time with ~750ms average latency. There is no scrape lag - when you call /music-posts/, you see posts that were uploaded seconds ago.
Use the cursor returned in each /music-posts/ response, looping until hasMore is false. Set count=35 (the maximum) per request to minimize credit spend. For a sound at 100k posts you would burn roughly 2,860 credits to fully paginate - usually you do not need to, since sampling the most recent 500-1000 is enough for velocity analysis.
No. TikTok does not expose first-party audience demographics through public endpoints. What you do get is the creator's own location signals via /user-posts/ region tags, follower count tiers from /userinfo-by-id/, and language/keyword signals you can infer from their content. For audience demographics teams typically supplement with the creator's own media kit during outreach.
Yes. Register, verify your email, and 100 free credits are granted instantly. That is enough to run one full music-info + music-posts pagination on a viral sound and prove out the velocity model before committing budget. Live in-browser testing happens in the playground; export to your stack via the Postman collection linked from the docs.
Ready to put what you read into code? Try our endpoints live or grab the full reference.