Hướng dẫn lập trình

API bảng xếp hạng & giải đấu

Dữ liệu BXH TikTok LIVE thời gian thực. Lấy thứ hạng hằng ngày tại 44 khu vực, truy vấn dữ liệu hạng giải đấu trực tiếp và theo dõi hiệu suất nhà sáng tạo.

MỌI GÓI TRẢ PHÍ CHỈ ULTRA - Giải đấu

Tổng quan

TikTool cung cấp hai nhóm dữ liệu bảng xếp hạng qua API của website tại tik.tools. Cả hai endpoint đều trả về dữ liệu thứ hạng cạnh tranh theo thời gian thực của nhà sáng tạo TikTok LIVE, sắp xếp theo kim cương kiếm được.

Mọi gói trả phí

BXH theo khu vực

Thứ hạng hằng ngày của top 100 nhà sáng tạo theo tổng kim cương kiếm được, chia theo khu vực địa lý. Cập nhật liên tục suốt ngày. Dành cho người đăng ký Basic, Pro và Ultra.

  • Top 100 nhà sáng tạo mỗi khu vực
  • Thứ hạng, điểm (kim cương), trạng thái live, room ID
  • 44 khu vực trên toàn thế giới
  • Dữ liệu làm mới liên tục
Chỉ gói Ultra cho lập trình viên

Thứ hạng giải đấu

Dữ liệu thứ hạng cạnh tranh theo hạng (A1-D5) cho nhà sáng tạo thi đấu trong các giải đấu TikTok LIVE. Cho biết ai đang ở từng hạng tại bất kỳ khu vực nào. Cần gói Ultra cho lập trình viên. Agency PASS (tik.tools/vip) là gói đăng ký của website - cho quyền xem dữ liệu giải đấu trên website, không phải quyền truy cập API bằng code.

  • 18 hạng giải đấu: A1, A2, A3, B1, B2, B3, B4, B5, C1, C2, C3, C4, C5, D1, D2, D3, D4, D5
  • Danh sách xếp hạng theo từng hạng kèm trạng thái live
  • Bản xem trước có giới hạn cho các gói thấp hơn (5 mục)
  • Dữ liệu làm mới thường xuyên
Xác thực: Các endpoint này nằm trên tik.tools (không phải api.tik.tools) và dùng xác thực theo phiên đăng nhập. Hãy gọi chúng từ server với session cookie hợp lệ, có được khi đăng nhập tik.tools bằng tài khoản lập trình viên trả phí. Mọi gói lập trình viên trả phí (Basic, Pro, Ultra) đều dùng được các endpoint BXH theo khu vực. Endpoint giải đấu cần gói Ultra cho lập trình viên. Gói Agency PASS (tại tik.tools/vip) là sản phẩm riêng chỉ dành cho website - cho quyền xem dữ liệu giải đấu qua giao diện website tik.tools, không qua API lập trình viên này.

Bảng tra khu vực

Có 44 BXH theo khu vực. Dùng Slug trong URL endpoint BXH quốc gia, và Mã khu vực trong các endpoint giải đấu.

SlugMã khu vựcMô tả
north-americaUS+North America
canadaCACanada
brazil-regionBRBrazil
mexicoMXMexico
latin-americaLATAMLatin America
colombia-peru-dominican-republicCO+Colombia, Peru & Dominican Republic
jamaicaJMJamaica
australia-pacificAU+Australia & Pacific
japan-regionJPJapan
south-korea-regionKRSouth Korea
taiwan-regionTWTaiwan
indonesia-regionIDIndonesia
malaysia-regionMYMalaysia
singaporeSGSingapore
philippines-regionPHPhilippines
thailand-regionTHThailand
vietnam-regionVNVietnam
nepalNPNepal
bangladesh-bhutan-maldivesBD+Bangladesh, Bhutan & Maldives
azerbaijanAZAzerbaijan
kazakhstanKZKazakhstan
kyrgyzstanKGKyrgyzstan
belarusBYBelarus
ukraineUAUkraine
central-asiaCCACentral Asia
dachDE+Germany & DACH
switzerlandCHSwitzerland
iberiaES+Iberia
central-europeHU+Central Europe
lusophonePT+Lusophone
france-regionFR+France
belgiumBEBelgium
netherlands-regionNLNetherlands
united-kingdom-regionUK+United Kingdom
ireland-baltics-maltaIE+Ireland, Baltics & Malta
italy-regionIT+Italy
swedenSESweden
scandinaviaSE+Nordics
poland-regionPLPoland
romania-regionRORomania
balkansBKBalkans
turkey-regionTRTurkey
middle-east-africaMENAMiddle East & Africa
nigeria-ghana-kenya-south-africaNG+Nigeria, Ghana, Kenya & South Africa

