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.
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
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
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.
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 AfricaEndpoint: BXH theo khu vực
https://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
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
[].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ì nullVí 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
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
https://tik.tools/api/leaderboards/leagues/:regionChỉ UltraLiệ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
regionstringMã khu vực (vd. BK, BC, US+) trong bảng tra khu vựcCấu trúc phản hồi
[].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ấtVí 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
https://tik.tools/api/leaderboards/league/:region/:classTypeChỉ UltraTrả 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
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
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àyentries[].ranknumberVị trí trong hạng nàyentries[].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ạientries[].isLivebooleanNhà sáng tạo có đang phát live hay khôngVí 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.
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.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.
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
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.
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ì.
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.
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.
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.
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.