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.

EndpointReturnsCost
GET /v1/tiktok/profilefollowers, heart_count, posts_count, region, is_verified, secUid$0.0005
GET /v1/tiktok/videosRecent tracked videos: caption, likes, comments, shares, plays, posted_at, duration$0.0005 (up to 100)
GET /v1/tiktok/statsAggregates: 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.

shell
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:

response
{
  "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

TikTok profile GET
$ curl api.virev.ai/v1/tiktok/profile ?q=
live · real API call · $0.0005

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.

videos.js
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.

stats.py
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 so followers and heart_count are 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:

shell
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 depthCallsCost 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 →