Categories
TikTok Shop categories ranked by revenue and growth, the category tree with ids, and a category's top products.
TikTok Shop category trends
Shop AnalyticsThe top TikTok Shop categories by estimated revenue over the last 7 days of data: revenue, units, growth, revenue per shop, top-3 and top-10 shop share, split by video, LIVE and affiliate. method=tree lists category names and ids (pass them as category to product_top_selling or creator_top_selling); method=products gives a category's top product ids; method=market_size counts what the source tracks in a market, not all of TikTok Shop. region picks the market (default US). Example: {"method":"tree","keyword":"skincare"}.
/v1/categories/market-sizeHow many products, shops, creators, videos, LIVEs and brands the source tracks
Parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- regionstring
Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See
shop_regions. - startstring
Shop Analytics methods: custom range start, YYYY-MM-DD.
- windowstring
Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range.
One of
7d30d90d180d365d
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the category_trends tool with method: market_size. Same data, same credit. MCP setup
{
"tool": "category_trends",
"arguments": {
"method": "market_size"
}
}Request
curl "https://api.tokconnect.com/v1/categories/market-size" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/categories/market-size",
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const res = await fetch("https://api.tokconnect.com/v1/categories/market-size", {
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": {
"counts": {
"brands": 21214,
"creators": 277023,
"livestreams": 191201,
"products": 1041879,
"shops": 114343,
"videos": 1441803
},
"dataEnd": "2026-10-28",
"market": "US",
"notes": [
"Market US (United States)."
],
"scope": "Totals tracked by the data source in this market, not all of TikTok Shop. They size the source's own coverage (items it follows), not sales, and not every seller, creator or video on TikTok.",
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price."
},
"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.countsobjectdata.counts.brandsintegerdata.counts.creatorsintegerdata.counts.livestreamsintegerdata.counts.productsintegerdata.counts.shopsintegerdata.counts.videosintegerdata.dataEndstringdata.marketstringdata.notesarraydata.scopestringdata.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/categories/productsA category's top product ids (US market only)
Parameters
- categorystring
method=products: category name exactly asmethod=listreturns it (cate_id), e.g. 'Beauty & Personal Care'.
5 more optional parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- regionstring
Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See
shop_regions. - startstring
Shop Analytics methods: custom range start, YYYY-MM-DD.
- windowstring
Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range.
One of
7d30d90d180d365d
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the category_trends tool with method: products. Same data, same credit. MCP setup
{
"tool": "category_trends",
"arguments": {
"method": "products",
"category": "Beauty & Personal Care"
}
}Request
curl "https://api.tokconnect.com/v1/categories/products?category=Beauty%20%26%20Personal%20Care" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/categories/products",
params={
"category": "Beauty & Personal Care",
},
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({
category: "Beauty & Personal Care",
});
const res = await fetch(`https://api.tokconnect.com/v1/categories/products?${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": {
"category": "Beauty & Personal Care",
"currency": "USD",
"dataEnd": "2026-10-28",
"groups": [
{
"cate_id": "Beauty & Personal Care",
"product": [
{
"id": "1732738686074327162"
},
{
"id": "1732738538912714757"
},
{
"id": "1732052189676081387"
}
]
}
],
"market": "US",
"notes": [
"Market US (United States): amounts are in USD."
],
"see_also": "Pass these ids to product method=sales with ids=[...] for revenue and units, or product_top_selling with a keyword for a full ranking.",
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price.",
"window": {
"days": 30,
"end": "2026-10-28",
"start": "2026-09-29"
}
},
"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.categorystringdata.currencystringdata.dataEndstringdata.groupsarraydata.groups[].cate_idstringdata.groups[].productarraydata.groups[].product[].idstringdata.marketstringdata.notesarraydata.see_alsostringdata.sourcestringdata.windowobjectdata.window.daysintegerdata.window.endstringdata.window.startstringmetaobjectmeta.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/categories/searchFind category names and ids by keyword
Parameters
- keywordstring
method=search: category name to look up in the data source, e.g. 'serum'.method=tree: text to find in category names, e.g. 'skincare'.
2 more optional parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - regionstring
Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See
shop_regions.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the category_trends tool with method: search. Same data, same credit. MCP setup
{
"tool": "category_trends",
"arguments": {
"method": "search",
"keyword": "lip oil"
}
}Request
curl "https://api.tokconnect.com/v1/categories/search?keyword=lip%20oil" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/categories/search",
params={
"keyword": "lip oil",
},
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({
keyword: "lip oil",
});
const res = await fetch(`https://api.tokconnect.com/v1/categories/search?${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": {
"currency": "USD",
"items": [
{
"id": 805640,
"name": "Kids' Fashion-Boys' Footwear-Slippers",
"score": 0
},
{
"id": 806536,
"name": "Kids' Fashion-Girls' Footwear-Slippers",
"score": 0
},
{
"id": 601374,
"name": "Shoes-Men's Shoes-Slippers",
"score": 0
}
],
"keyword": "lip oil",
"market": "US",
"notes": [
"Market US (United States): amounts are in USD."
],
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price."
},
"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.currencystringdata.itemsarraydata.items[].idintegerdata.items[].namestringdata.items[].scoreintegerdata.keywordstringdata.marketstringdata.notesarraydata.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/categories/topCategories with revenue, growth and concentration
Parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- levelstring
method=listor tree: keep only categories of this level (1 = top level, 3 = most specific).One of
123 - regionstring
Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See
shop_regions. - startstring
Shop Analytics methods: custom range start, YYYY-MM-DD.
- windowstring
Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range.
One of
7d30d90d180d365d
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the category_trends tool with method: list. Same data, same credit. MCP setup
{
"tool": "category_trends",
"arguments": {
"method": "list"
}
}Request
curl "https://api.tokconnect.com/v1/categories/top" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/categories/top",
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const res = await fetch("https://api.tokconnect.com/v1/categories/top", {
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": {
"count": 10,
"currency": "USD",
"dataEnd": "2026-10-28",
"items": [
{
"affiliate_revenue": "$72.32m",
"average_revenue": "$5.67k",
"cate_id": "Beauty & Personal Care",
"date_interval": "7d",
"id": "601450",
"level": "1",
"live_revenue": "$16.40m",
"name": "Beauty & Personal Care",
"revenue": "$89.73m",
"revenue_growth_rate": -0.1423943532521982,
"revenue_trend": [
1222082970,
1304434512,
1093114419
],
"self_promotion_revenue": "$7.23m",
"shop_number": 15829,
"shopping_mall_revenue": "$10.19m",
"showcase_revenue": "$12.93m",
"top_10_shop_revenue_ratio": 0.184013778054234,
"top_3_shop_revenue_ratio": 0.09835574995436176,
"video_revenue": "$60.40m"
},
{
"affiliate_revenue": "$59.36m",
"average_revenue": "$5.39k",
"cate_id": "Womenswear & Underwear",
"date_interval": "7d",
"id": "601152",
"level": "1",
"live_revenue": "$9.50m",
"name": "Womenswear & Underwear",
"revenue": "$73.80m",
"revenue_growth_rate": -0.21692984191843792,
"revenue_trend": [
946945250,
1094214841.5,
827028189
],
"self_promotion_revenue": "$7.17m",
"shop_number": 13701,
"shopping_mall_revenue": "$7.26m",
"showcase_revenue": "$10.49m",
"top_10_shop_revenue_ratio": 0.15677009265967165,
"top_3_shop_revenue_ratio": 0.07922574659084249,
"video_revenue": "$53.81m"
},
{
"affiliate_revenue": "$25.90m",
"average_revenue": "$2.66k",
"cate_id": "Sports & Outdoor",
"date_interval": "7d",
"id": "603014",
"level": "1",
"live_revenue": "$4.88m",
"name": "Sports & Outdoor",
"revenue": "$34.18m",
"revenue_growth_rate": -0.10448608774096589,
"revenue_trend": [
483660312,
505927939,
419452406
],
"self_promotion_revenue": "$3.31m",
"shop_number": 12859,
"shopping_mall_revenue": "$4.97m",
"showcase_revenue": "$6.87m",
"top_10_shop_revenue_ratio": 0.20453100930944212,
"top_3_shop_revenue_ratio": 0.11515856825031943,
"video_revenue": "$22.43m"
}
],
"market": "US",
"notes": [
"Market US (United States): amounts are in USD.",
"Category figures always cover the last 7 days of data (window below), whatever window you ask for. For a longer view of one category, rank its products with product_top_selling and a keyword."
],
"see_also": "Pass a row's cate_id as category to category_trends method=products for its top product ids.",
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price.",
"window": {
"days": 7,
"end": "2026-10-28",
"start": "2026-10-22"
}
},
"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.countintegerdata.currencystringdata.dataEndstringdata.itemsarraydata.items[].affiliate_revenuestringdata.items[].average_revenuestringdata.items[].cate_idstringdata.items[].date_intervalstringdata.items[].idstringdata.items[].levelstringdata.items[].live_revenuestringdata.items[].namestringdata.items[].revenuestringdata.items[].revenue_growth_ratenumberdata.items[].revenue_trendarraydata.items[].self_promotion_revenuestringdata.items[].shop_numberintegerdata.items[].shopping_mall_revenuestringdata.items[].showcase_revenuestringdata.items[].top_10_shop_revenue_rationumberdata.items[].top_3_shop_revenue_rationumberdata.items[].video_revenuestringdata.marketstringdata.notesarraydata.see_alsostringdata.sourcestringdata.windowobjectdata.window.daysintegerdata.window.endstringdata.window.startstringmetaobjectmeta.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/categories/treeCategory names and ids to use as category
Parameters
- limitinteger
method=tree: max categories to return (default 50).
3 more optional parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - keywordstring
method=search: category name to look up in the data source, e.g. 'serum'.method=tree: text to find in category names, e.g. 'skincare'. - levelstring
method=listor tree: keep only categories of this level (1 = top level, 3 = most specific).One of
123
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the category_trends tool with method: tree. Same data, same credit. MCP setup
{
"tool": "category_trends",
"arguments": {
"method": "tree",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/categories/tree?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/categories/tree",
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/categories/tree?${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": {
"count": 3,
"hasMore": true,
"items": [
{
"id": "600001",
"level": 1,
"name": "Home Supplies"
},
{
"id": "600024",
"level": 1,
"name": "Kitchenware"
},
{
"id": "600154",
"level": 1,
"name": "Textiles & Soft Furnishings"
}
],
"matched": 26,
"see_also": "Pass an id or name as category to product_top_selling or creator_top_selling. Names are the US English category names; ids are the source's own.",
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price."
},
"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.countintegerdata.hasMorebooleandata.itemsarraydata.items[].idstringdata.items[].levelintegerdata.items[].namestringdata.matchedintegerdata.see_alsostringdata.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