E-commerce & Marketplaces

TikTok Shop API

The TikTok Shop API returns product, seller, category and review data from TikTok Shop across ten markets — the US, UK, Malaysia, Singapore, Thailand, the Philippines, Vietnam, Indonesia, Japan and Mexico — as clean JSON.

13 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The US keyword search returns product_id, title, url, image, seller_id and seller_name, rating, review_count, sold_count, sku_count, price and list_price with currency, discount_percent and the promotional labels TikTok shows on the card. product_detail adds per-SKU price and stock, products_by_ids refreshes up to 15 US product ids in a single call, and category_tree with category_products walks the marketplace's own taxonomy. ranking_list, premium_offers and recommended_for_you expose the best-seller and deal feeds, seller_profile and seller_catalog cover a shop and its listings, related_products finds comparable items, and reviews returns customer feedback. It is built for social-commerce pricing, seller intelligence and trend tracking. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/tiktok-shop/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "yoga mat",
    "max_results": 30
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "tiktok-shop",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 3442.1,
    "record_count": 30,
    "bytes": 414455,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "limit_reached",
    "market": "us",
    "pages": 1
  },
  "data": {
    "results": [
      {
        "product_id": "[redacted-phone]",
        "title": "Fitvids 1/2\" Thick High Density Exercise Yoga Mat, Carrying Strap, Pale Pink",
        "url": "https://shop.tiktok.com/us/pdp/fitvids-1-2-thick-high-density-yoga-mat-non-slip-portable/[redacted-phone]",
        "slug": "fitvids-1-2-thick-high-density-yoga-mat-non-slip-portable",
        "image": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/f70024901f3649f98e2f8b9ae5a919d6~tplv-fhlh96nyum-crop-webp:2000:2000.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=a6e80448&idc=useast5&from=[redacted-phone]",
        "brand": null,
        "seller_id": "[redacted-phone]",
        "seller_name": "Spreetail",
        "rating": 4.7,
        "review_count": 277,
        "sold_count": 2805,
        "sku_count": 7,
        "labels": [
          "Back to School",
          "Free shipping"
        ],
        "price": 18.99,
        "list_price": 49.99,
        "currency": "USD",
        "currency_symbol": "$",
        "discount_percent": 62,
        "is_promotional": true,
        "price_prefix": "From"
      },
      {
        "product_id": "[redacted-phone]",
        "title": "Yoga Mat 183x61cm Non Slip Exercise Mat for Pilates Workout, Extra Long Large Cushioned Fitness Mat for Women Men, High Density Anti Tear Gym Mat for Home Floor Stretching, Yoga Accessories for Beginner",
        "url": "https://shop.tiktok.com/us/pdp/non-slip-yoga-mat-183x61cm-ideal-for-pilates-workouts/[redacted-phone]",
        "slug": "non-slip-yoga-mat-183x61cm-ideal-for-pilates-workouts",
        "image": "https://p16-oec-general.ttcdn-us.com/tos-maliva-i-o3syd03w52-us/f924653ae5674f118f5d6838c0df6314~tplv-fhlh96nyum-crop-webp:2048:2048.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=a6e80448&idc=useast5&from=[redacted-phone]",
        "brand": null,
        "seller_id": "[redacted-phone]",
        "seller_name": "PeakPerformanceNow",
        "rating": null,
        "review_count": 0,
        "sold_count": 15,
        "sku_count": 5,
        "labels": null,
        "price": 19.95,
        "list_price": 39.89,
        "currency": "USD",
        "currency_symbol": "$",
        "discount_percent": 50,
        "is_promotional": true,
        "price_prefix": "From"
      },
      {
        "product_id": "[redacted-phone]",
        "title": "Extra-Thick 8mm Yoga Mat for Women&Men - Non-Slip Exercise MatHeavy Duty Workout Mat for Home Gym, Pilates & Floor Workouts,for 8 Fitness Ways: Yoga, Pilates, Gymnastics, Push-ups, Jumping Rope, Jumping Jacks, Plank, Squats  Yoga Mat with Strap",
        "url": "https://shop.tiktok.com/us/pdp/extra-thick-8mm-yoga-mat-for-men-women-non-slip-heavy-duty/[redacted-phone]",
        "slug": "extra-thick-8mm-yoga-mat-for-men-women-non-slip-heavy-duty",
        "image": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4a6047fd671343c5a92bf4ba468f746e~tplv-fhlh96nyum-crop-webp:800:800.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=a6e80448&idc=useast5&from=[redacted-phone]",
        "brand": null,
        "seller_id": "[redacted-phone]",
        "seller_name": "PeakPerformanceNow",
        "rating": 4.1,
        "review_count": 7,
        "sold_count": 98,
        "sku_count": 4,
        "labels": [
          "Back to School",
          "Flash sale",
          "Free shipping"
        ],
        "price": 22.29,
        "list_price": 46.89,
        "currency": "USD",
        "currency_symbol": "$",
        "discount_percent": 52,
        "is_promotional": true,
        "price_prefix": "From"
      }
    ],
    "shops": [
      {
        "seller_id": "[redacted-phone]",
        "shop_name": "Spreetail",
        "shop_logo": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/185f19914ae34c7f8fc82eb5f6c7d7da~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=[redacted-phone]",
        "verified": true
      },
      {
        "seller_id": "[redacted-phone]",
        "shop_name": "bala",
        "shop_logo": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/5ee46e970cc34a84a0af1ad705e11648~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=[redacted-phone]",
        "verified": true
      },
      {
        "seller_id": "[redacted-phone]",
        "shop_name": "QVC, Inc",
        "shop_logo": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4ae4940e7bcf436491ab2ddb3363ce9c~tplv-fhlh96nyum-resize-png:300:300.png?dr=12184&t=555f072d&ps=933b5bde&shp=905da467&shcp=d9d491bf&idc=useast5&from=[redacted-phone]",
        "verified": true
      }
    ],
    "query": "yoga mat",
    "has_more": true,
    "pages_fetched": 1,
    "requested_max": 30
  }
}
Actions

