Developer Guide

Leaderboard & League API

Real-time TikTok LIVE leaderboard data. Get daily rankings across 28+ regions, query live league class data, and monitor creator performance.

ALL PAID PLANS ULTRA ONLY - Leagues

Overview

TikTool exposes two categories of leaderboard data through its website API at tik.tools. Both endpoints return real-time competitive ranking data for TikTok LIVE creators sorted by diamond earnings.

All Paid Plans

Regional Leaderboards

Daily rankings of the top 100 creators by total diamonds earned, broken down by geographic region. Updated continuously throughout the day. Available to Basic, Pro, and Ultra subscribers.

  • Top 100 creators per region
  • Rank, score (diamonds), live status, room ID
  • 28 regions worldwide
  • Data refreshes every 10 seconds
Ultra Developer Plan Only

League Rankings

Class-based competitive ranking data (A1 through D3) for creators competing in TikTok LIVE leagues. Reveals who is in each competitive tier in any region. Requires Ultra developer plan. Agency PASS (tik.tools/vip) is a website subscription - it gives frontend access to league data on the website, not programmatic API access.

  • 8 class tiers: A1, A2, B5, C1, C2, D1, D2, D3
  • Per-class ranked entries with live status
  • Glass-wall teaser for lower tiers (5 entries)
  • Data refreshes every 5 minutes
Authentication: These endpoints are on tik.tools (not api.tik.tools) and use session-based auth. Call them from your server with a valid session cookie obtained by logging into tik.tools with a paid developer account. All paid developer plans (Basic, Pro, Ultra) have access to regional leaderboard endpoints. League endpoints require the Ultra developer plan. The Agency PASS subscription (at tik.tools/vip) is a separate website-only product - it grants access to league data through the tik.tools website interface, not via this developer API.

Region Reference

28 regional leaderboards are available. Use the Slug in the country leaderboard endpoint URL, and the Region Code in league endpoints.

SlugRegion CodeDescription
balkansBKBalkans (Albania, Serbia, Bosnia, North Macedonia, Kosovo, Montenegro)
north-americaUS+North America (United States, Canada)
united-kingdom-regionGB+United Kingdom
broader-chinaBCBroader China (China, Taiwan, Hong Kong)
southeast-asiaSEASoutheast Asia (Vietnam, Thailand, Indonesia, Malaysia, Philippines)
brazilBRBrazil
turkeyTRTurkey
mexicoMXMexico
saudi-arabiaSASaudi Arabia
egyptEGEgypt
iraqIQIraq
germanyDEGermany
franceFRFrance
spainESSpain
italyITItaly
russiaRURussia
japanJPJapan
south-koreaKRSouth Korea
australiaAUAustralia
argentinaARArgentina
colombiaCOColombia
chileCLChile
peruPEPeru
pakistanPKPakistan
indiaINIndia
nigeriaNGNigeria
south-africaZASouth Africa
moroccoMAMorocco

Endpoint: Regional Leaderboard

GEThttps://tik.tools/api/leaderboards/country/:slugAll Paid Plans

Returns the current day's top-100 leaderboard for a region. Entries are sorted by score (total diamonds earned today) descending.

Path Parameters

ParameterTypeDescription
slugstringRegion slug from the Region Reference table above (e.g., balkans, north-america)

Response Schema

FieldTypeDescription
[].ranknumberPosition on the leaderboard (1 = highest earner)
[].uniqueIdstringTikTok username (without @)
[].nicknamestringDisplay name shown on TikTok
[].scorenumberTotal diamonds earned today in this region
[].isLivebooleanWhether the creator is currently streaming live
[].roomIdstring | nullLive room ID if currently streaming, otherwise null

Example Response

[
  {
    "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
  }
]

Code Examples

// 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]' : ''}`)
}

League Endpoints

Ultra required. League endpoints require an Ultra developer plan. Requests from Basic and Pro plans receive a teaser of 5 entries - the hasFullAccess field in the response will be false and maskedCount will indicate how many entries are hidden. Note: Agency PASS subscription (tik.tools/vip) gives website access to league data but is not a developer API subscription.

4a. List Leagues for a Region

GEThttps://tik.tools/api/leaderboards/leagues/:regionUltra Only

