개발자 가이드

랭킹 & 리그 API

실시간 TikTok LIVE 랭킹 데이터. 44개 지역의 일간 순위를 받고, 실시간 리그 등급 데이터를 조회하고, 크리에이터 성과를 모니터링하세요.

모든 유료 요금제 ULTRA 전용 - 리그

개요

TikTool은 tik.tools의 웹사이트 API로 두 종류의 랭킹 데이터를 제공해요. 두 엔드포인트 모두 TikTok LIVE 크리에이터의 실시간 경쟁 순위 데이터를 다이아몬드 수익순으로 정렬해 반환해요.

모든 유료 요금제

지역별 랭킹

받은 총 다이아몬드 기준 상위 100명 크리에이터의 일간 순위를 지역별로 나눠 보여 줘요. 하루 종일 계속 업데이트돼요. Basic, Pro, Ultra 구독자가 이용할 수 있어요.

  • 지역별 상위 100명 크리에이터
  • 순위, 점수(다이아몬드), 라이브 상태, 방 ID
  • 전 세계 44개 지역
  • 데이터 상시 갱신
Ultra 개발자 요금제 전용

리그 순위

TikTok LIVE 리그에서 경쟁하는 크리에이터의 등급별 순위 데이터(A1-D5)예요. 어느 지역이든 각 등급에 누가 있는지 보여 줘요. 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 아님) 세션 기반 인증을 써요. 유료 개발자 계정으로 tik.tools에 로그인해서 얻은 유효한 세션 쿠키를 넣어 서버에서 호출하세요. 모든 유료 개발자 요금제(Basic, Pro, Ultra)는 지역별 랭킹 엔드포인트를 쓸 수 있어요. 리그 엔드포인트는 Ultra 개발자 요금제 전용이에요. Agency PASS 구독(tik.tools/vip)은 웹사이트 전용 상품이라 이 개발자 API가 아니라 tik.tools 웹사이트 화면에서 리그 데이터를 볼 수 있게 해 줘요.

지역 참고표

지역별 랭킹 44개를 제공해요. 국가별 랭킹 엔드포인트 URL에는 슬러그 값을, 리그 엔드포인트에는 지역 코드 값을 쓰세요.

슬러그지역 코드설명
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

엔드포인트: 지역별 랭킹

GEThttps://tik.tools/api/leaderboards/country/:slug모든 유료 요금제

지역의 오늘 상위 100명 랭킹을 반환해요. 항목은 score 값(오늘 받은 총 다이아몬드) 기준 내림차순으로 정렬돼요.

경로 파라미터

파라미터타입설명
slugstring위 지역 참고표의 지역 슬러그 (예: balkans, north-america)

응답 스키마

필드타입설명
[].ranknumber랭킹 순위 (1 = 수익 1위)
[].uniqueIdstringTikTok 사용자 이름 (@ 제외)
[].nicknamestringTikTok에 표시되는 닉네임
[].scorenumber이 지역에서 오늘 받은 총 다이아몬드
[].isLiveboolean크리에이터가 지금 라이브 중인지 여부
[].roomIdstring | null방송 중이면 라이브 방 ID, 아니면 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]' : ''}`)
}

리그 엔드포인트

Ultra 필요. 리그 엔드포인트는 Ultra 개발자 요금제 전용이에요. Basic, Pro 요금제 요청은 5개 항목 미리보기만 받아요. 응답의 hasFullAccess 필드는 false 값이 되고, maskedCount 필드에 숨겨진 항목 수가 표시돼요. 참고: Agency PASS 구독(tik.tools/vip)은 웹사이트에서 리그 데이터를 볼 수 있게 해 주지만 개발자 API 구독은 아니에요.

4a. 지역별 리그 목록

GEThttps://tik.tools/api/leaderboards/leagues/:regionUltra 전용

지정한 지역에서 이용 가능한 리그 등급 목록을 보여 줘요. 등급별 크리에이터 수와 마지막 데이터 업데이트 시각도 포함돼요.

경로 파라미터

파라미터타입설명
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. 리그 항목 조회

GEThttps://tik.tools/api/leaderboards/league/:region/:classTypeUltra 전용

지역의 특정 리그 등급에 속한 크리에이터 순위 목록을 반환해요. 리그 기반 도구와 크리에이터 모니터링 대시보드를 만들 때 쓰는 핵심 엔드포인트예요.

경로 파라미터

파라미터타입설명
regionstring지역 코드 (예: BK, US+)
classTypenumber숫자형 등급 식별자 (2000=A1, 1900=A2, 1100=B5 등)

응답 스키마

