Обзор
TikTool отдаёт две категории данных рейтингов через API сайта на tik.tools. Оба эндпоинта возвращают рейтинги стримеров TikTok LIVE в реальном времени, отсортированные по заработанным алмазам.
Региональные рейтинги
Дневной топ-100 стримеров по сумме заработанных алмазов с разбивкой по регионам. Обновляется непрерывно в течение дня. Доступно подписчикам Basic, Pro и Ultra.
- Топ-100 стримеров в каждом регионе
- Место, счёт (алмазы), статус эфира, ID комнаты
- Регионов по всему миру: 44
- Данные обновляются непрерывно
Рейтинги лиг
Рейтинги по классам (A1-D5) для стримеров, которые соревнуются в лигах TikTok LIVE. Показывают, кто находится в каждом классе в любом регионе. Нужен тариф Ultra для разработчиков. Agency PASS (tik.tools/vip) - это подписка на сайте: она открывает данные лиг в интерфейсе сайта, но не даёт программного доступа через API.
- Дивизионов лиг: 18 - A1, A2, A3, B1, B2, B3, B4, B5, C1, C2, C3, C4, C5, D1, D2, D3, D4, D5
- Места внутри каждого класса со статусом эфира
- Превью за стеклом для младших тарифов (5 записей)
- Данные часто обновляются
tik.tools (не на api.tik.tools) и используют авторизацию по сессии. Вызывайте их со своего сервера с действующей cookie сессии, полученной при входе на tik.tools с платным аккаунтом разработчика. Все платные тарифы для разработчиков (Basic, Pro, Ultra) имеют доступ к эндпоинтам региональных рейтингов. Для эндпоинтов лиг нужен тариф Ultra для разработчиков. Подписка Agency PASS (tik.tools/vip) - отдельный продукт только для сайта: она открывает данные лиг в интерфейсе tik.tools, а не через этот API для разработчиков.Справочник регионов
Доступно региональных рейтингов: 44. Используйте Slug в URL эндпоинта рейтинга страны и Код региона в эндпоинтах лиг.
north-americaUS+North AmericacanadaCACanadabrazil-regionBRBrazilmexicoMXMexicolatin-americaLATAMLatin Americacolombia-peru-dominican-republicCO+Colombia, Peru & Dominican RepublicjamaicaJMJamaicaaustralia-pacificAU+Australia & Pacificjapan-regionJPJapansouth-korea-regionKRSouth Koreataiwan-regionTWTaiwanindonesia-regionIDIndonesiamalaysia-regionMYMalaysiasingaporeSGSingaporephilippines-regionPHPhilippinesthailand-regionTHThailandvietnam-regionVNVietnamnepalNPNepalbangladesh-bhutan-maldivesBD+Bangladesh, Bhutan & MaldivesazerbaijanAZAzerbaijankazakhstanKZKazakhstankyrgyzstanKGKyrgyzstanbelarusBYBelarusukraineUAUkrainecentral-asiaCCACentral AsiadachDE+Germany & DACHswitzerlandCHSwitzerlandiberiaES+Iberiacentral-europeHU+Central EuropelusophonePT+Lusophonefrance-regionFR+FrancebelgiumBEBelgiumnetherlands-regionNLNetherlandsunited-kingdom-regionUK+United Kingdomireland-baltics-maltaIE+Ireland, Baltics & Maltaitaly-regionIT+ItalyswedenSESwedenscandinaviaSE+Nordicspoland-regionPLPolandromania-regionRORomaniabalkansBKBalkansturkey-regionTRTurkeymiddle-east-africaMENAMiddle East & Africanigeria-ghana-kenya-south-africaNG+Nigeria, Ghana, Kenya & South AfricaЭндпоинт: региональный рейтинг
https://tik.tools/api/leaderboards/country/:slugВсе платные тарифыВозвращает топ-100 текущего дня для региона. Записи отсортированы по score (сумма алмазов, заработанных сегодня) по убыванию.
Параметры пути
slugstringSlug региона из справочника регионов выше (например, balkans, north-america)Схема ответа
[].ranknumberМесто в рейтинге (1 = больше всех заработал)[].uniqueIdstringНикнейм в TikTok (без @)[].nicknamestringОтображаемое имя в TikTok[].scorenumberСумма алмазов, заработанных сегодня в этом регионе[].isLivebooleanИдёт ли у стримера эфир прямо сейчас[].roomIdstring | nullID комнаты, если эфир идёт, иначе nullПример ответа
[
{
"rank": 1,
"uniqueId": "top_creator",
"nickname": "Top Creator",
"score": 284500,
"isLive": true,
"roomId": "7384920175638291456"
},
{
"rank": 2,
"uniqueId": "second_place",
"nickname": "Second Place",
"score": 198200,
"isLive": false,
"roomId": null
}
]Примеры кода
// Node.js - fetch Balkans leaderboard
const response = await fetch('https://tik.tools/api/leaderboards/country/balkans', {
headers: {
'x-api-key': 'YOUR_ULTRA_API_KEY',
}
})
const entries = await response.json()
for (const entry of entries) {
console.log(`#${entry.rank} @${entry.uniqueId} - ${entry.score} diamonds${entry.isLive ? ' [LIVE]' : ''}`)
}Эндпоинты лиг
hasFullAccess в ответе будет false, а maskedCount покажет, сколько записей скрыто. Важно: подписка Agency PASS (tik.tools/vip) открывает данные лиг на сайте, но не является подпиской на API для разработчиков.4a. Список лиг региона
https://tik.tools/api/leaderboards/leagues/:regionТолько UltraПоказывает доступные классы лиг для региона: сколько стримеров в каждом классе и когда данные обновлялись в последний раз.
Параметры пути
regionstringКод региона (например, BK, BC, US+) из справочника регионовСхема ответа
[].classTypenumberЧисловой идентификатор класса (см. справочник classType ниже)[].classLabelstringНазвание класса для людей (например, "A1", "B5")[].countnumberСколько стримеров сейчас в этом классе[].updatedAtstringМетка времени последнего обновления в формате ISO 8601Пример ответа
[
{ "classType": 2000, "classLabel": "A1", "count": 12, "updatedAt": "2026-05-11T14:30:00.000Z" },
{ "classType": 1900, "classLabel": "A2", "count": 28, "updatedAt": "2026-05-11T14:30:00.000Z" },
{ "classType": 1100, "classLabel": "B5", "count": 55, "updatedAt": "2026-05-11T14:30:00.000Z" },
{ "classType": 1000, "classLabel": "C1", "count": 83, "updatedAt": "2026-05-11T14:30:00.000Z" }
]// Node.js - list leagues for Balkans (BK)
const response = await fetch('https://tik.tools/api/leaderboards/leagues/BK', {
headers: { 'x-api-key': 'YOUR_ULTRA_API_KEY' }
})
const leagues = await response.json()
for (const league of leagues) {
console.log(`${league.classLabel} (type ${league.classType}): ${league.count} creators`)
}4b. Записи лиги
https://tik.tools/api/leaderboards/league/:region/:classTypeТолько UltraВозвращает рейтинг стримеров в конкретном классе лиги для региона. Это основной эндпоинт для инструментов, учитывающих лиги, и дашбордов мониторинга стримеров.
Параметры пути
regionstringКод региона (например, BK, US+)classTypenumberЧисловой идентификатор класса (2000=A1, 1900=A2, 1100=B5 и т. д.)Схема ответа
hasFullAccessbooleanTrue, если у вашего тарифа полный доступ; false = режим превью (5 записей)maskedCountnumberСколько записей скрыто из-за ограничений тарифа (0, если hasFullAccess)totalCountnumberВсего стримеров в этом классеentries[].ranknumberМесто внутри классаentries[].userIdstringЧисловой ID пользователя TikTok (постоянный ID бэкенда, никогда не меняется)entries[].uniqueIdstringНикнейм/хэндл в TikTok без @ (пользователь может сменить)entries[].nicknamestringОтображаемое имя (пользователь может сменить)entries[].scorenumberАлмазы, заработанные в текущем периоде лигиentries[].isLivebooleanИдёт ли у стримера эфир прямо сейчасПример ответа
{
"hasFullAccess": true,
"maskedCount": 0,
"totalCount": 12,
"entries": [
{
"rank": 1,
"userId": "6841523190294479361",
"uniqueId": "league_leader",
"nickname": "League Leader",
"score": 1840000,
"isLive": true
},
{
"rank": 2,
"userId": "6712309845712006148",
"uniqueId": "second_in_a1",
"nickname": "Second In A1",
"score": 1620000,
"isLive": false
}
]
}// Node.js - fetch A1 league entries for Balkans
const response = await fetch('https://tik.tools/api/leaderboards/league/BK/2000', {
headers: { 'x-api-key': 'YOUR_ULTRA_API_KEY' }
})
const data = await response.json()
if (!data.hasFullAccess) {
console.warn(`Teaser mode: ${data.maskedCount} entries hidden. Upgrade to Ultra for full access.`)
}
console.log(`A1 Balkans - ${data.totalCount} creators total`)
for (const entry of data.entries) {
const liveTag = entry.isLive ? ' [LIVE]' : ''
console.log(`#${entry.rank} @${entry.uniqueId} - ${entry.score.toLocaleString()} diamonds${liveTag}`)
}Справочник classType
Классы лиг сопоставляют числовые значения classType с уровнями соревнования. A1 - высший класс: элита, которая зарабатывает больше всего алмазов. D5 - точка входа в лиги.
2000A1Элитный класс. Лидеры по заработку в регионе. Самая жёсткая конкуренция и самые высокие требования по алмазам.1900A2Старший класс. Состоявшиеся стримеры с высоким заработком, которые идут к повышению в A1.1800A3Устоявшийся класс A. Стабильно много зарабатывают и держатся в элитном диапазоне.1500B1Вершина диапазона B. Стримерам осталось одно повышение до дивизионов A.1400B2Верхний класс B. Сильные стримеры, которые борются за B1.1300B3Средний класс B. Стабильный заработок в середине диапазона B.1200B4Нижний класс B. Стримеры, которые растут к верхним дивизионам B.1100B5Вход в класс B. Стримеры со стабильно хорошим заработком в течение периода лиги.1000C1Вершина диапазона C. Активные стримеры, которые растут к классу B.900C2Верхний класс C. Средний заработок, борьба за повышение в C1.800C3Средний класс C. Регулярный заработок в середине диапазона C.700C4Нижний класс C. Стримеры, которые поднимаются к верхним дивизионам C.600C5Вход в класс C. Недавно поднялись из диапазона D.500D1Вершина диапазона D. Стримеры, которые начинают заметно зарабатывать в регионе.400D2Верхний класс D. Новички или стримеры с небольшим объёмом.300D3Средний класс D. Стримеры, которые осваиваются в лигах.200D4Нижний класс D. Первые заработки в лигах.100D5Входная лига. Стартовая точка для стримеров, допущенных к лигам.Рабочий пример: все стримеры A1 в эфире на Балканах
Этот полный пошаговый пример показывает рекомендуемый подход: узнать доступные классы, найти нужный, получить его записи и отфильтровать тех, кто в эфире. Работает для любого сочетания региона и класса.
isLive === true// Complete example: Find all A1 creators live in Balkans right now
const BASE = 'https://tik.tools'
const REGION = 'BK'
const HEADERS = { 'x-api-key': 'YOUR_ULTRA_API_KEY' }
async function getA1LiveCreators() {
// Step 1: Fetch available leagues for Balkans
const leaguesRes = await fetch(`${BASE}/api/leaderboards/leagues/${REGION}`, {
headers: HEADERS
})
const leagues = await leaguesRes.json()
// Step 2: Find the A1 class (classType 2000)
const a1 = leagues.find(l => l.classLabel === 'A1')
if (!a1) {
console.log('A1 class not found in Balkans')
return []
}
console.log(`Found A1 class: ${a1.count} creators, last updated ${a1.updatedAt}`)
// Step 3: Fetch A1 entries
const entriesRes = await fetch(
`${BASE}/api/leaderboards/league/${REGION}/${a1.classType}`,
{ headers: HEADERS }
)
const data = await entriesRes.json()
if (!data.hasFullAccess) {
console.warn(`Only showing ${data.entries.length} of ${data.totalCount} entries (teaser mode)`)
}
// Step 4: Filter for creators currently live
const liveCreators = data.entries.filter(e => e.isLive)
return liveCreators
}
const live = await getA1LiveCreators()
console.log(`\n${live.length} A1 creator(s) live in Balkans right now:\n`)
for (const creator of live) {
console.log(` #${creator.rank} @${creator.uniqueId} - ${creator.score.toLocaleString()} diamonds`)
}
// Connect to their streams via TikTool WebSocket
for (const creator of live) {
console.log(` wss://api.tik.tools?uniqueId=${creator.uniqueId}&apiKey=YOUR_API_KEY`)
}Лимиты запросов и лучшие практики
Места в рейтинге меняются постепенно. Кэшируйте на 10-30 секунд перед повторным запросом, чтобы не нагружать API без нужды.
Таблицы лиг меняются медленно, поэтому опрашивать эндпоинты лиг чаще, чем раз в несколько минут, бессмысленно.
Все регионы (всего: 44) можно опрашивать параллельно. Если нужны данные по нескольким регионам, отправляйте запросы одновременно, а не по очереди.
Когда у записи рейтинга isLive равно true, можно сразу открыть WebSocket к этому стримеру по его uniqueId и вашему API-ключу.
Cookie сессии дают доступ к вашему аккаунту. Храните их в переменных окружения, никогда - в исходном коде или публичных репозиториях.
Не в каждом регионе есть все классы. Всегда сначала вызывайте эндпоинт списка, чтобы узнать, какие значения classType доступны для нужного региона.