What the TikTok Shop API does

ActionDescriptionConcrete use caseKey params
product_detailFull TikTok Shop product record in ONE call, for any of the ten markets — title, structured description, every image, EVERY SKU with its own price and its exact remaining stock as an integer, shipping weight in grams and package size in centimetres, discount and list price, shipping fee and delivery window, category path, the seller's full profile, three customer reviews and the complete star histogram. Nothing here needs a second requestPricing teams call product_detail to get full TikTok Shop product record in ONE call, for any of the ten markets.product_id, market
products_by_idsLook up as many as 15 US products in a SINGLE call — the cheapest way to refresh a list of ids you already hold, at roughly a sixth of the bandwidth per product of fetching each product page. It is also the only route on TikTok Shop with an unambiguous 'not found', which makes it the right way to check whether an id is still live before spending a full product fetch on it. US catalogue onlyMarketplace operators call products_by_ids to look up as many as 15 US products in a SINGLE call.product_ids
category_treeTikTok Shop's own category taxonomy for any of the ten markets — 28 top-level departments from one call, then walk down to level 2 and level 3 by passing a category_id. Every node says whether it is a leaf, so the tree can be crawled to the bottom with no external id list and nothing hard-codedCatalog enrichment teams call category_tree to get tikTok Shop's own category taxonomy for any of the ten markets.market, category_id, slug
category_productsBrowse a whole category and page through it — around 100 products per category, on ALL TEN markets. This is the cheapest source of product ids there is, roughly 1 KB of traffic per product, and it is what replaces keyword search outside the US. Pages are position-independent, so a page that gets throttled is retried automatically without losing your placeRetail analysts call category_products to get browse a whole category and page through it.category_id, market, max_results, slug
searchKeyword search across the US TikTok Shop catalogue, paged for you up to 150 products, with price, rating, sold count and seller on every row. US ONLY — TikTok does not serve keyword search on any other market, at any URL (use category_products there, which goes deeper than search does)Pricing teams call search to get keyword search across the US TikTok Shop catalogue, paged for you up to 150 products, with pr….query, max_results
recommended_shopsShops TikTok itself surfaces for a search term — a keyword-to-seller lookup that answers 'who sells this' rather than 'what is for sale'. Comes free alongside the US search page, so it costs one call and no extra bandwidth. US onlyMarketplace operators call recommended_shops to get shops TikTok itself surfaces for a search term.query
seller_profileA TikTok Shop seller's full public profile on any of the ten markets — shop name, rating, review count, follower count, lifetime units sold, catalogue size, video count and TikTok's own service sub-scores. On the nine non-US markets there is no seller endpoint at all, so this is reached through one of the seller's products; pass a product_id and you get the seller for freeCatalog enrichment teams call seller_profile to get a TikTok Shop seller's full public profile on any of the ten markets.seller_id, product_id, market
seller_catalogEvery product a seller has listed, paged to the end — verified complete against the shop's own advertised product count (12 of 12, 81 of 81, 28 of 28 on three separate markets). Nine markets: US, Malaysia, Singapore, Thailand, Philippines, Vietnam, Indonesia, Japan and Mexico. NOT the UK, where TikTok does not deploy the seller catalogue service at allRetail analysts call seller_catalog to get every product a seller has listed, paged to the end.seller_id, market, max_results
related_productsThe products TikTok itself recommends alongside a given product — its 'you may also like' rail, about 25 full product rows. Useful for competitor sets, substitutes and building a similar-items shelf. Works on all ten marketsPricing teams call related_products to get the products TikTok itself recommends alongside a given product.product_id, market, max_results
ranking_listTikTok Shop's own best-seller board for the US — the 20 products TikTok is promoting as trending right now, in their published rank order, with full price, rating and seller rows. This is the editorial ranking the storefront shows, not a re-sorted search, which is what makes it the winning-products feedMarketplace operators call ranking_list to get tikTok Shop's own best-seller board for the US.none
premium_offersTikTok Shop's US 'premium offers' deal board, paged to the end — around 97 discounted products with the discount percentage and the pre-discount price on every row. A ready-made deals feed rather than a price filter over searchCatalog enrichment teams call premium_offers to get tikTok Shop's US 'premium offers' deal board, paged to the end.max_results
recommended_for_youTikTok Shop's US personalised discovery feed, paged and de-duplicated — 200-plus distinct products of what TikTok is currently pushing to shoppers. The widest trend-discovery surface this API hasRetail analysts call recommended_for_you to get tikTok Shop's US personalised discovery feed, paged and de-duplicated.max_results
reviewsCustomer reviews for a product on any of the ten markets — three full review texts with rating, author, verified-purchase flag and photo, plus the COMPLETE 1-to-5 star histogram and total review count covering every review the product has. Served from a 7 KB endpoint instead of the product page, so a ratings refresh costs a fraction of a re-fetchPricing teams call reviews to get customer reviews for a product on any of the ten markets.product_id, market
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/tiktok-shop/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"yoga mat","max_results":30}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.tiktok-shop.search with {"query":"yoga mat","max_results":30}.
Use cases

