Docs · TikTok Shop product
TikTok Shop product
A US TikTok Shop product's price, images, seller, variants, sales and review totals.
https://api.lurkapi.com/v1/tiktok/productWhen to use this
Inspect a product sold through the US TikTok Shop: public product copy, price, variant inventory, seller and category information. Prices are decimal strings in the reported currency and reflect the logged-out US storefront; checkout discounts and shipping can differ. Sales and reviews are lifetime totals, not a time series. This endpoint returns a single product, not Shop search or review pages. Other storefront countries are not supported.
Parameters
All parameters go in the query string.
| Parameter | Description |
|---|---|
urlstringrequired | US product URL on shop.tiktok.com/us/pdp/… or its numeric product id.
|
Example request
Replace YOUR_API_KEY with your key, or set LURKAPI_KEY for the code. Get a free key.
curl "https://api.lurkapi.com/v1/tiktok/product?url=https%3A%2F%2Fshop.tiktok.com%2Fus%2Fpdp%2Fbiodance-collagen-mask-pdrn-sea-kelp-overnight-hydration%2F1732049122233848586" \
-H "x-api-key: YOUR_API_KEY"const params = new URLSearchParams({
url: "https://shop.tiktok.com/us/pdp/biodance-collagen-mask-pdrn-sea-kelp-overnight-hydration/1732049122233848586",
});
const res = await fetch(`https://api.lurkapi.com/v1/tiktok/product?${params}`, {
headers: { "x-api-key": process.env.LURKAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.code}: ${data.error}`);
console.log(data.images);import os
import requests
res = requests.get(
"https://api.lurkapi.com/v1/tiktok/product",
params={
"url": "https://shop.tiktok.com/us/pdp/biodance-collagen-mask-pdrn-sea-kelp-overnight-hydration/1732049122233848586",
},
headers={"x-api-key": os.environ["LURKAPI_KEY"]},
timeout=60,
)
data = res.json()
if not data["success"]:
raise RuntimeError(f"{data['code']}: {data['error']}")
print(data["images"])Example response
A real response from this endpoint, captured from the live API and trimmed to a couple of items. Strings over 96 characters (mostly signed media URLs) are cut short and end in ….
Show the example response (4 KB)Hide
{
"success": true,
"credits_remaining": 999955,
"credits_charged": 1,
"id": "1732049122233848586",
"url": "https://shop.tiktok.com/us/pdp/biodance-collagen-mask-pdrn-sea-kelp-over…",
"region": "US",
"title": "[Biodance Official] Maskholic Gift Bundle | Collagen, PDRN, Ceranol, Sea…",
"description": "This product is a bundle made up of individual items.\nIf the products ar…",
"sold_count": 26233,
"price": {
"currency": "USD",
"amount": "69.92",
"original_amount": "131.96",
"display": "$69.92"
},
"images": [
{
"url": "https://p16-oec-general.ttcdn-us.com/tos-alisg-i-aphluv4xwc-sg/84912eaae…",
"width": 800,
"height": 800
},
{
"url": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx…",
"width": 800,
"height": 800
}
],
"categories": [
{
"id": "601450",
"name": "Beauty & Personal Care"
},
{
"id": "848776",
"name": "Skincare"
},
{
"id": "601611",
"name": "Skin Care Kits"
}
],
"specifications": [
{
"name": "Brand",
"value": "Biodance"
},
{
"name": "Application area",
"value": "Face"
},
{
"name": "Manufacturer",
"value": "Biodance"
},
{
"name": "Volume",
"value": "34g * 4ea"
},
{
"name": "Scent",
"value": "Unscented"
},
{
"name": "Region of origin",
"value": "Korea"
},
{
"name": "Benefits",
"value": "Pore Tightening,Pore Treatment,Anti Aging,Firming,Hydrating,Moisturizing"
},
{
"name": "Age group",
"value": "Adults"
},
{
"name": "Gender",
"value": "Female,Male,Unisex"
},
{
"name": "Feature",
"value": "Alcohol free"
},
{
"name": "Benefit",
"value": "Hydration,Firming or lifting,Anti wrinkle,Pore control,Moisturizing"
},
{
"name": "Skin type",
"value": "All,Sensitive,Combination,Dry,Oily"
},
{
"name": "Product form",
"value": "Sheet"
},
{
"name": "Contains alcohol or aerosol",
"value": "Contains neither"
},
{
"name": "Contains batteries or cells?",
"value": "None"
},
{
"name": "Dangerous goods or hazardous materials",
"value": "No"
},
{
"name": "Flammable liquid",
"value": "No"
},
{
"name": "Ingredients",
"value": "Water,Galactomyces Ferment Filtrate,Glycerin,Acrylates Copolymer,Niacina…"
}
],
"seller": {
"id": "7495992422530583306",
"name": "Biodance Store US",
"url": "https://shop.tiktok.com/us/store/biodance-store-us/7495992422530583306",
"avatar": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx…",
"rating": 4.8,
"follower_count": 192838,
"product_count": 39
},
"rating": 4.8,
"review_count": 1536,
"variants": [
{
"id": "1732469803725394698",
"stock": 260,
"price": "69.92",
"currency": "USD",
"properties": [
{
"name": "Specifications",
"value": "Default"
}
]
}
]
}Response fields
Every field of a successful response. [] marks a list: a[].b is the b of each item in a. nullable fields can be null; optional fields can be missing.
Show all 42 fieldsHide
| Field | Type | Description |
|---|---|---|
| success | true | Always true here; errors have success: false. |
| credits_remaining | number | Your balance after this call. On anonymous playground calls: free tries left today. |
| credits_charged | number | Credits this call cost; 0 on free endpoints. On anonymous playground calls: tries used (1). |
| id | string | TikTok Shop product id. |
| url | string | Canonical US storefront product URL. |
| region | "US" | Storefront country; this endpoint supports US products. |
| title | string | Product name. |
| description | string | Public product description as plain text. |
| sold_count | numbernullable | Lifetime items sold globally, excluding returns; null when unavailable. |
| price | object | Public logged-out storefront price. |
| price.currency | stringnullable | Currency code, e.g. USD; null when unavailable. |
| price.amount | stringnullable | Lowest variant sale price as a decimal string; null when unavailable. |
| price.original_amount | stringnullable | Lowest variant original price before discount, as a decimal string; null when unavailable. |
| price.display | stringnullable | Storefront formatted sale price; null when unavailable. |
| images | object[] | Product images in gallery order. |
| images[].url | string | Product image URL. |
| images[].width | numbernullable | Image width in pixels; null when unknown. |
| images[].height | numbernullable | Image height in pixels; null when unknown. |
| categories | object[] | Category hierarchy, broadest first. |
| categories[].id | string | Category id. |
| categories[].name | string | Category name. |
| specifications | object[] | Product specifications, such as brand and ingredients. |
| specifications[].name | string | Specification name. |
| specifications[].value | string | Specification value. |
| seller | object | The seller. |
| seller.id | string | Seller id. |
| seller.name | stringnullable | Seller storefront name; null when unavailable. |
| seller.url | stringnullable | Seller storefront URL; null when unavailable. |
| seller.avatar | stringnullable | Seller avatar URL; null when unavailable. |
| seller.rating | numbernullable | Seller rating out of 5; null when unavailable. |
| seller.follower_count | numbernullable | Store followers; null when unavailable. |
| seller.product_count | numbernullable | Products in the store; null when unavailable. |
| rating | numbernullable | Product rating out of 5; null when unavailable. |
| review_count | numbernullable | Total product reviews; null when unavailable. |
| variants | object[] | Publicly listed product variants. |
| variants[].id | string | SKU id. |
| variants[].stock | numbernullable | Stock TikTok exposes for this variant; null when unavailable. |
| variants[].price | stringnullable | Variant sale price as a decimal string; null when unavailable. |
| variants[].currency | stringnullable | Variant currency code; null when unavailable. |
| variants[].properties | object[] | Variant options, such as size or color. |
| variants[].properties[].name | string | Option name. |
| variants[].properties[].value | string | Option value. |
Caching and freshness
Responses are cached for up to 5 minutes, so a repeat call within that window can return the same data. It still costs 1 credit.
Errors
Errors return { success: false, error, code, docs } with the HTTP status below. Validation errors, 401/402/429 rejections and 5xx failures are free; not_found is charged (how charging works). All error codes.
| Status | Code | Meaning |
|---|---|---|
| 401 | missing_api_key | No API key. Send it in the x-api-key header. |
| 401 | invalid_api_key | The key is unknown or was revoked. |
| 402 | insufficient_credits | Not enough credits for this call. Buy a pack or wait for tomorrow's top-up. |
| 404 | not_found | The endpoint, or the thing you asked for (ad, post, subreddit), doesn't exist. Charged when the platform was checked. |
| 405 | method_not_allowed | Endpoints take GET with query params. |
| 429 | rate_limited | Too many calls at once. Wait for the retry-after seconds, then retry. |
| 500 | internal_error | Something broke on our side. Retry; 5xx errors are free. |
| 502 | upstream_error | The platform didn't give a usable answer. Retry; 5xx errors are free. |
| 503 | upstream_busy | All our connections to the platform are busy. Retry in a few seconds; 5xx errors are free. |
| 504 | upstream_timeout | The platform took over 30 seconds to answer. Retry; timeouts are free. |
Use it in Claude
Once LurkAPI is connected to Claude, this endpoint is the tiktok_product tool. Ask in plain English, for example:
Use LurkAPI's tiktok_product with url "https://shop.tiktok.com/us/pdp/biodance-collagen-mask-pdrn-sea-kelp-overnight-hydration/1732049122233848586" and summarize what you find.Claude calls tiktok_product with arguments like these, and each call costs 1 credit:
{
"url": "https://shop.tiktok.com/us/pdp/biodance-collagen-mask-pdrn-sea-kelp-overnight-hydration/1732049122233848586"
}Tool results skip nulls and empty lists to save tokens.