Products
Everything about one TikTok Shop product: live price and stock, sales, daily trend, the creators and videos selling it, and what reviews say. Plus the store as shoppers see it now.
One TikTok Shop product
Everything about one TikTok Shop product (id = product id or a Shop product link). Live from TikTok: page (price, SKUs and stock, rating, shop, and sold = TikTok's displayed lifetime units), reviews, related products, page videos. Shop Analytics, any market via region: sales, trend (daily), creators, video_sales, skus, analysis (highlights and attributes), conversion (creators promoting it and the share who sold), review_insights (complaints, praise, use cases; by_sku splits by variant). Examples: {"id":"1732052189676081387","method":"trend","window":"90d"}, {"ids":["1729...","1731..."],"method":"sales","region":"DE"}.
/v1/products/{id}Live price, SKUs and stock, sold, rating, shop
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
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 product tool with method: page. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "page",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226",
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/products/1731896769144001226", {
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": {
"categories": [
"Beauty & Personal Care",
"Makeup",
"Lipstick & Lip Gloss"
],
"currency": "USD",
"delivery": "3-day delivery",
"id": "1731896769144001226",
"moreFromShop": [
{
"brand": "Truly Beauty",
"currency": "USD",
"id": "1729389462563361482",
"price": 33,
"rating": 4.4,
"reviews": 9993,
"sellerId": "7495153913553128138",
"shop": "Truly Beauty",
"sold": 81325,
"title": "Glazed Donut Brightening Oil – Discoloration-Fighting Treatment – Brightens Dull, Uneven Skin with Vitamin E, Niacinamide & Hyaluronic Acid – Deeply Hydrates, Minimizes Ingrowns & Enhances Radiance on Legs, Underarms & Bikini Line – Vanilla Glaze Scent",
"url": "https://shop.tiktok.com/us/pdp/after-shave-oil-by-truly-beauty-glazed-donut-hydrating-serum/1729389462563361482"
},
{
"brand": "Truly Beauty",
"currency": "USD",
"id": "1729445990437982922",
"price": 33,
"rating": 4.5,
"reviews": 16603,
"sellerId": "7495153913553128138",
"shop": "Truly Beauty",
"sold": 150492,
"title": "Soft Serve After Shave Oil – Soothes Razor Burn and Redness with Peptides & Hyaluronic Acid – Increases Collagen Production – Prevents Ingrowns and Brightens Uneven Skin Tone for Smoother Legs, Underarms & Pubic Area – Strawberry Vanilla Scent",
"url": "https://shop.tiktok.com/us/pdp/after-shave-oil-by-truly-beauty-soft-serve-strawberry-vanilla-scent/1729445990437982922"
},
{
"brand": "Truly Beauty",
"currency": "USD",
"discount": "10%",
"id": "1729389546288747210",
"originalPrice": 33,
"price": 29.7,
"rating": 4.3,
"reviews": 9856,
"sellerId": "7495153913553128138",
"shop": "Truly Beauty",
"sold": 105758,
"title": "Jelly Booster Pigment Body Potion – Targeted Discoloration Treatment with Pomegranate & Vitamin B12 – Corrects Dark Spots, Hyperpigmentation & Acne Scars – Boosts Collagen and Renews Skin for a Smoother, Even Tone – Suitable for All Skin Types",
"url": "https://shop.tiktok.com/us/pdp/jelly-booster-body-potion-by-pomegranate-targets-hyperpigmentation-boosts-collagen/1729389546288747210"
}
],
"price": 13.92,
"rating": 4.5,
"relatedProducts": [
{
"brand": "Truly Beauty",
"currency": "USD",
"discount": "52%",
"id": "1731896769144001226",
"originalPrice": 29,
"price": 13.92,
"rating": 4.5,
"reviews": 14794,
"sellerId": "7495153913553128138",
"shop": "Truly Beauty",
"sold": 153726,
"title": "Hydrating Lip Gloss - High Shine & Tinted, Infused with Hyaluronic Acid, Jojoba Oil & Shea Butter",
"url": "https://shop.tiktok.com/us/pdp/hydrating-lip-gloss-high-shine-tinted-hyaluronic-acid/1731896769144001226"
},
{
"brand": "Colourpop Cosmetics LLC",
"currency": "USD",
"id": "1730162690572390449",
"price": 12.99,
"rating": 4.8,
"reviews": 4092,
"sellerId": "7495294719207180337",
"shop": "ColourPop Cosmetics",
"sold": 45759,
"title": "ColourPop Fresh Kiss Glossy Balm - Peptides & Hyaluronic Acid",
"url": "https://shop.tiktok.com/us/pdp/glossy-lip-balm-by-colourpop-fresh-kiss-with-peptides-hyaluronic-acid/1730162690572390449"
},
{
"brand": "Laneige",
"currency": "USD",
"id": "1729424048269136205",
"price": 24.7,
"rating": 4.8,
"reviews": 2000,
"sellerId": "7495286718562273613",
"shop": "Laneige US",
"sold": 6367,
"title": "Laneige Lip Glowy Balm, Hydrating and Glossy Tinted Lip Care with Shea Butter, Korean Skincare, Lightweight Moisturizer",
"url": "https://shop.tiktok.com/us/pdp/lip-glowy-balm-by-laneige-us-moisture-rich-hydrating-treatment/1729424048269136205"
}
],
"reviews": 14794,
"sellerId": "7495153913553128138",
"shop": "Truly Beauty",
"shopInfo": {
"name": "Truly Beauty",
"products": 49,
"rating": 4.4,
"sellerId": "7495153913553128138",
"sold": 1786361
},
"skus": [
{
"id": "1731896802257769162",
"inStock": true,
"price": 13.92,
"variant": "Soft Serve"
},
{
"id": "1731896802257834698",
"inStock": true,
"price": 13.92,
"variant": "Glazed Donut"
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.categoriesarraydata.currencystringdata.deliverystringdata.idstringdata.moreFromShoparraydata.moreFromShop[].brandstringdata.moreFromShop[].currencystringdata.moreFromShop[].idstringdata.moreFromShop[].priceintegerdata.moreFromShop[].ratingnumberdata.moreFromShop[].reviewsintegerdata.moreFromShop[].sellerIdstringdata.moreFromShop[].shopstringdata.moreFromShop[].soldintegerdata.moreFromShop[].titlestringdata.moreFromShop[].urlstringdata.pricenumberdata.ratingnumberdata.relatedProductsarraydata.relatedProducts[].brandstringdata.relatedProducts[].currencystringdata.relatedProducts[].discountstringdata.relatedProducts[].idstringdata.relatedProducts[].originalPriceintegerdata.relatedProducts[].pricenumberdata.relatedProducts[].ratingnumberdata.relatedProducts[].reviewsintegerdata.relatedProducts[].sellerIdstringdata.relatedProducts[].shopstringdata.relatedProducts[].soldintegerdata.relatedProducts[].titlestringdata.relatedProducts[].urlstringdata.reviewsintegerdata.sellerIdstringdata.shopstringdata.shopInfoobjectdata.shopInfo.namestringdata.shopInfo.productsintegerdata.shopInfo.ratingnumberdata.shopInfo.sellerIdstringdata.shopInfo.soldintegerdata.skusarraydata.skus[].idstringdata.skus[].inStockbooleandata.skus[].pricenumberdata.skus[].variantstringdata.soldintegerdata.titlestringdata.urlstringdata.videosarraydata.videos[].captionstringdata.videos[].creatorIdstringdata.videos[].creatorNamestringdata.videos[].durationSecnumberdata.videos[].earnsCommissionbooleandata.videos[].likesintegerdata.videos[].postedstringdata.videos[].videoIdstringdata.videos[].viewsintegermetaobjectmeta.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/products/{id}/analysisSelling-point highlights and attributes the source extracts for the product
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
7 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: analysis. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "analysis",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/analysis" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/analysis",
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/products/1731896769144001226/analysis", {
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": {
"analysis": {
"attributes": [
{
"key": "Skin Type",
"value": "All Skin Types"
},
{
"key": "Region Of Origin",
"value": "US"
},
{
"key": "Product Form",
"value": "Liquid"
}
],
"highlights": [
{
"key_word": "Lasting Hydration",
"region_text": "Lasting Hydration: Lips stay soft, smooth, and quenched for hours."
},
{
"key_word": "High-Shine Finish",
"region_text": "High-Shine Finish: Glossy, light-catching lips that feel luxurious."
},
{
"key_word": "Instant Relief",
"region_text": "Instant Relief: Dry, chapped lips feel soothed from the first swipe."
}
]
},
"dataEnd": "2026-10-28",
"id": "1731896769144001226",
"market": "US",
"notes": [
"Market US (United States)."
],
"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.analysisobjectdata.analysis.attributesarraydata.analysis.attributes[].keystringdata.analysis.attributes[].valuestringdata.analysis.highlightsarraydata.analysis.highlights[].key_wordstringdata.analysis.highlights[].region_textstringdata.dataEndstringdata.idstringdata.marketstringdata.notesarraydata.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/products/{id}/conversionHow many creators promote it and what share of them made sales
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
7 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: conversion. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "conversion",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/conversion" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/conversion",
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/products/1731896769144001226/conversion", {
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": {
"conversion": {
"creatorConversionRatio": 0.47589952477936187,
"creatorNum": 1473
},
"creatorConversionPercent": 47.6,
"creatorConversionRatio": 0.47589952477936187,
"creators": 1473,
"dataEnd": "2026-10-28",
"id": "1731896769144001226",
"market": "US",
"notes": [
"Market US (United States).",
"creatorConversionRatio is the source's share of the creators promoting this product who made a sale in the window, as a fraction (0.59 means 59%)."
],
"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.conversionobjectdata.conversion.creatorConversionRationumberdata.conversion.creatorNumintegerdata.creatorConversionPercentnumberdata.creatorConversionRationumberdata.creatorsintegerdata.dataEndstringdata.idstringdata.marketstringdata.notesarraydata.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/products/{id}/creatorsCreators selling it, ranked, with revenue
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
7 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: creators. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "creators",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/creators" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/creators",
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/products/1731896769144001226/creators", {
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": 20,
"currency": "USD",
"dataEnd": "2026-10-28",
"hasMore": true,
"id": "1731896769144001226",
"items": [
{
"followers": 23600,
"handle": "therealsiahhh",
"id": "6790832707742417925",
"live_revenue": "$0.00",
"nickname": "Shopping is my therapy",
"revenue": "$58.12k",
"sale": "7.27k",
"video_revenue": "$58.12k"
},
{
"followers": 19400,
"handle": "xoxopeta",
"id": "7384276485555094570",
"live_revenue": "$0.00",
"nickname": "Peta🎀",
"revenue": "$37.02k",
"sale": "4.63k",
"video_revenue": "$37.02k"
},
{
"followers": 17400,
"handle": "swishybeauty",
"id": "6672578604607685638",
"live_revenue": "$0.00",
"nickname": "swishybeauty",
"revenue": "$36.01k",
"sale": "4.5k",
"video_revenue": "$36.01k"
}
],
"market": "US",
"next": "eyJwYWdlIjoyLCJzaXplIjoyMH0",
"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.",
"window": {
"days": 30,
"end": "2026-10-28",
"start": "2026-09-29"
}
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJwYWdlIjoyLCJzaXplIjoyMH0"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.countintegerdata.currencystringdata.dataEndstringdata.hasMorebooleandata.idstringdata.itemsarraydata.items[].followersintegerdata.items[].handlestringdata.items[].idstringdata.items[].live_revenuestringdata.items[].nicknamestringdata.items[].revenuestringdata.items[].salestringdata.items[].video_revenuestringdata.marketstringdata.nextstringdata.notesarraydata.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/products/{id}/review-insightsAI summary of reviews: pain points, praise, use cases (by_sku splits by variant)
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
8 more optional parameters
- by_skuboolean
method=review_insights: split insights by SKU.Default
false - 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: review_insights. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "review_insights",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/review-insights" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/review-insights",
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/products/1731896769144001226/review-insights", {
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": {
"dataEnd": "2026-10-28",
"id": "1731896769144001226",
"insights": {
"badRate": "11.0%",
"commentSummary": "This lip gloss is praised for its hydrating, non-sticky texture, beautiful range of colors, high shine, and appealing packaging. Many users highlight its smooth application and lightweight feel. However, a significant number of customers are dissatisfied with the product quantity, noting that tubes …",
"goodRate": "89.0%",
"painPoints": [
{
"point": "Tube is half-empty or missing product",
"quotes": [
{
"date": "2026/04/10",
"rating": "1.0",
"sku": "Coco Cloud",
"text": "I don't know if it's air in the tube that prevents them from filling the tube but I feel like I got robbed! The tube is already small but its only filled half way. My lips did feel moisturized...they felt wet! 0 out of 10. I do NOT recommen..."
},
{
"date": "2026/04/10",
"rating": "1.0",
"sku": "Soft Serve",
"text": "I don't know if it's air in the tube that prevents them from filling the tube but I feel like I got robbed! The tube is already small but its only filled half way. My lips did feel moisturized...they felt wet! 0 out of 10! I do NOT recommen..."
}
],
"rate": "28.33%",
"reviews": 17
},
{
"point": "Short wear time / doesn't last",
"quotes": [
{
"date": "2026/04/13",
"rating": "5.0",
"sku": "Coco Cloud",
"text": "Goes on real cute but for some reason I have reapply often even though it's thick."
},
{
"date": "2026/04/13",
"rating": "5.0",
"sku": "Vanilla Baby",
"text": "Goes on real cute but for some reason I have reapply often even though it's thick."
}
],
"rate": "18.33%",
"reviews": 11
},
{
"point": "Product leaks or explodes upon opening",
"quotes": [
{
"date": "2026/04/13",
"rating": "1.0",
"sku": "Coco Cloud",
"text": "Lip gloss exploded the minute I opened it up. Lip gloss went everywhere. I will definitely not purchase again."
},
{
"date": "2026/04/13",
"rating": "1.0",
"sku": "Glazed Donut",
"text": "This literally exploded when I opened it. The lip gloss went everywhere. Will not purchase again. I ordered 4 and they all did this!"
}
],
"rate": "15.0%",
"reviews": 9
}
],
"positivePoints": [
{
"point": "Very hydrating and moisturizing",
"quotes": [
{
"date": "2026/04/10",
"rating": "5.0",
"sku": "Vanilla Baby",
"text": "This gloss is amazing! It is so hydrating and makes my lips feel great. I want to get every one they have now."
},
{
"date": "2026/04/11",
"rating": "5.0",
"sku": "Glazed Donut",
"text": "This is my new favorite lip gloss. The color is sheer and beautiful, but the best is how it feels. It's not at all sticky and feels so hydrating. I'm ordering more."
}
],
"rate": "22.47%",
"reviews": 20
},
{
"point": "Not sticky",
"quotes": [
{
"date": "2026/04/14",
"rating": "5.0",
"sku": "Coco Cloud",
"text": "Great gloss. Very shiney and not sticky"
},
{
"date": "2026/04/14",
"rating": "5.0",
"sku": "Coco Cloud",
"text": "Love these! Not sticky at all"
}
],
"rate": "20.22%",
"reviews": 18
},
{
"point": "Beautiful color options",
"quotes": [
{
"date": "2026/04/11",
"rating": "5.0",
"sku": "Soft Serve",
"text": "Love this color!! Perfect for my work desk! So soft !"
},
{
"date": "2026/04/11",
"rating": "5.0",
"sku": "Glazed Donut",
"text": "Love this gloss and the color is gorgeous!"
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.dataEndstringdata.idstringdata.insightsobjectdata.insights.badRatestringdata.insights.commentSummarystringdata.insights.goodRatestringdata.insights.painPointsarraydata.insights.painPoints[].pointstringdata.insights.painPoints[].quotesarraydata.insights.painPoints[].ratestringdata.insights.painPoints[].reviewsintegerdata.insights.positivePointsarraydata.insights.positivePoints[].pointstringdata.insights.positivePoints[].quotesarraydata.insights.positivePoints[].ratestringdata.insights.positivePoints[].reviewsintegerdata.insights.productRatingnulldata.insights.skuNamesarraydata.insights.usageFrequencyarraydata.insights.usageFrequency[].pointstringdata.insights.usageFrequency[].quotesarraydata.insights.usageFrequency[].ratestringdata.insights.usageFrequency[].reviewsintegerdata.insights.usageLocationarraydata.insights.usageLocation[].pointstringdata.insights.usageLocation[].quotesarraydata.insights.usageLocation[].ratestringdata.insights.usageLocation[].reviewsintegerdata.insights.usageScenariosarraydata.insights.usageScenarios[].pointstringdata.insights.usageScenarios[].quotesarraydata.insights.usageScenarios[].ratestringdata.insights.usageScenarios[].reviewsintegerdata.marketstringdata.notesarraydata.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/products/{id}/reviewsPublic reviews
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
8 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 - filterstring
method=reviews: all (default),with_mediaor verified.One of
allwith_mediaverified - limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- pageinteger
method=reviews: jump to this page (1-100). - 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. - sortstring
method=reviews: recommended (default) or newest.One of
recommendednewest - starsstring
method=reviews: star filter whenfilter=all.One of
all54321
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the product tool with method: reviews. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "reviews",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/reviews" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/reviews",
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/products/1731896769144001226/reviews", {
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": {
"hasMore": true,
"next": "eyJwYWdlX3N0YXJ0IjoyfQ",
"page": "reviews",
"reviews": [
{
"country": "US",
"id": "7689521632322307854",
"images": 4,
"posted": "2026-09-25T17:11:15Z",
"rating": 5,
"reviewer": "T**s C**",
"text": "The color pigment and texture is amazing. My favorite New lipgloss to wear. And keep in my purse to grab. Go get yours now!",
"variant": "Vanilla Baby",
"verifiedPurchase": true
},
{
"country": "US",
"id": "7689520290272118542",
"images": 4,
"posted": "2026-09-25T17:06:03Z",
"rating": 5,
"reviewer": "T**s C**",
"text": "Shipping was FREE and FAST! The product and packaging was just as described so run don’t walk to purchase. Already ordered my second batch of lipglosses.",
"variant": "Glazed Donut",
"verifiedPurchase": true
},
{
"country": "US",
"id": "7627673224491321102",
"images": 4,
"posted": "2026-04-12T01:08:26Z",
"rating": 5,
"reviewer": "J**8",
"text": "They both smell great . Coco cloud it Glades on smoothly. The shine is given rich glass . An number It not sticky at all",
"variant": "Coco Cloud",
"verifiedPurchase": true
}
],
"source": "https://shop.tiktok.com/us/pdp/1731896769144001226",
"totalReviews": 14794
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJwYWdlX3N0YXJ0IjoyfQ"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.nextstringdata.pagestringdata.reviewsarraydata.reviews[].countrystringdata.reviews[].idstringdata.reviews[].imagesintegerdata.reviews[].postedstringdata.reviews[].ratingintegerdata.reviews[].reviewerstringdata.reviews[].textstringdata.reviews[].variantstringdata.reviews[].verifiedPurchasebooleandata.sourcestringdata.totalReviewsintegermetaobjectmeta.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/products/{id}/salesRevenue, units, video/LIVE/showcase split, creator count, conversion (ids: up to 20 products)
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
8 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- idsarray of string
method=salesonly: up to 20 product ids in one call. - limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: sales. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "sales",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/sales" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/sales",
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/products/1731896769144001226/sales", {
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": {
"creatorConversion": {
"creatorConversionRatio": 0.47589952477936187,
"creatorNum": 1473
},
"currency": "USD",
"dataEnd": "2026-10-28",
"id": "1731896769144001226",
"market": "US",
"notes": [
"Market US (United States): amounts are in USD.",
"Part of this answer is missing because the data source did not answer: the Shop Analytics data source could not answer this request"
],
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price.",
"totals": {
"creatorConversionRatio": 0.47589952477936187,
"day_live_revenue": "$185.43",
"day_revenue": "$10.19k",
"day_sale": "1.27k",
"day_shopping_mall_revenue": "$4.00",
"day_video_revenue": "$10.00k",
"live_revenue": "$5.19k",
"original_live_revenue": 5192,
"original_revenue": 285280,
"original_shopping_mall_revenue": 112,
"original_video_revenue": 279976,
"related_creator_count": 702,
"revenue": "$285.28k",
"sale": "35.66k",
"shopping_mall_revenue": "$112.00",
"unit_price": "$8.00",
"video_revenue": "$279.98k"
},
"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.creatorConversionobjectdata.creatorConversion.creatorConversionRationumberdata.creatorConversion.creatorNumintegerdata.currencystringdata.dataEndstringdata.idstringdata.marketstringdata.notesarraydata.sourcestringdata.totalsobjectdata.totals.creatorConversionRationumberdata.totals.day_live_revenuestringdata.totals.day_revenuestringdata.totals.day_salestringdata.totals.day_shopping_mall_revenuestringdata.totals.day_video_revenuestringdata.totals.live_revenuestringdata.totals.original_live_revenueintegerdata.totals.original_revenueintegerdata.totals.original_shopping_mall_revenueintegerdata.totals.original_video_revenueintegerdata.totals.related_creator_countintegerdata.totals.revenuestringdata.totals.salestringdata.totals.shopping_mall_revenuestringdata.totals.unit_pricestringdata.totals.video_revenuestringdata.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/products/{id}/skusSales by variant (SKU)
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
7 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: skus. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "skus",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/skus" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/skus",
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/products/1731896769144001226/skus", {
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",
"dataEnd": "2026-10-28",
"id": "1731896769144001226",
"market": "US",
"notes": [
"Market US (United States): amounts are in USD."
],
"skus": {
"skus": [
{
"price_val": "$13.92",
"sales_proportion": 0.3527,
"sku_id": "1731896802257769162",
"sku_name": "Shade:Soft Serve",
"stock": 29142,
"stock_share_proportion": 0.5678
},
{
"price_val": "$13.92",
"sales_proportion": 0.2488,
"sku_id": "1731896802257834698",
"sku_name": "Shade:Glazed Donut",
"stock": 926,
"stock_share_proportion": 0.018
},
{
"price_val": "$13.92",
"sales_proportion": 0.2156,
"sku_id": "1731896802257900234",
"sku_name": "Shade:Vanilla Baby",
"stock": 20765,
"stock_share_proportion": 0.4046
}
],
"updated_at": "2026-09-24"
},
"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.currencystringdata.dataEndstringdata.idstringdata.marketstringdata.notesarraydata.skusobjectdata.skus.skusarraydata.skus.skus[].price_valstringdata.skus.skus[].sales_proportionnumberdata.skus.skus[].sku_idstringdata.skus.skus[].sku_namestringdata.skus.skus[].stockintegerdata.skus.skus[].stock_share_proportionnumberdata.skus.updated_atstringdata.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/products/{id}/trendDaily revenue and units (up to ~13 months)
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
7 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: trend. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "trend",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/trend" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/trend",
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/products/1731896769144001226/trend", {
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": {
"coverage": {
"days": 30,
"daysWithSales": 28,
"firstDayWithSales": "2026-09-29"
},
"currency": "USD",
"dataEnd": "2026-10-28",
"id": "1731896769144001226",
"market": "US",
"notes": [
"Market US (United States): amounts are in USD."
],
"series": [
{
"creatorConversionRatio": 0.2676923076923077,
"live_revenue": 120,
"partition_day": "2026-09-29",
"revenue": 4760,
"sale": 595,
"unit_price": 8,
"video_revenue": 4640
},
{
"creatorConversionRatio": 0,
"live_revenue": 0,
"partition_day": "2026-09-30",
"revenue": 0,
"sale": 0,
"unit_price": 8,
"video_revenue": 0
},
{
"creatorConversionRatio": 0,
"live_revenue": 0,
"partition_day": "2026-10-01",
"revenue": 0,
"sale": 0,
"unit_price": 8,
"video_revenue": 0
}
],
"source": "TokConnect Shop Analytics (TikTok Shop US). Revenue and units are estimates: units track TikTok's sold counter; revenue is units times listed price.",
"totals": {
"revenue": 285280,
"units": 35660
},
"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.coverageobjectdata.coverage.daysintegerdata.coverage.daysWithSalesintegerdata.coverage.firstDayWithSalesstringdata.currencystringdata.dataEndstringdata.idstringdata.marketstringdata.notesarraydata.seriesarraydata.series[].creatorConversionRationumberdata.series[].live_revenueintegerdata.series[].partition_daystringdata.series[].revenueintegerdata.series[].saleintegerdata.series[].unit_priceintegerdata.series[].video_revenueintegerdata.sourcestringdata.totalsobjectdata.totals.revenueintegerdata.totals.unitsintegerdata.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/products/{id}/video-salesVideos selling it, with revenue
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
7 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 - endstring
Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day).
- limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
- 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 product tool with method: video_sales. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "video_sales",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/video-sales" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/video-sales",
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/products/1731896769144001226/video-sales", {
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": 20,
"currency": "USD",
"dataEnd": "2026-10-28",
"hasMore": true,
"id": "1731896769144001226",
"items": [
{
"ad": 1,
"ads": 1,
"ai_video": 0,
"content_type": "video",
"create_time": "2026/09/29 17:49:11",
"description": "Obsessed with this #lipgloss #drylips #lipcombo ",
"duration": "37s",
"id": "7691077500054637838",
"original_duration": 37.867,
"revenue": "$24.90k",
"sale": "3.11k",
"views": "3.42m"
},
{
"ad": 1,
"ads": 1,
"ai_video": 0,
"content_type": "video",
"create_time": "2026/09/21 22:58:40",
"description": "Now this is how you do a high shine gloss!😍🤏🏽🫦✨#trulylipgloss #trulybeauty #lipgloss #tiktokshopstockup ",
"duration": "42s",
"id": "7688188610041957662",
"original_duration": 42.9,
"revenue": "$23.14k",
"sale": "2.89k",
"views": "3.3m"
},
{
"ad": 1,
"ads": 1,
"ai_video": 0,
"content_type": "video",
"create_time": "2026/09/28 22:42:36",
"description": "",
"duration": "41s",
"id": "7690782072524393759",
"original_duration": 41.145,
"revenue": "$20.91k",
"sale": "2.61k",
"views": "3.3m"
}
],
"market": "US",
"next": "eyJwYWdlIjoyLCJzaXplIjoyMH0",
"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.",
"window": {
"days": 30,
"end": "2026-10-28",
"start": "2026-09-29"
}
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJwYWdlIjoyLCJzaXplIjoyMH0"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.countintegerdata.currencystringdata.dataEndstringdata.hasMorebooleandata.idstringdata.itemsarraydata.items[].adintegerdata.items[].adsintegerdata.items[].ai_videointegerdata.items[].content_typestringdata.items[].create_timestringdata.items[].descriptionstringdata.items[].durationstringdata.items[].idstringdata.items[].original_durationnumberdata.items[].revenuestringdata.items[].salestringdata.items[].viewsstringdata.marketstringdata.nextstringdata.notesarraydata.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/products/{id}/videosThe videos on the product page (first page only)
Parameters
- idstringPathRequired
Product id (
products[].id) or a TikTok Shop product link.
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 - limitinteger
Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the product tool with method: videos. Same data, same credit. MCP setup
{
"tool": "product",
"arguments": {
"method": "videos",
"id": "1731896769144001226"
}
}Request
curl "https://api.tokconnect.com/v1/products/1731896769144001226/videos" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/products/1731896769144001226/videos",
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/products/1731896769144001226/videos", {
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": {
"hasMore": false,
"page": "product_videos",
"source": "pdp",
"videos": [
{
"caption": "The definition of a high shine gloss!😍🤏🏽🫦#trulylipgloss #trulybeauty #tiktokshopstockup #tiktokshopcreatorpicks #tiktokshopmothersday",
"creatorId": "7384276485555094570",
"creatorName": "Peta🎀",
"durationSec": 32.2,
"earnsCommission": true,
"likes": 72013,
"posted": "2026-04-30T04:39:25Z",
"videoId": "7634407159618489630",
"views": 6015574
},
{
"caption": "shade: soft serve 🎀🍦 extra hydration with hyaluronic acid! 💦 @Truly Beauty #hyaluronicacid #lipgloss #lipcare #lipessentials #lippies",
"creatorId": "6807303228855305221",
"creatorName": "leah ♡",
"durationSec": 16.973,
"earnsCommission": true,
"likes": 66363,
"posted": "2025-12-14T08:40:54Z",
"videoId": "7583630601534672158",
"views": 2922982
},
{
"caption": "Trulys LIP GLOSS 💋✨ I need every single shade #tiktokshopcreatorpicks #tiktokshopmemorialday #ttsverticalpro #trulybeauty #lipgloss @Truly Beauty",
"creatorId": "6813360351690949637",
"creatorName": "ChavonSade🦋",
"durationSec": 18.134,
"earnsCommission": true,
"likes": 69809,
"posted": "2026-05-11T17:30:44Z",
"videoId": "7638687816909671694",
"views": 5151748
}
]
},
"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.hasMorebooleandata.pagestringdata.sourcestringdata.videosarraydata.videos[].captionstringdata.videos[].creatorIdstringdata.videos[].creatorNamestringdata.videos[].durationSecnumberdata.videos[].earnsCommissionbooleandata.videos[].likesintegerdata.videos[].postedstringdata.videos[].videoIdstringdata.videos[].viewsintegermetaobjectmeta.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
Browse TikTok Shop now
What a shopper sees on TikTok Shop (US store) right now: search results, keyword and category pages, deals and flash sales. Returns price, discount, displayed units sold, rating and shop. Displayed sold counts are lifetime and broad single-word searches can return only a short fallback list, so this is not a sales ranking: use product_top_selling for best sellers. Example: {"keyword":"lip oil","sort":"best_sellers"}.
/v1/storefront/category-pageA category page (category_id + slug)
Parameters
- category_idstring
method=category_page: category id from relatedCategories.
3 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. - slugstring
method=keyword_page: slug from relatedSearches (e.g. lip-oils);method=category_page: category slug.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the shop_browse tool with method: category_page. Same data, same credit. MCP setup
{
"tool": "shop_browse",
"arguments": {
"method": "category_page",
"category_id": "601450"
}
}Request
curl "https://api.tokconnect.com/v1/storefront/category-page?category_id=601450" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/storefront/category-page",
params={
"category_id": "601450",
},
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_id: "601450",
});
const res = await fetch(`https://api.tokconnect.com/v1/storefront/category-page?${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": {
"id": "601450",
"name": "Beauty & Personal Care",
"slug": "c"
},
"component_names": [
"user_info",
"page_header",
"bread_crumbs"
],
"hasMore": true,
"page": "category",
"products": [
{
"brand": "Gurunanda",
"currency": "USD",
"id": "1729388303591248135",
"price": 19.49,
"rating": 4.4,
"reviews": 97948,
"sellerId": "7495134783373216007",
"shop": "GuruNanda LLC",
"sold": 1536366,
"title": "GuruNanda Whitening Strips, 7-day treatment (7 Packets - 2 Strips per pack) - Non-Slip, Dry Strip Technology",
"url": "https://shop.tiktok.com/us/pdp/whitening-strips-by-gurunanda-for-sensitive-teeth-7-day-treatment-kit/1729388303591248135"
},
{
"brand": "Mad Rabbit",
"currency": "USD",
"id": "1729386349123571788",
"price": 26,
"rating": 4.5,
"reviews": 1145,
"sellerId": "7495157675807574092",
"shop": "Mad Rabbit",
"sold": 9929,
"title": "Mad Rabbit Tattoo Balm & Aftercare Cream- Color Enhancement that Revives Old Tattoos, Hydrates New Tattoos, Made With Clean Ingredients + Petroleum Free, Daily Tattoo Lotion Moisturizer & Brightener",
"url": "https://shop.tiktok.com/us/pdp/tattoo-balm-by-mad-rabbit-clean-vegan-aftercare-for-new-old-tattoos/1729386349123571788"
},
{
"brand": "tarte",
"currency": "USD",
"discount": "50%",
"id": "1729417067781002172",
"originalPrice": 93.6,
"price": 46.8,
"rating": 4.5,
"reviews": 13033,
"sellerId": "7495150597721263036",
"shop": "Tarte Cosmetics",
"sold": 228876,
"title": "tarte sculpt tape & blush tape duo - blush and bronzer",
"url": "https://shop.tiktok.com/us/pdp/sculpt-tape-blush-tape-duo-by-tarte-cosmetics-for-defined-cheeks/1729417067781002172"
}
],
"source": "https://shop.tiktok.com/us/c/c/601450"
},
"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.categoryobjectdata.category.idstringdata.category.namestringdata.category.slugstringdata.component_namesarraydata.hasMorebooleandata.pagestringdata.productsarraydata.products[].brandstringdata.products[].currencystringdata.products[].idstringdata.products[].pricenumberdata.products[].ratingnumberdata.products[].reviewsintegerdata.products[].sellerIdstringdata.products[].shopstringdata.products[].soldintegerdata.products[].titlestringdata.products[].urlstringdata.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/storefront/dealsThe deals feed
Parameters
- 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 shop_browse tool with method: deals. Same data, same credit. MCP setup
{
"tool": "shop_browse",
"arguments": {
"method": "deals"
}
}Request
curl "https://api.tokconnect.com/v1/storefront/deals" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/storefront/deals",
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/storefront/deals", {
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": {
"component_names": [
"user_info",
"page_header",
"bread_crumbs"
],
"hasMore": true,
"next": "eyJjdXJzb3IiOjQxfQ",
"page": "deals",
"path": "deals/recommended-for-you",
"products": [
{
"brand": "ZUY",
"currency": "USD",
"discount": "33%",
"id": "1732013337089577703",
"originalPrice": 35.99,
"price": 23.99,
"rating": 4.7,
"reviews": 5520,
"sellerId": "7496301427006606055",
"shop": "ZUY US",
"sold": 42272,
"title": "Unisex Zip Up Jackets Vintage Washed Coat Streetwear Hoodies Unisex Soft Material Casual Fashion Essential Tops for Men Day Womenswear",
"url": "https://shop.tiktok.com/us/pdp/vintage-washed-zip-up-jacket-unisex-soft-material-casual-style/1732013337089577703"
},
{
"brand": "Whyte",
"currency": "USD",
"discount": "51%",
"id": "1731573006366183970",
"originalPrice": 42.99,
"price": 20.88,
"rating": 3.6,
"reviews": 855,
"sellerId": "7495999835031243298",
"shop": "WHYTE",
"sold": 20445,
"title": "Whyte Purple Teeth Whitening Powder, Nano Hydroxyapate, PAP+, Xylitol. Sulfate Free Formula - Mint Flavor",
"url": "https://shop.tiktok.com/us/pdp/purple-teeth-whitening-powder-brighter-smile-today/1731573006366183970"
},
{
"brand": "TIRTIR",
"currency": "USD",
"discount": "27%",
"id": "1732154203314098778",
"originalPrice": 30,
"price": 21.83,
"rating": 4.6,
"reviews": 1887,
"sellerId": "7495857443730262618",
"shop": "TIRTIR Inc.",
"sold": 16270,
"title": "[TIRTIR Official] Seal the Deal Long-Wear Makeup Finishing Mist Setㅣ Mask Fit Waterproof Setting Spray 80ml & Mask Fit Makeup Fixer 80ml",
"url": "https://shop.tiktok.com/us/pdp/tirtir-official-long-wear-makeup-finishing-mist-set-80ml/1732154203314098778"
}
],
"source": "https://shop.tiktok.com/us/deals/recommended-for-you"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJjdXJzb3IiOjQxfQ"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.component_namesarraydata.hasMorebooleandata.nextstringdata.pagestringdata.pathstringdata.productsarraydata.products[].brandstringdata.products[].currencystringdata.products[].discountstringdata.products[].idstringdata.products[].originalPricenumberdata.products[].pricenumberdata.products[].ratingnumberdata.products[].reviewsintegerdata.products[].sellerIdstringdata.products[].shopstringdata.products[].soldintegerdata.products[].titlestringdata.products[].urlstringdata.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/storefront/flash-salesFlash sales
Parameters
- 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 shop_browse tool with method: flash_sales. Same data, same credit. MCP setup
{
"tool": "shop_browse",
"arguments": {
"method": "flash_sales"
}
}Request
curl "https://api.tokconnect.com/v1/storefront/flash-sales" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/storefront/flash-sales",
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/storefront/flash-sales", {
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": {
"component_names": [
"user_info",
"page_header",
"bread_crumbs"
],
"hasMore": true,
"next": "eyJleGNsdWRlX3Byb2R1Y3RfaWRzIjpbIjE3MzI1Mzg2OTk2ODMwNDEzMTUiLCIxNzMyNTY2NTY1MDA3ODIzNjIyIiwiMTczMTc0MjU5OTU4NDE5MDg4NSIsIjE3MzIyNDQyODk3MDU5MDY3NTEiLCIxNzMxOTc3OTgwNzkzOTUwODE1IiwiMTcyOTc2ODYxMDIxMDA5MTc3MiIsIjE3MzE2NzYzMTU2MDYyOTA4NDkiLCIxNzI5NTk0MjQ2OTQ3NjM5NTc4IiwiMTcyOTQwNjc2NjE3MDAxODc2MiIsIjE3…",
"page": "flash_sales",
"path": "deals/flash-sales",
"products": [
{
"brand": "Aoqta",
"currency": "USD",
"discount": "37%",
"id": "1732538699683041315",
"originalPrice": 29.96,
"price": 19.01,
"rating": 4.6,
"reviews": 20,
"sellerId": "7496222237926983715",
"shop": "Aoqta",
"sold": 239,
"title": "Aoqta Women’s 2-Piece Yoga Athletic Sportswear Set - Square Neck Long Sleeve Top, High Waist Butt Lifting Flared Pants, Machine Washable Workout Sets Women for Gym,sohochic",
"url": "https://shop.tiktok.com/us/pdp/aoqta-womens-2-piece-quick-dry-gym-set-yoga-dance-wear/1732538699683041315"
},
{
"brand": "MAGIC JOHN",
"currency": "USD",
"discount": "50%",
"id": "1732566565007823622",
"originalPrice": 11.96,
"price": 5.98,
"rating": 4.5,
"reviews": 234,
"sellerId": "7495468182119418630",
"shop": "MAGIC JOHN",
"sold": 5545,
"title": "MAGIC JOHN MagicView Ultra-Slim Scratch Resistant Privacy/HD Glass Screen Protector for iPhone 18/17/16/15 Series, 2-Pack Phone Accessories, 0.33mm, No Black Border, Auto Dust Removal, Easy Installation, Case-Friendly, Anti-Peek Privacy Screen Protector,",
"url": "https://shop.tiktok.com/us/pdp/magic-john-screen-protector-for-iphone-17-16-15-2-pack-0-33mm/1732566565007823622"
},
{
"brand": "YCZ",
"currency": "USD",
"discount": "50%",
"id": "1731742599584190885",
"originalPrice": 53.88,
"price": 26.99,
"rating": 4.7,
"reviews": 1230,
"sellerId": "7495623134499408293",
"shop": "Y CZ",
"sold": 8155,
"title": "[YCZ] Men's Midnight Marine EDP Cologne, 2×50mL/1.7oz Aquatic Marine & Citrus Woody Perfume for Adults, Captivating Scent, Long-Lasting Luxurious Fragrance for Dates & Summer Use,familyfun",
"url": "https://shop.tiktok.com/us/pdp/2-pack-unisex-eau-de-parfum-100ml-ocean-fresh-scent/1731742599584190885"
}
],
"source": "https://shop.tiktok.com/us/deals/flash-sales"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJleGNsdWRlX3Byb2R1Y3RfaWRzIjpbIjE3MzI1Mzg2OTk2ODMwNDEzMTUiLCIxNzMyNTY2NTY1MDA3ODIzNjIyIiwiMTczMTc0MjU5OTU4NDE5MDg4NSIsIjE3MzIyNDQyODk3MDU5MDY3NTEiLCIxNzMxOTc3OTgwNzkzOTUwODE1IiwiMTcyOTc2ODYxMDIxMDA5MTc3MiIsIjE3MzE2NzYzMTU2MDYyOTA4NDkiLCIxNzI5NTk0MjQ2OTQ3NjM5NTc4IiwiMTcyOTQwNjc2NjE3MDAxODc2MiIsIjE3Mjk0NTI1MjQyMDEzNDk1NDQiLCIxNzMwMzAxODgyNTE1MTAwNTk4IiwiMTczMjE1MjA5MzY3MzQ5MzQyOSIsIjE3MzIxNTg1MDkxMzk0NjQ0NTIiLCIxNzI5NDgzMTcyNTEwMTQ0MTgyIiwiMTczMTI2NDYyOTM2NDc4OTMzNiIsIjE3Mjk2NzE4NDY2Mjg3MjUxNTciLCIxNzMxMzk3NTAwNjU0MzU4NjI3IiwiMTczMDM4MTExNDAyMjg1ODk2OSIsIjE3Mjk0MjA0NTE4NDY3MjI0NDIiLCIxNzI5NzEyMDIyMDYwODMwNzgyIiwiMTczMjU3NjQyMDY3Mzc4NjcxNiIsIjE3MzEyMjU2OTQ3NjY4NjI1MzIiLCIxNzMyMzA2ODIzODE4OTQwODMzIiwiMTczMTc0OTg3MjUxNzYxNjM4MCIsIjE3MzI0MjQxMTI0NDIxNTEyNDkiLCIxNzI5NzQ3NTA4Mzk0OTU1MjE0IiwiMTczMDU1NTY4Mzk1Mjg5MDYxNyIsIjE3MzIxMzY1MzY3Mzk1MTcwMDMiLCIxNzI5NDQ4MzIwNDgyNTEzNDUwIiwiMTczMjIyMjY2MjEyOTQ1NTM2MCIsIjE3MzIwOTQwNjQ4Mzk1MjkxOTEiLCIxNzMyMzY4NDk2MDgzOTY0NjU3IiwiMTczMjI4OTU5MzgxOTEwNzU2NCIsIjE3Mjk3MzUzNDY4NTcxNTI4MjMiLCIxNzMyNDAyMjIxMjA3NDI1ODE4IiwiMTczMjM2NTQ0MjEzMjg0MDUyNSIsIjE3MzI0NDM0MTg4NTE2NDMzOTkiLCIxNzMyMDc2Mzk0NjY4NjU5NDI0IiwiMTcyOTQwNjk2MzYwODAzMjIzNyIsIjE3MzE2MDUxMDYxNjAyNzYxMTAiLCIxNzI5NDc2Mzk0MTgxMDM5MjY0IiwiMTcyOTYyNzUyMzkzNTA4MDYwMyIsIjE3Mjk0ODg3NTgzMzUzNzkyMDgiLCIxNzMyMjgzOTkyMjA1MjY3Mzc3IiwiMTcyOTQ4ODY5NjkyMDkzODI0OCJdLCJvZmZzZXQiOjQ1fQ"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.component_namesarraydata.hasMorebooleandata.nextstringdata.pagestringdata.pathstringdata.productsarraydata.products[].brandstringdata.products[].currencystringdata.products[].discountstringdata.products[].idstringdata.products[].originalPricenumberdata.products[].pricenumberdata.products[].ratingnumberdata.products[].reviewsintegerdata.products[].sellerIdstringdata.products[].shopstringdata.products[].soldintegerdata.products[].titlestringdata.products[].urlstringdata.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/storefront/keyword-pageAn SEO keyword page (slug)
Parameters
- slugstring
method=keyword_page: slug from relatedSearches (e.g. lip-oils);method=category_page: category slug.
3 more optional parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - filtersarray of string
method=searchorkeyword_page: TikTok filter ids from a previous response's filters, e.g.ecom_rating_stat|RATING_4. - 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 shop_browse tool with method: keyword_page. Same data, same credit. MCP setup
{
"tool": "shop_browse",
"arguments": {
"method": "keyword_page",
"slug": "lip-oil"
}
}Request
curl "https://api.tokconnect.com/v1/storefront/keyword-page?slug=lip-oil" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/storefront/keyword-page",
params={
"slug": "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({
slug: "lip-oil",
});
const res = await fetch(`https://api.tokconnect.com/v1/storefront/keyword-page?${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": {
"hasMore": true,
"next": "eyJvZmZzZXQiOjMwfQ",
"page": "keyword",
"products": [
{
"currency": "USD",
"discount": "53%",
"id": "1729500724221286212",
"originalPrice": 14.99,
"price": 6.99,
"rating": 4.7,
"reviews": 490,
"sellerId": "7496260439930211140",
"shop": "PureGlam Lab",
"sold": 2044,
"title": "Women's 2-Pcs Natural Lip Care Gift Set - Moisturizing Balm, Lip Oil, Glossy Lipgloss, Gentle Conditioner, Bottle Packaging | Daily Softening | Back-to-School Gift for Personal Use",
"url": "https://shop.tiktok.com/us/pdp/2-piece-3-in-1-lip-care-set-hydrating-lip-balm-gloss/1729500724221286212"
},
{
"brand": "NOONI",
"currency": "USD",
"id": "1729440860171702516",
"price": 15,
"rating": 4.3,
"reviews": 35969,
"sellerId": "7495586169586223348",
"shop": "NOONI",
"sold": 346768,
"title": "Nooni Korean Apple Lip Oil + Lip Stain | Glossy Lip Stain, Tinting & Long Lasting, Moisturizing Lip Care (17 options) Hydrate Lipgloss Lipstick Makeup Glossy Hydrating Moisturizer Plump Transfer-proof",
"url": "https://shop.tiktok.com/us/pdp/apple-lip-oil-by-nooni-moisturizing-tint-softening-care-3-7ml/1729440860171702516"
},
{
"currency": "USD",
"discount": "38%",
"id": "1732388535932916327",
"originalPrice": 20.99,
"price": 12.99,
"rating": 4.8,
"reviews": 32,
"sellerId": "7494591973747295847",
"shop": "Kore Mart US",
"sold": 119,
"title": "[BUY 3 GET 3 FREE] 6-Count Lip Oil & Lipgloss Cosmetic Gift Set - Affordable Lip Care Treatment, Hydrates, Moisturizes, Smooths Skin, Anti-Wrinkle, Student-Friendly Beauty Item",
"url": "https://shop.tiktok.com/us/pdp/moisturizing-clear-lip-gloss-set-6-count-student-friendly/1732388535932916327"
}
],
"relatedCategories": [
{
"id": "601595",
"name": "Lip Treatments",
"slug": "lip-treatments"
},
{
"id": "601534",
"name": "Lipstick & Lip Gloss",
"slug": "lipstick-lip-gloss"
},
{
"id": "601529",
"name": "Makeup Sets",
"slug": "makeup-sets"
}
],
"relatedSearches": [
{
"name": "Lip Therapy",
"slug": "lip-therapy"
},
{
"name": "oil lipstick",
"slug": "oil-lipstick"
},
{
"name": "Lip lingerie",
"slug": "lip-lingerie"
}
],
"shops": [
{
"name": "NOONI",
"sellerId": "7495586169586223348"
},
{
"name": "e.l.f. Cosmetics",
"sellerId": "7494913857786775843"
},
{
"name": "COVERGIRL",
"sellerId": "7496133101336103678"
}
],
"source": "https://shop.tiktok.com/us/k/lip-oil"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJvZmZzZXQiOjMwfQ"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.nextstringdata.pagestringdata.productsarraydata.products[].currencystringdata.products[].discountstringdata.products[].idstringdata.products[].originalPricenumberdata.products[].pricenumberdata.products[].ratingnumberdata.products[].reviewsintegerdata.products[].sellerIdstringdata.products[].shopstringdata.products[].soldintegerdata.products[].titlestringdata.products[].urlstringdata.relatedCategoriesarraydata.relatedCategories[].idstringdata.relatedCategories[].namestringdata.relatedCategories[].slugstringdata.relatedSearchesarraydata.relatedSearches[].namestringdata.relatedSearches[].slugstringdata.shopsarraydata.shops[].namestringdata.shops[].sellerIdstringdata.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/storefront/pageAny other Shop page by path
Parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - pathstring
method=path: any other Shop path, e.g. store/{slug}/{seller_id}or deals/premium-offers.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the shop_browse tool with method: path. Same data, same credit. MCP setup
{
"tool": "shop_browse",
"arguments": {
"method": "path"
}
}Request
curl "https://api.tokconnect.com/v1/storefront/page" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/storefront/page",
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/storefront/page", {
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": {
"component_names": [
"user_info",
"page_header",
"campaign_hero_banner"
],
"hasMore": false,
"page": "mall",
"path": "",
"products": [
{
"brand": "Leefar",
"currency": "USD",
"discount": "63%",
"id": "1730743411790877344",
"originalPrice": 34.87,
"price": 12.89,
"rating": 4.7,
"reviews": 2507,
"sellerId": "7495951453623650976",
"shop": "Leefar Supplements",
"sold": 24092,
"title": "LeeFar Her Juicy Feminine Probiotics Gummies- All in One Solution with Slippery Elm and Prebiotics&Lactobacillus Probiotic Blend for Women's pH Balance and Dryness - Hawaiian Pineapple Gummies 60 Counts",
"url": "https://shop.tiktok.com/us/pdp/womens-probiotic-gummies-by-leefar-60-count-with-prebiotics-slippery-elm/1730743411790877344"
},
{
"brand": "YOULUCK",
"currency": "USD",
"discount": "56%",
"id": "1730661941307937028",
"originalPrice": 30.9,
"price": 13.6,
"rating": 4.7,
"reviews": 1700,
"sellerId": "7495486250805332228",
"shop": "YouLuck Beauty",
"sold": 30021,
"title": "YOULUCK Velvet Touch Cluster Lashes Kit - 3D False Eyelashes & Adhesives, Waterproof Dramatic Eyelash Extensions, Ultra-Thin Band, Bond, Seal, Remover, Tweezer, Beginner-Friendly Beauty Cosmetic for Girls,familyfun",
"url": "https://shop.tiktok.com/us/pdp/youluck-lash-clusters-waterproof-long-lasting-beginner-friendly/1730661941307937028"
},
{
"brand": "Pigeon",
"currency": "USD",
"discount": "37%",
"id": "1732157479503172113",
"originalPrice": 40.99,
"price": 25.69,
"rating": 4.8,
"reviews": 107,
"sellerId": "7496091900942912017",
"shop": "Pigeon USA",
"sold": 2574,
"title": "Pigeon Glass Nursing Baby Bottle (Pack of 2) Wide Neck, Anti-Colic, Streamlined Body, Natural Feel, Easy to Clean, (0m+) baby registry essential Heat-Resistant, 5.4 Oz, Includes 2pcs SS Nipples",
"url": "https://shop.tiktok.com/us/pdp/pigeon-glass-nursing-baby-bottle-pack-of-2-anti-colic-5-4-oz/1732157479503172113"
}
],
"source": "https://shop.tiktok.com/us"
},
"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.component_namesarraydata.hasMorebooleandata.pagestringdata.pathstringdata.productsarraydata.products[].brandstringdata.products[].currencystringdata.products[].discountstringdata.products[].idstringdata.products[].originalPricenumberdata.products[].pricenumberdata.products[].ratingnumberdata.products[].reviewsintegerdata.products[].sellerIdstringdata.products[].shopstringdata.products[].soldintegerdata.products[].titlestringdata.products[].urlstringdata.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/storefront/searchShop search results
Parameters
- keywordstring
method=search: product search phrase.
4 more optional parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - filtersarray of string
method=searchorkeyword_page: TikTok filter ids from a previous response's filters, e.g.ecom_rating_stat|RATING_4. - 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. - sortstring
method=search:best_sellers, newest,price_descorprice_asc(default relevance). The result's sortApplied says whether TikTok sorted the results (tiktok) or only this page was sorted (page).One of
best_sellersnewestprice_descprice_asc
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the shop_browse tool with method: search. Same data, same credit. MCP setup
{
"tool": "shop_browse",
"arguments": {
"method": "search",
"keyword": "lip oil"
}
}Request
curl "https://api.tokconnect.com/v1/storefront/search?keyword=lip%20oil" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/storefront/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/storefront/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": {
"filters": [
{
"group": "Sort by",
"options": [
{
"id": "ecom_sold_count",
"name": "Best sellers"
},
{
"id": "ecom_publish_time",
"name": "Newest"
},
{
"id": "ecom_price|DESC",
"name": "Price high to low"
}
]
},
{
"group": "Promotions",
"options": [
{
"id": "ecom_promotion_tag_stat",
"name": "Deals"
},
{
"id": "ecom_free_shipping_stat",
"name": "Free Shipping"
}
]
},
{
"group": "Categories",
"options": [
{
"id": "ecom_category_level_two_stat|849160",
"name": "Bath & Body Care"
},
{
"id": "ecom_category_level_two_stat|848648",
"name": "Makeup"
},
{
"id": "ecom_category_level_two_stat|848776",
"name": "Skincare"
}
]
}
],
"hasMore": true,
"next": "eyJvZmZzZXQiOjMwLCJwYWdlX3Rva2VuIjoiMjAyNjEwMzAyMzI5MjRGQjc0MTlBODFDQjk5MzE4M0U4MiJ9",
"page": "search",
"products": [
{
"brand": "NOONI",
"currency": "USD",
"id": "1729440860171702516",
"price": 15,
"rating": 4.3,
"reviews": 35969,
"sellerId": "7495586169586223348",
"shop": "NOONI",
"sold": 346768,
"title": "Nooni Korean Apple Lip Oil + Lip Stain | Glossy Lip Stain, Tinting & Long Lasting, Moisturizing Lip Care (17 options) Hydrate Lipgloss Lipstick Makeup Glossy Hydrating Moisturizer Plump Transfer-proof",
"url": "https://shop.tiktok.com/us/pdp/apple-lip-oil-by-nooni-moisturizing-tint-softening-care-3-7ml/1729440860171702516"
},
{
"brand": "e.l.f.",
"currency": "USD",
"id": "1729407202568147235",
"price": 13,
"rating": 4.8,
"reviews": 18626,
"sellerId": "7494913857786775843",
"shop": "e.l.f. Cosmetics",
"sold": 228428,
"title": "e.l.f. Glow Reviver Lip Oil, Nourishing Lip Oil High-Gloss Finish 0.25 oz (7.6 mL)",
"url": "https://shop.tiktok.com/us/pdp/glow-reviver-lip-oil-by-e-l-f-cosmetics-hydrating-tinted-formula/1729407202568147235"
},
{
"currency": "USD",
"id": "1731254660842033551",
"price": 9.99,
"rating": 4.2,
"reviews": 8811,
"sellerId": "7496154631071304079",
"shop": "NEOVA",
"sold": 57208,
"title": "Moisturizing Lip Balm, 2 Counts/set Hydrating Glossy Lip Glaze Stick Plumping Lip Oil for Girls & Women, Fall Gift, Christmas Gift, Mother's Day Gift, Lip Stain, Skincare",
"url": "https://shop.tiktok.com/us/pdp/moisturizing-lip-balm-set-hydrating-glossy-lip-oil-fall-gift/1731254660842033551"
}
],
"relatedCategories": [
{
"id": "601534",
"name": "Lipstick & Lip Gloss",
"slug": "lipstick-lip-gloss"
},
{
"id": "601595",
"name": "Lip Treatments",
"slug": "lip-treatments"
},
{
"id": "601529",
"name": "Makeup Sets",
"slug": "makeup-sets"
}
],
"relatedSearches": [
{
"name": "lip oils",
"slug": "lip-oils"
},
{
"name": "lip oil vs lip gloss",
"slug": "lip-oil-vs-lip-gloss"
}
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.filtersarraydata.filters[].groupstringdata.filters[].optionsarraydata.filters[].options[].idstringdata.filters[].options[].namestringdata.hasMorebooleandata.nextstringdata.pagestringdata.productsarraydata.products[].brandstringdata.products[].currencystringdata.products[].idstringdata.products[].priceintegerdata.products[].ratingnumberdata.products[].reviewsintegerdata.products[].sellerIdstringdata.products[].shopstringdata.products[].soldintegerdata.products[].titlestringdata.products[].urlstringdata.relatedCategoriesarraydata.relatedCategories[].idstringdata.relatedCategories[].namestringdata.relatedCategories[].slugstringdata.relatedSearchesarraydata.relatedSearches[].namestringdata.relatedSearches[].slugstringdata.shopsarraydata.shops[].namestringdata.shops[].sellerIdstringdata.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