TikTok Shop · Details & Aggregates
Detail endpoints return deep data for a single entity (shop, product, creator, video) by id. WinningHunter mostly proxies the upstream TikTok Shop v2 API and may add small fields (for example success, is_favorite, WinningHunter deep links).
Examples below are trimmed from live responses (extra upstream keys may appear). Metric envelopes are usually { "data": {…}, "meta": {…} } — not always wrapped in success.
Use an découvrir route first to find an id if you only have a name.
Shop details
/api/v1/tiktok-shop/shop-detailCore profile for a single shop (upstream shop object + is_favorite).
Clé X-API on every request.Body parameters
idstringrequiredShop id.
paysstringMarket the shop sells in.
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/shop-detail" \
-d '{"id":"7495514739648989419","country":"US"}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/shop-detail`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "7495514739648989419",
"country": "US"
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/shop-detail",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "7495514739648989419",
"country": "US"
},
)
data = res.json(){
"success": true,
"data": {
"id": "7495514739648989419",
"shop_id": "7495514739648989419",
"shop_name": "medicube US Store",
"name": "medicube US Store",
"handle": "medicubeusstore",
"shop_image": "https://media.winninghunter.com/tiktok-shop/shops/7495514739648989419.png",
"seller_type": "BRAND",
"product_count": 128,
"video_count": 2298,
"creator_count": 1235,
"revenue": {
"yesterday": 614739.8,
"7d": 4475897.55,
"30d": 19625456.71,
"90d": 63143369.2,
"lifetime": 276222723.33,
"current": 19625456.71
},
"sales": {
"sold_count_30_days": 703153,
"sold_count_lifetime": 7320313,
"unit_price": 27.91
},
"revenue_30_days": 19625456.71,
"sold_count_30_days": 703153
},
"meta": {
"total": 0,
"page": 1,
"limit": 20,
"period": "30d"
},
"is_favorite": false
}{
"success": false,
"error": "Unauthorized"
}{
"success": false,
"error": "No API credits remaining. Buy an add-on pack or wait until next monthly reset.",
"credits": {
"used": 20000,
"limit": 20000,
"remaining": 0,
"addon_remaining": 0,
"total_remaining": 0
},
"purchase": {
"url": "https://…/checkout-api-credits?credits=…"
}
}is_favorite is added at the top level. Additional upstream shop keys may appear.
/api/v1/tiktok-shop/shop-detail/totalShop metrics for a period (upstream passthrough).
Clé X-API on every request.Body parameters
idstringrequiredpériodeintegerDays: 1, 7, 30, or 90.
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/shop-detail/total" \
-d '{"id":"7495514739648989419","period":30}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/shop-detail/total`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "7495514739648989419",
"period": 30
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/shop-detail/total",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "7495514739648989419",
"period": 30
},
)
data = res.json(){
"success": true,
"data": {
"revenue": {
"1d": 614739.8,
"7d": 4475897.55,
"30d": 19625456.71,
"90d": 63143369.2,
"180d": 110615459.59,
"lifetime": 276222723.33,
"growth_rate": -12.46
},
"sales": {
"sold_count": 703153,
"sold_count_lifetime": 7320313,
"unit_price": 27.91
},
"counts": {
"creators": 1235,
"videos": 2298,
"products": 128,
"shops": 0
},
"affiliate_percentage": 0,
"self_promotion_percentage": 0,
"original_revenue": 19625456.71
},
"meta": {
"total": 0,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}/api/v1/tiktok-shop/shop-detail/product/queryListProducts sold by a shop.
Clé X-API on every request.Body parameters
idstringrequiredpageNointegerpageSizeintegerpériodeintegertrierarrayUpstream sort array, e.g. [{ "field": "revenue", "type": "DESC" }].
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/shop-detail/product/queryList" \
-d '{"id":"7495514739648989419","pageNo":1,"pageSize":20,"period":30,"sort":[]}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/shop-detail/product/queryList`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "7495514739648989419",
"pageNo": 1,
"pageSize": 20,
"period": 30,
"sort": []
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/shop-detail/product/queryList",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "7495514739648989419",
"pageNo": 1,
"pageSize": 20,
"period": 30,
"sort": []
},
)
data = res.json(){
"success": true,
"data": [
{
"id": "1729508370969629931",
"product_id": "1729508370969629931",
"product_title": "[medicube] PDRN Pink Collagen Volume Multi Balm …",
"product_image": "https://p16-oec-general-useast5.ttcdn-us.com/…",
"price": 36,
"unit_price": 36,
"revenue": 1907335.86,
"revenue_30_days": 1907335.86,
"sold_count": 101159,
"sold_count_30_days": 101159,
"rating": 4.2
}
],
"meta": {
"total": 129,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}Prefer dashboard Network-tab field names (pageNo / pageSize / sort[0].field) over invented page / limite aliases. Live payloads may also echo page / total at the top level depending on upstream.
Product details
Product detail returns { data, meta } (no top-level success). Identify the product with data.id (not product_id).
/api/v1/tiktok-shop/product-detail/{id}Full profile of a single product (upstream passthrough + WH URLs).
Clé X-API on every request.Path parameters
idstringrequired
curl -sS \
-H "X-API-Key: $WH_API_KEY" \
"{origin}/api/v1/tiktok-shop/product-detail/1729448464509734958"const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/product-detail/1729448464509734958`, {
method: 'GET',
headers: {
'X-API-Key': process.env.WH_API_KEY,
},
});
const data = await res.json();import os, requests
res = requests.get(
f"{ORIGIN}/api/v1/tiktok-shop/product-detail/1729448464509734958",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
)
data = res.json(){
"data": {
"id": "1729448464509734958",
"product_title": "Toplux Magnesium Complex 8 Essential Magnesium Supplement",
"product_image": "https://media.winninghunter.com/tiktok-shop/products/1729448464509734958_0.webp",
"unit_price": "$14.97",
"revenue": "$2.57m",
"revenue_lifetime": 29785853.91,
"sold_count": "161803",
"sold_count_lifetime": 1989703,
"creator_num": 16,
"ctr": "4.1%",
"product_score": "4.5",
"product_review_cnt": "153825",
"avg_unit_price": 14.97,
"launch_date": "2026-02-26",
"winninghunter_product_url": "https://app.winninghunter.com/tiktok-shop/product/1729448464509734958?period=30",
"tiktok_shop_product_url": "https://app.winninghunter.com/tiktok-shop/product/1729448464509734958?period=30"
},
"meta": {
"limit": 20,
"page": 1,
"period": "30d",
"total": 0
}
}{
"success": false,
"error": "Unauthorized"
}/api/v1/tiktok-shop/product-detail/totalProduct metrics (upstream passthrough).
Clé X-API on every request.Body parameters
idstringrequiredpériodeinteger
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/product-detail/total" \
-d '{"id":"1729448464509734958","period":30}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/product-detail/total`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "1729448464509734958",
"period": 30
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/product-detail/total",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "1729448464509734958",
"period": 30
},
)
data = res.json(){
"data": {
"revenue": {
"1d": 77409.87,
"7d": 576410.87,
"30d": 2574394.91,
"90d": 8383451.39,
"lifetime": 29785853.91,
"growth_rate": -6.26
},
"sales": {
"sold_count": 161803,
"sold_count_lifetime": 1989703,
"unit_price": 14.97
},
"counts": {
"creators": 16,
"videos": 24,
"products": 0,
"shops": 0
},
"product_score": "4.5",
"product_review_count": 153825,
"avg_unit_price": 14.97,
"ctr": "4.1%"
},
"meta": {
"total": 0,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}/api/v1/tiktok-shop/product-detail/historyProduct time series (upstream passthrough).
Clé X-API on every request.Body parameters
idstringrequiredpériodeinteger
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/product-detail/history" \
-d '{"id":"1729448464509734958","period":30}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/product-detail/history`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "1729448464509734958",
"period": 30
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/product-detail/history",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "1729448464509734958",
"period": 30
},
)
data = res.json(){
"data": [
{
"product_id": "1729448464509734958",
"recorded_at": "2026-08-26T00:02:27.264Z",
"sold_count": "1989703",
"sold_today": 4843,
"avg_unit_price": 14.97,
"daily_revenue": 72499.71,
"revenue_lifetime": 29785853.91,
"creator_count": 16,
"video_count": 24,
"country": "US"
}
],
"meta": {
"total": 30,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}History is an array of daily rows (daily_revenue, sold_today, …). meta.total is the number of days returned for the period.
Creator details
/api/v1/tiktok-shop/creator-detail/totalCreator metrics (upstream passthrough).
Clé X-API on every request.Body parameters
idstringrequiredpériodeinteger
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/creator-detail/total" \
-d '{"id":"6737412251941389318","period":30}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/creator-detail/total`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "6737412251941389318",
"period": 30
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/creator-detail/total",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "6737412251941389318",
"period": 30
},
)
data = res.json(){
"data": {
"revenue": {
"1d": 55950.99,
"7d": 198025.52,
"30d": 890752.76,
"90d": 1563030.47,
"lifetime": 37604852.16,
"growth_rate": -29.77
},
"engagement": {
"views": 62142676,
"likes": 0,
"shares": 0,
"comments": 0
},
"follower_count": {
"7d": 454,
"30d": 2321,
"total": 73148
},
"views": {
"1d": 691015,
"7d": 6936052,
"30d": 62142676
},
"sales": {
"sold_count": 0,
"sold_count_lifetime": 0,
"unit_price": 0
}
},
"meta": {
"total": 0,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}/api/v1/tiktok-shop/creator-detail/searchProductsProducts promoted by a creator.
Clé X-API on every request.Body parameters
idstringrequiredpageintegerlimiteintegerpériodeinteger
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/tiktok-shop/creator-detail/searchProducts" \
-d '{"id":"6737412251941389318","page":1,"limit":20,"period":30}'const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/creator-detail/searchProducts`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"id": "6737412251941389318",
"page": 1,
"limit": 20,
"period": 30
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/tiktok-shop/creator-detail/searchProducts",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"id": "6737412251941389318",
"page": 1,
"limit": 20,
"period": 30
},
)
data = res.json(){
"data": [
{
"id": "1732017379984117841",
"product_title": "Mellow Sleep | MarshMellow Comforter …",
"product_image": "https://media.winninghunter.com/tiktok-shop/products/1732017379984117841_0.webp",
"unit_price": "$99.99",
"revenue": "$349.54k",
"revenue_lifetime": 13901409.72,
"sold_count_lifetime": 139028,
"creator_num": 14,
"creator_name": "Hannah Bentley",
"creator_follower_count": 73148
}
],
"meta": {
"total": 131,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}Video metrics
/api/v1/tiktok-shop/videos/{id}/metricsVideo metrics (upstream passthrough).
Clé X-API on every request.Path parameters
idstringrequired
curl -sS \
-H "X-API-Key: $WH_API_KEY" \
"{origin}/api/v1/tiktok-shop/videos/7573080707619130655/metrics"const res = await fetch(`${ORIGIN}/api/v1/tiktok-shop/videos/7573080707619130655/metrics`, {
method: 'GET',
headers: {
'X-API-Key': process.env.WH_API_KEY,
},
});
const data = await res.json();import os, requests
res = requests.get(
f"{ORIGIN}/api/v1/tiktok-shop/videos/7573080707619130655/metrics",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
)
data = res.json(){
"data": {
"revenue": {
"1d": 0,
"7d": 44248.99,
"30d": 247065.08,
"90d": 420602.79,
"lifetime": 25372935.8,
"growth_rate": -12.3
},
"engagement": {
"views": 2538711,
"likes": 10484,
"shares": 595,
"comments": 39
},
"sales": {
"sold_count": 0,
"sold_count_lifetime": 0,
"unit_price": 0
}
},
"meta": {
"total": 0,
"page": 1,
"limit": 20,
"period": "30d"
}
}{
"success": false,
"error": "Unauthorized"
}See also
- TikTok Shop filters — explore / count params
- API reference — full route index
- Credits & Billing — programmatic vs TikTok search credits