Endpoint: BXH theo khu vực

GEThttps://tik.tools/api/leaderboards/country/:slugMọi gói trả phí

Trả về BXH top 100 của ngày hiện tại cho một khu vực. Các mục được sắp xếp theo score (tổng kim cương kiếm được hôm nay) giảm dần.

Tham số đường dẫn

Tham sốKiểuMô tả
slugstringSlug khu vực trong bảng tra khu vực ở trên (vd. balkans, north-america)

Cấu trúc phản hồi

TrườngKiểuMô tả
[].ranknumberVị trí trên BXH (1 = kiếm nhiều nhất)
[].uniqueIdstringUsername TikTok (không có @)
[].nicknamestringTên hiển thị trên TikTok
[].scorenumberTổng kim cương kiếm được hôm nay tại khu vực này
[].isLivebooleanNhà sáng tạo có đang phát live hay không
[].roomIdstring | nullRoom ID của phiên live nếu đang phát, nếu không thì null

Ví dụ phản hồi

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

Ví dụ code

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

Endpoint giải đấu

Cần gói Ultra. Endpoint giải đấu cần gói Ultra cho lập trình viên. Request từ gói Basic và Pro chỉ nhận bản xem trước 5 mục - trường hasFullAccess trong phản hồi sẽ là false và maskedCount cho biết có bao nhiêu mục bị ẩn. Lưu ý: gói Agency PASS (tik.tools/vip) cho quyền xem dữ liệu giải đấu trên website nhưng không phải gói đăng ký API cho lập trình viên.

4a. Liệt kê giải đấu của một khu vực

GEThttps://tik.tools/api/leaderboards/leagues/:regionChỉ Ultra

Liệt kê các hạng giải đấu hiện có của một khu vực, kèm số nhà sáng tạo trong từng hạng và thời điểm dữ liệu được cập nhật gần nhất.

Tham số đường dẫn

Tham sốKiểuMô tả
regionstringMã khu vực (vd. BK, BC, US+) trong bảng tra khu vực

Cấu trúc phản hồi

TrườngKiểuMô tả
[].classTypenumberMã hạng dạng số (xem bảng tra classType bên dưới)
[].classLabelstringTên hạng dễ đọc (vd. "A1", "B5")
[].countnumberSố nhà sáng tạo đang ở hạng này
[].updatedAtstringTimestamp ISO 8601 của lần làm mới dữ liệu gần nhất

Ví dụ phản hồi

