TikTok is where creator momentum shows up first — but it is also the platform with the least usable data access. The official Research and Display APIs require approval, scope you to accounts that authorize your app, and never hand you on-demand stats for an arbitrary public creator. So teams end up scraping the web app, fighting a signed-URL scheme that rotates, and rebuilding it every few weeks.
This guide shows the alternative: three REST endpoints that take a single q input and return a creator's profile, their recent videos with real per-video metrics, and a computed stats bundle — engagement rate, median plays, and posting cadence included. Every call is one authenticated GET, and everything is priced per request so you can run it in a loop over a discovery list without a subscription.
The three TikTok endpoints
One input, one envelope
Every endpoint accepts q as a bare username, an @handle, or a full tiktok.com/@handle URL, and every response is the same shape: { data, meta }. meta carries cost, your remaining balance, and a request_id. You are never charged for a non-200 — a 404 or upstream timeout costs nothing.
| Endpoint | Returns | Cost |
|---|---|---|
GET /v1/tiktok/profile | followers, heart_count, posts_count, region, is_verified, secUid | $0.0005 |
GET /v1/tiktok/videos | Recent tracked videos: caption, likes, comments, shares, plays, posted_at, duration | $0.0005 (up to 100) |
GET /v1/tiktok/stats | Aggregates: avg/median/max plays, avg_engagement_rate, videos_per_week_90d, top_videos | $0.0010 |
Profile: followers, hearts, and region
Start with /v1/tiktok/profile. It returns the account summary you need for a creator card or a discovery row: username, full_name, followers, posts_count, heart_count (lifetime hearts across all videos), is_verified, region, and secUid — TikTok's stable internal ID, handy when you want to key rows without depending on a handle that can change.
curl "https://api.virev.ai/v1/tiktok/profile?q=khaby.lame" \
-H "Authorization: Bearer $VIREV_API_KEY"The response nests the account under data and the billing line under meta:
{
"data": {
"username": "khaby.lame",
"full_name": "Khabane lame",
"followers": 162000000,
"posts_count": 1200,
"heart_count": 2500000000,
"is_verified": true,
"region": "IT",
"secUid": "MS4wLjABAAAA..."
},
"meta": { "cost": "$0.0005", "balance": "$9.9995", "request_id": "req_..." }
}Run it live — swap khaby.lame for any creator to see the sign-up gate
Recent videos: plays, likes, comments, shares
To measure momentum you need the video-level numbers, and this is where TikTok data is richer than most platforms. /v1/tiktok/videos returns each recent tracked video with its caption, likes, comments, shares, plays, posted_at, and duration. Because posted_at is present, you can build a real timeline — recent-30-day plays, best-performing hook, or a week-over-week trend. Pass limit up to 100; the call is a flat $0.0005 regardless of how many videos come back.
const res = await fetch(
"https://api.virev.ai/v1/tiktok/videos?q=@khaby.lame&limit=30",
{ headers: { Authorization: "Bearer kb_live_..." } },
);
const { data, meta } = await res.json();
const videos = data.videos;
const topByPlays = [...videos].sort((a, b) => b.plays - a.plays)[0];
console.log(`${videos.length} videos · ${meta.cost}`);
console.log(`Top: ${topByPlays.plays.toLocaleString()} plays`);Normalize by plays, not followers
Follower-based engagement rates punish large accounts, whose reach is a fraction of their follower count. TikTok's plays field is the real denominator — an interaction rate of (likes + comments + shares) / plays compares a niche creator and a megastar on equal footing.
Stats: engagement rate and posting cadence
If you do not want to fetch every video and reduce it yourself, /v1/tiktok/stats does the aggregation for you at $0.0010. It returns tracked_videos, the avg, median, and max plays, avg_engagement_rate computed as (likes + comments + shares) / plays, videos_per_week_90d (posting cadence over the trailing 90 days), and a top_videos list. The median is the number to trust — one viral outlier can drag the average up by an order of magnitude, so median plays tells you the creator's typical floor.
import requests
res = requests.get(
"https://api.virev.ai/v1/tiktok/stats",
params={"q": "@khaby.lame"},
headers={"Authorization": "Bearer kb_live_..."},
)
stats = res.json()["data"]
print("median plays:", stats["median_plays"])
print("engagement:", stats["avg_engagement_rate"])
print("cadence/wk:", stats["videos_per_week_90d"])That is three signals from one call: how big the reach is (median/max plays), how sticky the audience is (avg_engagement_rate), and how consistently the creator ships (videos_per_week_90d). Together they separate a dormant account riding old virality from one that is actively compounding.
Cached reads vs. up-to-the-second: two endpoints
Freshness and speed are split across two endpoints. /v1/tiktok/profile is the semantic read — the profile as we have it in the tracked corpus, fastest and cheapest, and it never triggers a crawl. /v1/live/tiktok/profile is the acquisition endpoint and takes a source parameter:
source=auto(default) — serves the archived raw payload when one exists for this account, and pulls fresh from TikTok otherwise. The right choice for most live calls.source=db— returns the last archived pull and never triggers a new crawl.source=live— forces a fresh pull from TikTok sofollowersandheart_countare current to the second. Reach for it when the exact number matters, like verifying a paid deliverable. Every live pull also retains the exact raw payload in the private acquisition archive.
For bulk dashboard refreshes over creators you already track, call the semantic /v1/tiktok/profile. When you need the current number, call the live endpoint:
curl "https://api.virev.ai/v1/live/tiktok/profile?q=khaby.lame&source=live" \
-H "Authorization: Bearer $VIREV_API_KEY"What it costs and how to stay under the rate limit
Pricing is flat per call: $0.0005 for a profile, $0.0005 for up to 100 videos, and $0.0010 for the stats bundle. A full creator snapshot — profile plus videos plus stats — runs $0.0020. The default rate limit is 100 requests/minute, surfaced in the X-RateLimit-* response headers; a 429 includes a Retry-After value you can sleep on. Because non-200s are free, a retry loop that backs off on 429 and 5xx never costs you for the failed attempts.
| Snapshot depth | Calls | Cost each |
|---|---|---|
| Profile only | /tiktok/profile | $0.0005 |
| Profile + recent videos | + /tiktok/videos | $0.0010 total |
| Full: profile + videos + stats | + /tiktok/stats | $0.0020 total |
Snapshot your first TikTok creator in 60 seconds
Pay $1, get a $5 balance — that is 2,500 full creator snapshots. No subscription, no OAuth dance.
Get your API key →