How to get TikTok Shop product details
GET request to /v1/tiktok-shop/product-details with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. PDP — price (sku_min when guest min is *), sold vs stock, seller id/url, images[]. Unresolved URL is 404 at 0 credits.How to get TikTok Shop product details (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the TikTok Shop Product Details API
Send an authenticated GET request to /v1/tiktok-shop/product-details with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/tiktok-shop/product-details?url=https%3A%2F%2Fshop.tiktok.com%2Fus%2Fpdp%2Ftrendy-pink-ed-hardy-tough-phone-cases-impact-resistant-wireless-charging-shock-absorption%2F1731098552908944370%3Fsource%3Dproduct_detail%26enter_method%3Durl_semantic_301" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"platform": "tiktok_shop",
"id": "1731098552908944370",
"url": "https://shop.tiktok.com/us/pdp/trendy-pink-ed-hardy-tough-phone-cases-impact-resistant-wireless-charging-shock-absorption/1731098552908944370?source=product_detail&enter_method=url_semantic_301",
"title": "Trendy Pink Ed Hardy Inspired Tough Phone Cases, Phone Durable, Gift, Accessories Top Trendy Phone Cases Phone Cover Hard Case Tough 2-piece Phone Case",
"description": "Protect your phone in style with this tough phone case. This lightweight phone case is impact resistant and comes with the perfect surface in vivid detail as well as crisp color. Compatible with iPhone X, 11, 12, 13, 14, 15, 16 & more - check our available sizes.\n• 2-piece design with impact resistance and shock dispersion.\n• Materials: polycarbonate (shell), TPU (lining).\n• Interior rubber liner for extra protection (appearance may vary across phone models.\n• Supports wireless charging (not including MagSafe)\n• Lexan plastic: Developed by GE Plastics, this material is extremely strong, durable and impact resistant\n• Lay-flat bezel: Protects the screen from small scratches\n• Flexible rubber liner: Absorbs shock from impacts\n• Glossy Finish: Full color decoration with glossy finish\n• UV protected: Excellent resistance to outdoor weathering, long-term optical quality.\n• Glossy Finish: Full color decoration with glossy finish",
"price": 22.54,
"originalPrice": 24.09,
"currency": "USD",
"discount": "6%",
"savings": "Saving $1.55",
"rating": 4.6,
"reviews": 48,
"priceBasis": "pdp-promo-min",
"priceStatus": "extracted",
"sold": 5801,
"stock": 2692,
"mediaUrlsExpireAt": null,
"image": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/cc79ccfd6a324d548de31cb761b6c3c4~tplv-fhlh96nyum-crop-webp:794:794.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=e1be8f53&idc=useast5&from=2378011839",
"seller": {
"id": "7496126292994264050",
"name": "Timeless Teapot Creations",
"url": "https://www.tiktok.com/shop/store/timeless-teapot-creations/7496126292994264050",
"rating": 4.6,
"productCount": 85,
"logo": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/587383daaf8a4eaaa4dfb4c8f2b5944f~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=6ce186a1&idc=useast5&from=2422056039"
},
"skus": [
{
"id": "1731098558045590514",
"stock": 84,
"price": 22.54,
"originalPrice": null,
"status": "1",
"warehouseId": "7495541999400830766",
"purchaseLimit": null,
"saleProps": [
{
"propName": "Phone Models",
"propValue": "iPhone 16 E"
}
]
},
{
"id": "1731098558045656050",
"stock": 51,
"price": 22.54,
"originalPrice": null,
"status": "1",
"warehouseId": "7495541999400830766",
"purchaseLimit": null,
"saleProps": [
{
"propName": "Phone Models",
"propValue": "iPhone 16"
}
]
}
],
"images": [
"https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/cc79ccfd6a324d548de31cb761b6c3c4~tplv-fhlh96nyum-crop-webp:794:794.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=e1be8f53&idc=useast5&from=2378011839",
"https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4fe011977a9d4350ba9d7acf0e502f52~tplv-fhlh96nyum-crop-webp:794:794.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=e1be8f53&idc=useast5&from=2378011839"
],
"saleProperties": [
{
"id": "7494493199692793646",
"name": "Phone Models",
"values": [
{
"id": "7474656136961246982",
"name": "iPhone 16 E"
},
{
"id": "7495574204532655878",
"name": "iPhone 16"
}
]
}
],
"categories": [
{
"id": "601739",
"name": "Phones & Electronics"
},
{
"id": "909064",
"name": "Mobile Phone Accessories"
}
],
"region": "US"
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | TikTok Shop product URL, e.g. https://shop.tiktok.com/view/product/1731410956394792439?region=BR or https://www.tiktok.com/shop/pdp/1731098552908944370. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| region | string | No | Two-letter market region (default US). A region= or oec_region= query on the product URL wins over this default so a BR share URL is not fetched as US. Echoed as data.region. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Frequently asked questions
What does the TikTok Shop Product Details API do?
The TikTok Shop Product Details API lets you fetch full metadata and key stats from a public TikTok Shop listing or product using one GET request to /v1/tiktok-shop/product-details. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the TikTok Shop Product Details API cost?
Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a TikTok Shop API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why was price null next to a title and nine images?
Read priceStatus. region_restricted means TikTok shipped * / a region-locked guest shell — retry with the product's market (often BR) or region=US. not_extracted means no path returned a number on a product that exists; retrying the same region will not help. We take sku_min / product_price_info, try shop.tiktok.com/view/product/{id}?region= first, then fill from the mobile-API actor (20s wait) — and when the first PDP pass was rate-limited and the actor came back priceless, the PDP is fetched once more in the same request (the actor's ~20s is a natural backoff), so a transient 429 wave does not ship a priceless shell. The call stays 2 credits because the product resolved and the PDP fetch ran. A URL that does not resolve is 404 at 0 credits — not a 200 with priceStatus=not_extracted.
What if the product URL does not resolve?
HTTP 404, 0 credits. We parse the path segment after /pdp/ or /view/product/ and read region from the URL query (region / oec_region). An empty 200 with every field null was a parse miss wearing an extraction miss — that is gone. priceStatus=not_extracted is only for a real PDP whose price no path could read.
Is stock inventory or units sold?
stock is SKU available_quantity (summed on the product; per-variant on skus[].stock). sold is sold_info.sold_count. The mobile-API actor names units sold "stock" — when skus[] is empty we remap that number to sold so 94 839 of one t-shirt is not read as warehouse qty. High sold is demand; high stock is supply.
Why is seller only a name?
id and url come from seller_model.seller_id / shop_id, not only product_model.seller_id. url is https://www.tiktok.com/shop/store/{slug}/{id} — chain it into /tiktok-shop/products. rating / productCount / logo fill when the shop card is on the PDP.
Do image URLs expire?
Shop gallery URLs carry t=555f072d — a build token identical across the set, not a CDN expiry. mediaUrlsExpireAt is present and null; persist the image URLs. TikTok video CDN is the surface that dies. source is native | extended.
Is the TikTok Shop Product Details API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get TikTok Shop product details?
Start free with 100 credits — no credit card required.
Get your free API key