Who uses this API and why

  • Pricing teams call search then product_detail to track a product's per-SKU price and stock against its list price.
  • Trend and merchandising tools use ranking_list and premium_offers to see what is selling and what is discounted right now.
  • Seller-intelligence products use seller_profile and seller_catalog to audit a competitor's whole TikTok Shop inventory.
  • Catalogue pipelines use products_by_ids to refresh 15 products per call instead of one request per id.
FAQ

Questions developers ask before integrating

What is the TikTok Shop API?

TikTok Shop API is a ReefAPI endpoint group for products, per-sku stock, sellers, reviews and best-sellers across 10 markets. It returns live JSON through POST requests under /tiktok-shop/v1.

Is the TikTok Shop API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. TikTok Shop calls use the same shared credit balance as every other ReefAPI engine.

Do I need a TikTok Shop login or account?

No login to TikTok Shop is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the TikTok Shop data?

The page example is captured from a live product_detail call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the TikTok Shop API use?

TikTok Shop actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call TikTok Shop from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call tiktok-shop actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the TikTok Shop API a TikTok Shop scraper?

It is the managed alternative to a DIY TikTok Shop scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same products, per-sku stock, sellers, reviews and best-sellers across 10 markets back as clean JSON.

Why does my TikTok Shop scraper keep getting blocked?

Most TikTok Shop scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / tiktok-shop

TikTok Shop

Products, per-SKU stock, sellers, reviews and best-sellers across 10 markets.

base /tiktok-shop/v113 endpoints
post/tiktok-shop/v1/product_detail2 credits

Full TikTok Shop product record in ONE call, for any of the ten markets — title, structured description, every image, EVERY SKU with its own price and its exact remaining stock as an integer, shipping weight in grams and package size in centimetres, discount and list price, shipping fee and delivery window, category path, the seller's full profile, three customer reviews and the complete star histogram. Nothing here needs a second request

ParameterAllowed / rangeDescription
product_idrequiredTikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.
market = usoptionalus · gb · my · sg · th · ph · vn · id · jp · mxWhich TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.
Try in playground →
post/tiktok-shop/v1/products_by_ids1 credit

Look up as many as 15 US products in a SINGLE call — the cheapest way to refresh a list of ids you already hold, at roughly a sixth of the bandwidth per product of fetching each product page. It is also the only route on TikTok Shop with an unambiguous 'not found', which makes it the right way to check whether an id is still live before spending a full product fetch on it. US catalogue only

ParameterAllowed / rangeDescription
product_idsrequiredUp to 15 TikTok Shop product ids. Accepts a JSON array or a comma-separated string. More than 15 ids are split into several upstream calls automatically.
Try in playground →
post/tiktok-shop/v1/category_tree1 credit

TikTok Shop's own category taxonomy for any of the ten markets — 28 top-level departments from one call, then walk down to level 2 and level 3 by passing a category_id. Every node says whether it is a leaf, so the tree can be crawled to the bottom with no external id list and nothing hard-coded

