Technology Aug 29, 2026 · 5 min read

There Is No Official TikTok LIVE API. Here Is How to Get the Data Anyway

TikTok's developer platform covers login kits, content posting and basic profile fields. But the LIVE side of TikTok, which is an entire economy of streams, gifts, diamonds, league rankings and agency recruitment, has no official API at all. If you have ever tried to answer a question like "which cr...

DE
DEV Community
by Rngrow
There Is No Official TikTok LIVE API. Here Is How to Get the Data Anyway

TikTok's developer platform covers login kits, content posting and basic profile fields. But the LIVE side of TikTok, which is an entire economy of streams, gifts, diamonds, league rankings and agency recruitment, has no official API at all. If you have ever tried to answer a question like "which creators in Germany are streaming and open to joining an agency right now", you know the developer docs give you nothing.

I run a TikTok LIVE data platform (RnG), and we spent the last year building the collection pipeline behind it. This post covers what I learned about getting LIVE data programmatically, the traps that produce silently wrong numbers, and what we ended up shipping as a public REST API.

The two ways to get TikTok LIVE data

There are only two: collect it yourself, or consume it from someone who does.

Collecting it yourself means infrastructure that watches public streams and pages at scale: proxies, headless browsers, retry logic, and constant maintenance because TikTok changes its internals often. It works, but it is a full engineering job that never ends. The pipeline does not fail loudly. It fails by quietly serving you stale data.

Consuming an API means someone else operates that pipeline and you get JSON. The rest of this post is about the engineering details that separate trustworthy LIVE data from garbage, whichever route you take.

Trap 1: a room id is not proof of a live stream

The obvious way to check if a creator is live is to fetch their /live page and look for a roomId. This is wrong, and it is wrong in a way you will not notice for weeks: the room id lingers after a stream ends. A creator who went offline twenty minutes ago still has one.

The room's own status field is the truth: 2 means live, 4 means the stream ended. Our live checks require status: 2 before reporting anyone as live:


bash
curl "https://rngrow.com/api/v1/creators/resolve?username=somehandle" \
  -H "X-API-Key: rng_live_YOUR_KEY"

{ "found": true, "creator": { "username": "somehandle", "follower_count": 152300, "live": true } }

If you build your own checker, test it against a stream that just ended. That is the case that bites.

Trap 2: gift streaks double-count diamonds

TikTok gift combos report running totals while they animate. A naive recorder that logs every gift event will count the same diamonds several times, and every number downstream inflates. Correct accounting has to track deltas per streak, not raw events. Ask any data provider how they handle this; if the answer is vague, their earnings numbers are wrong.

Trap 3: freshness has to be in the response

LIVE data decays in minutes. A creator who was recruitable this morning may have signed with an agency by lunch. The only honest design puts verification timestamps on every record, so the consumer can decide what is fresh enough:

{
  "username": "creator_handle",
  "follower_count": 2126,
  "checked_at": "2026-08-29T06:54:14Z"
}

Ranking boards should also report their own age, and time-sensitive flags should expire: on our boards, the "was live at capture" flag is withheld once a board is older than 30 minutes, because at that point it is a lie.

Trap 4: offset pagination on a live table

The available-creators pool gains rows every second. Offset pagination against a table like that skips and duplicates rows between pages. Keyset (cursor) pagination on (checked_at, id) is stable:

import { Rngrow } from "@rngrow/sdk";

const rng = new Rngrow(process.env.RNG_API_KEY!);

for await (const creator of rng.creators.iterate({ country: "RO" })) {
  console.log(creator.username, creator.checked_at);
}

The iterator above walks the whole pool with cursors under the hood. The SDK is open source (github.com/steveantdev/rngrow-sdk, npm install @rngrow/sdk), zero dependencies, Node 18+.

What is actually available as data

More than most people expect. Beyond the creator pool, TikTok LIVE has competitive league divisions (ranked boards of 99 creators each), daily diamond leaderboards per country, per-game rankings for gaming streamers, and the gifting side: which spenders fund which creators. All of it can be structured:

# A full league division as JSON
curl "https://rngrow.com/api/v1/leagues/board?country=RO&division=A1" \
  -H "X-API-Key: rng_live_YOUR_KEY"

# The market's top gift senders, ranked by the last 7 days
curl "https://rngrow.com/api/v1/gifters?country=RO&sort=7d" \
  -H "X-API-Key: rng_live_YOUR_KEY"

Use cases I have seen work well: syncing recruitable creators into a CRM on a schedule, alerting a recruiting team when a ranked creator's diamonds spike (the single best moment to reach out), and qualifying leads by proven earnings instead of follower counts, which correlate with LIVE revenue far less than you would think.

Takeaways

- There is no official TikTok LIVE API, so all LIVE data is independently collected. Judge any source by whether you can verify its freshness from the response itself.
- The failure modes are silent: lingering room ids, double-counted gift streaks, stale "live" flags, offset pagination on moving tables. Design against them explicitly.
- If the data is a means to an end for you, consuming an API beats operating a pipeline. If you want to see what a finished surface looks like, our docs are at rngrow.com/api-docs and the overview is at rngrow.com/tiktok-live-api.

Disclosure: I built the API referenced here. The engineering traps apply no matter whose data you use, including your own.
DE
Source

This article was originally published by DEV Community and written by Rngrow.

Read original article on DEV Community
Back to Discover

Reading List