필드타입설명
hasFullAccessboolean요금제에 전체 접근 권한이 있으면 true, false면 미리보기 모드 (5개 항목)
maskedCountnumber요금제 제한으로 숨겨진 항목 수 (hasFullAccess 상태면 0)
totalCountnumber이 등급의 전체 크리에이터 수
entries[].ranknumber이 등급 안에서의 순위
entries[].userIdstringTikTok 숫자형 사용자 ID (바뀌지 않는 고정 백엔드 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 등급은 리그 경쟁의 시작점이에요.

classType등급설명
2000A1엘리트 등급. 지역 최고 수익 크리에이터. 경쟁이 가장 치열하고 배치에 필요한 다이아몬드도 가장 많아요.
1900A2상급 등급. A1 승급을 노리는 고수익 크리에이터.
1800A3안정적인 A등급. 엘리트권을 꾸준히 지키는 고수익 크리에이터.
1500B1B등급 최상위. A 디비전까지 승급 한 번 남은 크리에이터.
1400B2B등급 상위. B1을 놓고 경쟁하는 탄탄한 수익 크리에이터.
1300B3B등급 중위. B등급 중간에서 꾸준히 수익을 내는 크리에이터.
1200B4B등급 하위. 상위 B 디비전을 향해 올라가는 크리에이터.
1100B5B등급 입문. 리그 기간 내내 꾸준하고 탄탄한 수익을 낸 크리에이터.
1000C1C등급 최상위. B등급을 향해 성장 중인 활발한 크리에이터.
900C2C등급 상위. C1 승급을 놓고 경쟁하는 중간 수익 크리에이터.
800C3C등급 중위. C등급 중간에서 꾸준히 수익을 내는 크리에이터.
700C4C등급 하위. 상위 C 디비전을 향해 올라가는 크리에이터.
600C5C등급 입문. 최근 D등급에서 승급한 크리에이터.
500D1D등급 최상위. 지역에서 본격적으로 수익을 내기 시작한 크리에이터.
400D2D등급 상위. 신규 또는 수익 규모가 작은 크리에이터.
300D3D등급 중위. 리그 경쟁에 자리 잡는 중인 크리에이터.
200D4D등급 하위. 리그 초반 단계의 크리에이터.
100D5입문 리그. 리그 참가 자격을 얻은 크리에이터의 출발점.
18개 디비전이 모든 지역에 다 있는 건 아니에요. 먼저 리그 목록 엔드포인트를 호출해 대상 지역에 어떤 등급이 있는지 확인한 뒤, 필요한 등급을 조회하세요.

실전 예제: 발칸 지역에서 지금 방송 중인 A1 크리에이터 모두 찾기

권장 패턴을 보여 주는 전체 다단계 예제예요. 이용 가능한 등급을 확인하고, 필요한 등급을 찾고, 항목을 가져온 다음, 라이브 중인 크리에이터만 걸러 내요. 어떤 지역과 등급 조합에도 똑같이 쓸 수 있어요.

1
BK(발칸) 지역의 이용 가능한 리그 가져오기
2
A1 항목을 찾아 존재하는지 확인
3
A1 리그 항목 가져오기
4
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`)
}

속도 제한 & 모범 사례

응답은 클라이언트에서 캐시하기

랭킹 순위는 천천히 바뀌어요. 불필요하게 API를 두드리지 않도록 10-30초 동안 캐시한 뒤 다시 가져오세요.

리그 데이터는 정해진 일정에 따라 갱신

리그 보드는 천천히 바뀌기 때문에, 리그 엔드포인트를 몇 분에 한 번보다 자주 폴링해도 이득이 없어요.

지역별로 따로 폴링하기

44개 지역 전체를 병렬로 폴링할 수 있어요. 여러 지역 데이터가 필요하면 순서대로 말고 동시에 요청을 보내세요.

isLive + roomId 활용해 연결하기

랭킹 항목의 isLive 값이 true면 해당 크리에이터의 uniqueId 값과 내 API 키로 바로 WebSocket을 열 수 있어요.

세션 쿠키는 안전하게 보관하기

세션 쿠키가 있으면 내 계정에 접근할 수 있어요. 소스 코드나 공개 저장소가 아니라 환경 변수에 보관하세요.

항목을 가져오기 전에 리그 목록부터

모든 등급이 모든 지역에 있는 건 아니에요. 항상 목록 엔드포인트를 먼저 호출해서 대상 지역에서 쓸 수 있는 classType 값을 확인하세요.

자주 묻는 질문

어떤 요금제에 랭킹 API 접근이 포함되나요?

리그 순위 데이터에 접근하려면 무엇이 필요한가요?

랭킹 데이터는 얼마나 자주 업데이트되나요?

몇 개 지역을 이용할 수 있나요?

랭킹에서 크리에이터가 지금 라이브 중인지 알 수 있나요?

내 지역에 classType 값이 전부 나오지 않아요. 왜 그런가요?

44개 지역을 한 번에 전부 폴링할 수 있나요?