Get a TikTok Shop product
Read a public product page and its detail feed: identity, categories, seller summary, title, gallery, description blocks, specifications, sold count, unmasked sale and list prices, sale properties, every SKU with stock, price and package, the selected delivery option, rating and review counts, the embedded reviews with the rating histogram, the shop summary, availability and the seller's business compliance line.
/v1/tiktok/productx-api-keyHeaders
Get your API keyYour ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.
TikTok Shop product ID (15-22 digits); provide either product_id or url.
1729000000000000001Public product URL: https://www.tiktok.com/shop/pdp/{slug}/{id}, https://www.tiktok.com/shop/pdp/{id}, https://shop.tiktok.com/us/pdp/{slug}/{id} or https://www.tiktok.com/view/product/{id}.
max 2048 chars
Storefront region, US (default).
one of: US · default: "US"
Request correlation UUID.
Upstream calls made (document reads and JSON feed calls, retries included), decoded bytes delivered to the parser and elapsed milliseconds.
Always included.
≥ 0
Always included.
≥ 0
Always included.
≥ 0
True when usable public data is returned; inspect status and coverage for omissions.
success, partial, failed or challenged. HTTP 200 can be partial.
one of: success, partial
Canonical public storefront URL the response describes.
absolute HTTPS URL
UTC retrieval timestamp.
Complete means every supported field was read; warnings name each cap or fallback.
Always included.
one of: public_page, public_api
Always included.
Always included.
TikTok Shop product ID (15-22 digits); provide either product_id or url.
Seller (shop) ID of the product.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Seller summary from the page's shop block: seller_id, name, avatar image, product_count and rating (string). Null when the page omits the shop block.
Always included.
Always included.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
Product properties as name/value pairs (several values joined with a bare comma, as the app page prints them).
Always included.
Always included.
Units sold as a number, or null when unpublished.
Always included.
Always included.
The product's minimum-price record from the detail feed (same shape as card prices), as the web storefront prices it; null with prices_unavailable when the feed did not answer.
Optional.
Optional.
Optional.
Optional.
Always included.
Always included.
Always included.
Optional.
Always included.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
up to 1000 items
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Optional.
Optional.
Optional.
Optional.
Always included.
Always included.
Always included.
Optional.
Always included.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Optional.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Selected delivery option: delivery_option, delivery_name, free_shipping, shipping_fee (price_val and currency), original_shipping_val, logistics_service_id, delivery_min_days and delivery_max_days. Fields the page masks are null.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Overall product rating and review count.
Always included.
Always included.
Embedded reviews block: has_more, total_reviews (string), product_reviews (same shape as the reviews endpoint) and review_ratings (review_count, overall_score, rating_result histogram keyed 1-5). Null with reviews_unavailable when the page omits it.
Always included.
Always included.
Always included.
up to 10 items
Always included.
Always included.
Optional.
Optional.
Always included.
1 – 5
Always included.
Always included.
Always included.
Optional.
Always included.
Optional.
absolute HTTPS URL
Always included.
Optional.
absolute HTTPS URL
Optional.
Optional.
Optional.
Always included.
Always included.
Always included.
Always included.
The storefront's shop summary exactly as published: seller_id, sold_count, on_sell_product_count, review_count, global_seller_id, global_sold_count, followers_count and video_count (decimal strings), enable_follow, shop_name, shop_logo, shop_rating (string), shop_link, background, formatted counts (format_sold_count, format_followers_count, format_video_count, format_global_sold_count, display_on_sell_product_count), region, store_sub_score (type 1 positive feedback, 2 ships in 48h, 3 replies in 24h; score, score_percentage string), worst_rating, best_rating, creator_name, shop_identity_label (label_type and text, e.g. OFFICIAL SHOP), shop_slogan and desc (null when absent). Null when the document omits it.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
Always included.
absolute HTTPS URL
Always included.
Always included.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Optional.
Optional.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
Always included.
The storefront's availability reason code (0 when purchasable), or null.
Always included.
Seller business name and address as published on the page, or null.
Always included.
Always included.
No fields match.
HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.
| HTTP | failure.code | Meaning |
|---|---|---|
| 400 | invalid_request | Missing, duplicate, ambiguous or unsupported parameters, unsupported URL forms, regions, sorts or cursors. |
| 401 | unauthorized | Invalid API key. |
| 404 | not_found | Unknown or removed product, or a store the storefront does not serve. |
| 429 | upstream_rate_limited | TikTok Shop rate limited the request. |
| 502 | upstream_challenged | TikTok Shop answered its Security Check page, an HTTP 401/403, or refused the session's feed call (status challenged). |
| 502 | unsafe_redirect | TikTok Shop redirected outside the requested product or store (for example to a regional storefront or the login page). |
| 502 | unsupported_page | Layout, identity or feed-envelope checks failed, or a non-HTML document was served. |
| 502 | response_too_large | The upstream response exceeded 4 MiB. |
| 502 | payload_too_complex | The embedded JSON exceeded parsing limits. |
| 502 | request_limit | The upstream call budget was exhausted. |
| 502 | upstream_error | Network failure, an unexpected upstream status after one retry, or an unexpected feed code. |
| 503 | busy | All retrieval slots are occupied. |
| 504 | timeout | The 40-second deadline elapsed. |