[
  { "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. Lấy danh sách trong giải đấu

GEThttps://tik.tools/api/leaderboards/league/:region/:classTypeChỉ Ultra

Trả về danh sách xếp hạng nhà sáng tạo trong một hạng giải đấu cụ thể của một khu vực. Đây là endpoint chính để xây công cụ theo giải đấu và dashboard theo dõi nhà sáng tạo.

Tham số đường dẫn

Tham sốKiểuMô tả
regionstringMã khu vực (vd. BK, US+)
classTypenumberMã hạng dạng số (2000=A1, 1900=A2, 1100=B5, v.v.)

Cấu trúc phản hồi

TrườngKiểuMô tả
hasFullAccessbooleanTrue nếu gói của bạn có toàn quyền; false = chế độ xem trước (5 mục)
maskedCountnumberSố mục bị ẩn do giới hạn của gói (0 nếu hasFullAccess)
totalCountnumberTổng số nhà sáng tạo trong hạng này
entries[].ranknumberVị trí trong hạng này
entries[].userIdstringID người dùng TikTok dạng số (ID backend cố định, không bao giờ đổi)
entries[].uniqueIdstringUsername/handle TikTok không có @ (người dùng có thể đổi)
entries[].nicknamestringTên hiển thị (người dùng có thể đổi)
entries[].scorenumberKim cương kiếm được trong kỳ giải đấu hiện tại
entries[].isLivebooleanNhà sáng tạo có đang phát live hay không

Ví dụ phản hồi

{
  "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}`)
}

Bảng tra classType

Các hạng giải đấu ánh xạ giá trị classType dạng số sang các bậc thi đấu. A1 là hạng cao nhất - những nhà sáng tạo tinh hoa kiếm nhiều kim cương nhất. D5 là điểm khởi đầu khi vào giải đấu.

classTypeHạngMô tả
2000A1Hạng tinh hoa. Những người kiếm nhiều nhất khu vực. Cạnh tranh gắt nhất, yêu cầu kim cương cao nhất để giữ vị trí.
1900A2Hạng cao cấp. Nhà sáng tạo thu nhập cao, đã có chỗ đứng và đang nhắm lên A1.
1800A3Hạng A vững chắc. Những người kiếm nhiều đều đặn, giữ được vị trí trong nhóm tinh hoa.
1500B1Đỉnh nhóm B. Nhà sáng tạo chỉ còn một lần thăng hạng là vào nhóm A.
1400B2Hạng B trên. Những người kiếm tốt đang cạnh tranh lên B1.
1300B3Hạng B giữa. Những người kiếm ổn định ở giữa nhóm B.
1200B4Hạng B dưới. Nhà sáng tạo đang tiến lên các hạng B trên.
1100B5Cửa vào hạng B. Nhà sáng tạo có thu nhập mạnh và đều suốt kỳ giải đấu.
1000C1Đỉnh nhóm C. Những người kiếm tích cực đang tiến lên nhóm B.
900C2Hạng C trên. Những người kiếm vừa phải đang cạnh tranh lên C1.
800C3Hạng C giữa. Những người kiếm đều đặn ở giữa nhóm C.
700C4Hạng C dưới. Nhà sáng tạo đang leo lên các hạng C trên.
600C5Cửa vào hạng C. Vừa được thăng từ nhóm D.
500D1Đỉnh nhóm D. Nhà sáng tạo bắt đầu có thu nhập đáng kể trong khu vực.
400D2Hạng D trên. Người mới hoặc có thu nhập thấp hơn.
300D3Hạng D giữa. Nhà sáng tạo đang làm quen với giải đấu.
200D4Hạng D dưới. Những người mới bắt đầu kiếm trong giải đấu.
100D5Hạng khởi đầu. Điểm xuất phát cho nhà sáng tạo đủ điều kiện tham gia giải đấu.
Không phải khu vực nào cũng có đủ cả 18 hạng. Hãy gọi endpoint Liệt kê giải đấu trước để biết khu vực bạn nhắm tới có những hạng nào, rồi mới lấy hạng cụ thể bạn cần.

Ví dụ thực tế: Tìm mọi nhà sáng tạo A1 đang live ở Balkan

Ví dụ nhiều bước đầy đủ này cho thấy cách làm được khuyên dùng: tìm các hạng hiện có, chọn hạng bạn cần, lấy danh sách của hạng đó, rồi lọc ra nhà sáng tạo đang live. Áp dụng được cho mọi tổ hợp khu vực và hạng.

1
Lấy các giải đấu hiện có của khu vực BK (Balkan)
2
Tìm mục A1 và xác nhận nó tồn tại
3
Lấy danh sách giải đấu hạng A1
4
Lọc nhà sáng tạo có 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`)
}

Giới hạn tốc độ & cách làm tốt nhất

Cache phản hồi phía client

Vị trí trên BXH thay đổi dần dần. Hãy cache 10-30 giây trước khi lấy lại để không gọi API dồn dập không cần thiết.

Dữ liệu giải đấu làm mới theo lịch cố định

Bảng giải đấu thay đổi chậm, nên poll endpoint giải đấu dày hơn vài phút một lần chẳng được lợi gì.

Poll từng khu vực độc lập

Cả 44 khu vực đều có thể poll song song. Nếu cần dữ liệu nhiều khu vực, hãy gửi request đồng thời thay vì lần lượt.

Dùng isLive + roomId để kết nối

Khi isLive là true trên một mục BXH, bạn có thể mở WebSocket tới nhà sáng tạo đó ngay bằng uniqueId của họ và API key của bạn.

Lưu session cookie an toàn

Session cookie cho quyền truy cập tài khoản của bạn. Hãy lưu trong biến môi trường, không bao giờ để trong source code hay repository công khai.

Liệt kê giải đấu trước khi lấy danh sách

Không phải khu vực nào cũng có mọi hạng. Luôn gọi endpoint liệt kê trước để xác nhận khu vực bạn nhắm tới có những giá trị classType nào.

Câu hỏi thường gặp

Gói nào có quyền dùng API bảng xếp hạng?

Cần gì để truy cập dữ liệu thứ hạng giải đấu?

Dữ liệu bảng xếp hạng cập nhật bao lâu một lần?

Có bao nhiêu khu vực?

Có biết được nhà sáng tạo đang live hay không từ bảng xếp hạng không?

Khu vực của tôi không có đủ mọi giá trị classType. Vì sao?

Có thể poll cả 44 khu vực cùng lúc không?