Charts
TikTok's own leaderboards: the music charts, trending hashtags and searches, LIVE leaders and the top videos by market.
TikTok charts
TikTok's own leaderboards. sounds: the music chart (Top 50 or Viral 50; TikTok's chart, not per market). hashtags: trending hashtags in a market over 7, 30 or 90 days, with posts, views and a daily popularity curve (empty for PL, NL and IE). searches: trending search phrases TikTok's website shows. live: TikTok's LIVE leaderboard (daily gifts or LIVE sales), as TikTok's app serves it; not per market. videos: yesterday's top 100 videos in a market with views, organic views, engagement rate and 6-second view rate (TikTok has this list for US, JP, TH, ID and VN; other markets come back empty). Examples: {"method":"hashtags","region":"DE","period":"30"}, {"method":"sounds","chart":"viral"}.
/v1/charts/hashtagsTrending hashtags in a market (7, 30 or 90 days)
Parameters
- limitinteger
Results per page. sounds max 50, hashtags max 50, searches max 100, live max 100, videos max 100. Values above a method's maximum are lowered and reported in notes.
4 more optional parameters
- cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - periodstring
method=hashtags: last 7, 30 or 90 days (default 7).One of
73090 - regionstring
method=hashtagsor videos: market, one of US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX, PL, IT, NL, IE (default US).
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the charts tool with method: hashtags. Same data, same credit. MCP setup
{
"tool": "charts",
"arguments": {
"method": "hashtags",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/charts/hashtags?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/charts/hashtags",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/charts/hashtags?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"as_of": "2026-10-15",
"count": 3,
"has_more": true,
"items": [
{
"id": "7691443554018656263",
"name": "tiktokscaryhorrorcontest",
"popularity": [
[
"2026-10-09",
0
],
[
"2026-10-10",
49.96
],
[
"2026-10-11",
62.601
]
],
"posts": 73462,
"rank": 1,
"top_creators": [
{
"country": "US",
"followers": 116246,
"handle": "sadwds213s"
},
{
"country": "US",
"followers": 19261,
"handle": "dpaex.uxofj"
},
{
"country": "US",
"followers": 121772,
"handle": "y6f_7ur2ca8"
}
],
"views": 312182870
},
{
"id": "7462773581512966150",
"industry_ids": [
25000000000
],
"name": "marvelrivalsavengers",
"popularity": [
[
"2026-10-09",
95.543
],
[
"2026-10-10",
100
],
[
"2026-10-11",
9.725
]
],
"posts": 110088,
"rank": 2,
"top_creators": [
{
"country": "US",
"followers": 7222,
"handle": "cinnavry"
},
{
"country": "US",
"followers": 16364,
"handle": "zygote907"
},
{
"country": "US",
"followers": 361231,
"handle": "power.of.me.5"
}
],
"views": 24120743
},
{
"id": "7534678037321744414",
"industry_ids": [
23000000000
],
"name": "livecanbeeasy",
"popularity": [
[
"2026-10-09",
0
],
[
"2026-10-10",
4.117
],
[
"2026-10-11",
3.22
]
],
"posts": 21285,
"rank": 3,
"top_creators": [
{
"country": "US",
"followers": 32355,
"handle": "bigalgladiator"
},
{
"country": "US",
"followers": 369670,
"handle": "aesthetic_affairsx"
},
{
"country": "US",
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.as_ofstringdata.countintegerdata.has_morebooleandata.itemsarraydata.items[].idstringdata.items[].namestringdata.items[].popularityarraydata.items[].postsintegerdata.items[].rankintegerdata.items[].top_creatorsarraydata.items[].top_creators[].countrystringdata.items[].top_creators[].followersintegerdata.items[].top_creators[].handlestringdata.items[].viewsintegerdata.marketstringdata.nextstringdata.notesarraydata.period_daysintegerdata.see_alsoarraydata.sourcestringdata.totalintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/charts/liveLIVE leaderboard (daily gifts or sales)
Parameters
- limitinteger
Results per page. sounds max 50, hashtags max 50, searches max 100, live max 100, videos max 100. Values above a method's maximum are lowered and reported in notes.
3 more optional parameters
- boardstring
method=live: daily (gift points today, default) or sales (LIVE sales leaderboard).One of
dailysales - cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the charts tool with method: live. Same data, same credit. MCP setup
{
"tool": "charts",
"arguments": {
"method": "live",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/charts/live?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/charts/live",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/charts/live?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"as_of": "2026-10-30T23:27:15Z",
"board": "daily",
"count": 3,
"has_more": false,
"items": [
{
"followers": 10838,
"handle": "jaybastardo",
"nickname": "Jay Bastardo",
"rank": 1,
"score": 5388066,
"user_id": "6770557577682027526"
},
{
"followers": 1077302,
"handle": "nickthetraveler",
"nickname": "Nick ✈️",
"rank": 2,
"score": 3012043,
"user_id": "6791149056796574726"
},
{
"followers": 12567,
"handle": "destroyer.galaxy",
"nickname": "Destroyer",
"rank": 3,
"score": 1705220,
"user_id": "7582763175394870286"
}
],
"market": "as TikTok's app serves it (not per market)",
"notes": [
"score is the creator's gift points on TikTok's daily LIVE leaderboard.",
"room_id is present only while the creator is LIVE."
],
"resets_at": "2026-10-31T04:00:00Z",
"see_also": [
"creator id=@<items[].handle>",
"live id=<items[].room_id>"
],
"source": "tiktok_live"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.as_ofstringdata.boardstringdata.countintegerdata.has_morebooleandata.itemsarraydata.items[].followersintegerdata.items[].handlestringdata.items[].nicknamestringdata.items[].rankintegerdata.items[].scoreintegerdata.items[].user_idstringdata.marketstringdata.notesarraydata.resets_atstringdata.see_alsoarraydata.sourcestringmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/charts/searchesTrending search phrases
Parameters
- limitinteger
Results per page. sounds max 50, hashtags max 50, searches max 100, live max 100, videos max 100. Values above a method's maximum are lowered and reported in notes.
2 more optional parameters
- cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the charts tool with method: searches. Same data, same credit. MCP setup
{
"tool": "charts",
"arguments": {
"method": "searches",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/charts/searches?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/charts/searches",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/charts/searches?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"as_of": "2026-10-30T23:28:14Z",
"count": 3,
"has_more": true,
"items": [
{
"phrase": "Hyena makeup for Halloween trend",
"rank": 1
},
{
"phrase": "Waddup My Dawg meme trend",
"rank": 2
},
{
"phrase": "Fancy Footwork trend",
"rank": 3
}
],
"market": "TikTok website (not per market)",
"notes": [
"Phrases in the order TikTok's website lists them. They are not search volumes; use demand_find_topics for volume."
],
"see_also": [
"demand_find_topics keyword=<items[].phrase>",
"video_search keyword=<items[].phrase>"
],
"source": "tiktok_live"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.as_ofstringdata.countintegerdata.has_morebooleandata.itemsarraydata.items[].phrasestringdata.items[].rankintegerdata.marketstringdata.notesarraydata.see_alsoarraydata.sourcestringmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/charts/soundsTikTok's music chart (Top 50 or Viral 50)
Parameters
- limitinteger
Results per page. sounds max 50, hashtags max 50, searches max 100, live max 100, videos max 100. Values above a method's maximum are lowered and reported in notes.
3 more optional parameters
- chartstring
method=sounds: top (Top 50, default) or viral (Viral 50).One of
topviral - cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the charts tool with method: sounds. Same data, same credit. MCP setup
{
"tool": "charts",
"arguments": {
"method": "sounds",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/charts/sounds?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/charts/sounds",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/charts/sounds?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"as_of": "2026-10-29",
"chart": "top",
"count": 3,
"has_more": true,
"items": [
{
"album": "Kiss All The Time. Disco, Occasionally.",
"author": "Harry Styles",
"cleared_for_business": true,
"duration": 60,
"id": "7613798254214187009",
"original": false,
"rank": 1,
"release_date": "2026-03-06",
"title": "Coming Up Roses",
"trend": 4,
"videos": 209442
},
{
"album": "Housewife",
"author": "Tate McRae",
"cleared_for_business": true,
"duration": 36,
"id": "7697010651306838068",
"original": false,
"rank": 2,
"release_date": "2026-10-15",
"title": "Housewife",
"trend": 4,
"videos": 401171
},
{
"album": "Metropolitan",
"author": "Nova Charisma",
"cleared_for_business": true,
"duration": 60,
"id": "7370364561877321729",
"original": false,
"rank": 3,
"title": "Stolen From Each Other",
"trend": 4,
"videos": 8479
}
],
"market": "TikTok chart (not per market)",
"next": "eyJvZmZzZXQiOjN9",
"notes": [
"videos is TikTok's count of posts using the sound. cleared_for_business is TikTok's commercial-music flag. trend is TikTok's rank-movement code for the entry, passed on as TikTok sends it."
],
"see_also": [
"sound method=videos id=<items[].id>"
],
"source": "tiktok_live"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJvZmZzZXQiOjN9"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.as_ofstringdata.chartstringdata.countintegerdata.has_morebooleandata.itemsarraydata.items[].albumstringdata.items[].authorstringdata.items[].cleared_for_businessbooleandata.items[].durationintegerdata.items[].idstringdata.items[].originalbooleandata.items[].rankintegerdata.items[].release_datestringdata.items[].titlestringdata.items[].trendintegerdata.items[].videosintegerdata.marketstringdata.nextstringdata.notesarraydata.see_alsoarraydata.sourcestringmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/charts/videosYesterday's top 100 videos in a market
Parameters
- limitinteger
Results per page. sounds max 50, hashtags max 50, searches max 100, live max 100, videos max 100. Values above a method's maximum are lowered and reported in notes.
3 more optional parameters
- cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - regionstring
method=hashtagsor videos: market, one of US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX, PL, IT, NL, IE (default US).
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the charts tool with method: videos. Same data, same credit. MCP setup
{
"tool": "charts",
"arguments": {
"method": "videos",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/charts/videos?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/charts/videos",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/charts/videos?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"as_of": "2026-10-29",
"count": 3,
"has_more": true,
"items": [
{
"cover": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/ogejjeAR8AEFQ7CvAMjVT3EDFQIqWIAHeiAIxD~tplv-tiktokx-origin.image?dr=9643&nonce=16187&refresh_token=454bd0fc425e4d6eb7d33033b05b8307&x-expires=1794006000&x-signature=OA1Xa3cs34T6Wn6EvilVDkTQ4iM%3D&idc=useast5&ps=13740610&shcp=89439a58&sh…",
"created": "2026-09-10",
"engagement_rate": 0.001279374872518347,
"followers": 17082381,
"handle": "fefe",
"id": "7684011124739656991",
"nickname": "Fefe",
"organic_views": 1898401,
"rank": 1,
"six_second_view_rate": 0.02428703324049609,
"title": "Existe combinação mais perfeita do que RUFFLES®️ e um bom filme? Impossível! Todo filme pede aquela crocância única para entrar no clima. 🎬✨ @br_ruffles #publicidade #Ruffles #DêPlayNaSuaOnda",
"views": 32906696
},
{
"cover": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/ocK3E0iPwBkRoAA5XXAPvCEAiBoiaIcqlA9Cp~tplv-tiktokx-origin.image?dr=9643&nonce=94514&refresh_token=524b401cbb1fe7da2608837e4330079b&x-expires=1794006000&x-signature=TUYs89H5VNGFHB%2FB0vea2XXXv%2Fk%3D&idc=useast5&ps=13740610&shcp=89439a58…",
"created": "2026-08-26",
"engagement_rate": 0.0018894018055804198,
"followers": 250572,
"handle": "megannco",
"id": "7678479724896587038",
"nickname": "Meg Ann Co.",
"organic_views": 2735418,
"rank": 2,
"six_second_view_rate": 0.0342646857694568,
"title": "Five years ago, I started my small business with no idea what it would grow into. From working out of my parents’ spare room to now having my own commercial space, @Shopify has been there every step of the way! Having the freedom to build a storefront that actually feels like my brand, from the fo…",
"views": 31280800
},
{
"cover": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/oEIAYqIEfCBAwgRNg9QAFFEDgMDDorAQmfEyGS~tplv-tiktokx-origin.image?dr=9643&nonce=55110&refresh_token=9727c5cb391721576eb26f7bc667c835&x-expires=1794006000&x-signature=qLkSy%2BBIhbNo%2FreeaceACf18570%3D&idc=useast5&ps=13740610&shcp=89439a58…",
"created": "2026-09-17",
"engagement_rate": 0.0005375644554008684,
"followers": 75381,
"handle": "pierrahh",
"id": "7686545222628658446",
"nickname": "pierrah",
"organic_views": 446268,
"rank": 3,
"six_second_view_rate": 0.011719839544846095,
"title": "#walmartpartner runway silhouettes sourced at a cute price point. shop for your fall wardrobe @Walmart",
"views": 24601701
}
],
"market": "US",
"next": "eyJwYWdlIjoyfQ",
"notes": [
"TikTok's daily top-videos list for US, day ending 2026-10-29 UTC. views and organic_views are for that day; rates are fractions (0.012 = 1.2%)."
],
"see_also": [
"video id=<items[].id>"
],
"source": "tiktok_live",
"total": 100
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJwYWdlIjoyfQ"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.as_ofstringdata.countintegerdata.has_morebooleandata.itemsarraydata.items[].coverstringdata.items[].createdstringdata.items[].engagement_ratenumberdata.items[].followersintegerdata.items[].handlestringdata.items[].idstringdata.items[].nicknamestringdata.items[].organic_viewsintegerdata.items[].rankintegerdata.items[].six_second_view_ratenumberdata.items[].titlestringdata.items[].viewsintegerdata.marketstringdata.nextstringdata.notesarraydata.see_alsoarraydata.sourcestringdata.totalintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503