ParameterAllowed / rangeDescription
market = usoptionalus · gb · my · sg · th · ph · vn · id · jp · mxWhich TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.
category_idoptionalExpand this category's children instead of the root. Omit for the 28 top-level departments. Ids come from this action, or from any product's categories[].
slugoptionalURL slug of the category, as returned in slug by this action. Optional — a placeholder is used when omitted, since TikTok routes on the numeric id.
Try in playground →
post/tiktok-shop/v1/category_products1 credit

Browse a whole category and page through it — around 100 products per category, on ALL TEN markets. This is the cheapest source of product ids there is, roughly 1 KB of traffic per product, and it is what replaces keyword search outside the US. Pages are position-independent, so a page that gets throttled is retried automatically without losing your place

ParameterAllowed / rangeDescription
category_idrequiredNumeric category id from the category_tree action or from a product's categories[]. Leaf categories give the most focused list, but any level works.
market = usoptionalus · gb · my · sg · th · ph · vn · id · jp · mxWhich TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.
max_results = 50optional1–200How many products to return, 1-200 (default 50). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.
slugoptionalCategory URL slug from category_tree. Optional; it only makes the referring page URL exact.
Try in playground →
post/tiktok-shop/v1/seller_profile1 credit

A TikTok Shop seller's full public profile on any of the ten markets — shop name, rating, review count, follower count, lifetime units sold, catalogue size, video count and TikTok's own service sub-scores. On the nine non-US markets there is no seller endpoint at all, so this is reached through one of the seller's products; pass a product_id and you get the seller for free

ParameterAllowed / rangeDescription
seller_idoptionalTikTok Shop seller id. Every product record carries it under seller_id, so the usual flow is search/category → product → seller_id → this action.
product_idoptionalTikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.
market = usoptionalus · gb · my · sg · th · ph · vn · id · jp · mxWhich TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.
Try in playground →
post/tiktok-shop/v1/seller_catalog1 credit

Every product a seller has listed, paged to the end — verified complete against the shop's own advertised product count (12 of 12, 81 of 81, 28 of 28 on three separate markets). Nine markets: US, Malaysia, Singapore, Thailand, Philippines, Vietnam, Indonesia, Japan and Mexico. NOT the UK, where TikTok does not deploy the seller catalogue service at all

ParameterAllowed / rangeDescription
seller_idrequiredTikTok Shop seller id. Every product record carries it under seller_id, so the usual flow is search/category → product → seller_id → this action.
market = usoptionalus · gb · my · sg · th · ph · vn · id · jp · mxWhich TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.
max_results = 60optional1–240How many products to return, 1-240 (default 60). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.
Try in playground →
post/tiktok-shop/v1/ranking_list2 credits

TikTok Shop's own best-seller board for the US — the 20 products TikTok is promoting as trending right now, in their published rank order, with full price, rating and seller rows. This is the editorial ranking the storefront shows, not a re-sorted search, which is what makes it the winning-products feed

Try in playground →
post/tiktok-shop/v1/premium_offers1 credit

TikTok Shop's US 'premium offers' deal board, paged to the end — around 97 discounted products with the discount percentage and the pre-discount price on every row. A ready-made deals feed rather than a price filter over search

ParameterAllowed / rangeDescription
max_results = 80optional1–240How many deal products to return, 1-240 (default 80). Values above the maximum are clamped, not rejected, and a value below one page still costs one upstream call. Fewer results really is cheaper here — the page size is passed through to TikTok, so asking for 5 transfers roughly a third of what 20 does.
Try in playground →
post/tiktok-shop/v1/reviews1 credit

Customer reviews for a product on any of the ten markets — three full review texts with rating, author, verified-purchase flag and photo, plus the COMPLETE 1-to-5 star histogram and total review count covering every review the product has. Served from a 7 KB endpoint instead of the product page, so a ratings refresh costs a fraction of a re-fetch

ParameterAllowed / rangeDescription
product_idrequiredTikTok Shop product id — the 19-digit number at the end of a product URL (shop.tiktok.com/us/pdp/product/1729450858130215273). It is a stable string, returned verbatim by every action, and it never changes type or gets re-keyed between surfaces.
market = usoptionalus · gb · my · sg · th · ph · vn · id · jp · mxWhich TikTok Shop market to read. Ten are supported and all ten are live-verified with the correct local currency: us (USD), gb (GBP), my (MYR), sg (SGD), th (THB), ph (PHP), vn (VND), id (IDR), jp (JPY), mx (MXN). The market decides the storefront, the currency and the catalogue — the same product id can be absent from another market. Brazil is listed by TikTok but is not reachable and is not offered; every European market other than the UK is a seller-side region, not a shop.
Try in playground →