Lists the available league classes for a given region, including how many creators are in each class and when the data was last updated.

Path Parameters

ParameterTypeDescription
regionstringRegion code (e.g., BK, BC, US+) from the Region Reference table

Response Schema

FieldTypeDescription
[].classTypenumberNumeric class identifier (see classType Reference below)
[].classLabelstringHuman-readable class name (e.g., "A1", "B5")
[].countnumberNumber of creators currently in this class
[].updatedAtstringISO 8601 timestamp of the last data refresh

Example Response

[
  { "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. Get League Entries

GEThttps://tik.tools/api/leaderboards/league/:region/:classTypeUltra Only

Returns the ranked list of creators in a specific league class for a region. This is the primary endpoint for building league-aware tools and creator monitoring dashboards.

Path Parameters

ParameterTypeDescription
regionstringRegion code (e.g., BK, US+)
classTypenumberNumeric class identifier (2000=A1, 1900=A2, 1100=B5, etc.)

Response Schema

FieldTypeDescription
hasFullAccessbooleanTrue if your tier has full access; false = teaser mode (5 entries)
maskedCountnumberNumber of entries hidden due to tier restrictions (0 if hasFullAccess)
totalCountnumberTotal number of creators in this class
entries[].ranknumberPosition within this class
entries[].userIdstringTikTok numeric user ID (stable backend ID, never changes)
entries[].uniqueIdstringTikTok username/handle without @ (user-changeable)
entries[].nicknamestringDisplay name (user-changeable)
entries[].scorenumberDiamonds earned in the current league period
entries[].isLivebooleanWhether the creator is currently streaming live

Example Response

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

League classes map numeric classType values to competitive tiers. A1 is the highest tier - the elite creators earning the most diamonds. D3 is the entry point into league competition.

classTypeClassDescription
2000A1Elite tier. Top earners in the region. Highest competition, highest diamond requirements for placement.
1900A2Senior tier. Established high-earning creators working toward A1 promotion.
1800A3Established A-class. Consistent high earners holding their spot in the elite range.
1700A4Lower A-class. New addition to the A range; creators competing for A3 promotion.
1600A5A-class entry. Newest A division; recently promoted from the B range.
1100B5Upper mid-tier. Creators with strong consistent earnings across the league period.
1000C1Mid-tier. Active earners building toward the B-class range.
900C2Lower mid-tier. Moderate earners competing for C1 promotion.
500D1Entry league. Creators beginning to earn meaningfully in the region.
400D2Entry league second division. Newer or lower-volume earners.
300D3Entry league third division. The starting point for league-eligible creators.
Not all 8 classes may be present in every region. Call the List Leagues endpoint first to discover which classes exist for your target region, then fetch the specific class you need.

Working Example: Find All A1 Creators Streaming Now in Balkans

This complete multi-step example shows the recommended pattern: discover available classes, find the one you need, fetch its entries, then filter for live creators. This works for any region and class combination.

1
Fetch available leagues for region BK (Balkans)
2
Find the A1 entry and confirm it exists
3
Fetch A1 league entries
4
Filter for isLive === true creators
// 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`)
}

Rate Limits & Best Practices

Cache responses client-side

Leaderboard positions shift gradually. Cache for 10-30 seconds before re-fetching to avoid hammering the API unnecessarily.

League data refreshes every 5 minutes

There is no benefit to polling league endpoints more frequently than every 5 minutes. The underlying data does not change faster than that.

Poll regions independently

All 28 regions can be polled in parallel. If you need multi-region data, fan out requests concurrently rather than sequentially.

Use isLive + roomId to connect

When isLive is true on a leaderboard entry, you can open a WebSocket to that creator immediately using their uniqueId and your API key.

Store session cookies securely

Session cookies grant access to your account. Store them in environment variables, never in source code or public repositories.

List leagues before fetching entries

Not every class exists in every region. Always call the list endpoint first to confirm which classType values are available for your target region.

Frequently Asked Questions

What plans include leaderboard API access?

What is required to access league ranking data?

How often does the leaderboard data update?

How many regions are available?

Can I tell if a creator is currently live from the leaderboard?

Not all classType values appear for my region. Why?

Can I poll all 28 regions at once?