E-commerce & Marketplaces

Shopee API

The Shopee API returns products, per-variant stock, seller profiles and shop vouchers from seven Southeast-Asian Shopee markets — Indonesia, Vietnam, Thailand, the Philippines, Malaysia, Singapore and Taiwan — as clean JSON.

4 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 primary product endpoint returns an item's title, plain-text and block-structured description, brand, condition, currency, item_status, created_at, images, videos, the category path, per-variant stock and the shop's vouchers; Shopee withholds the price on that surface, so the response reports price_available and names the fields it could not carry rather than inventing them. shop_showcase is the surface that does carry pricing — price, price_before_discount, discount_percent, the rating breakdown, review_count and sold counts. batch resolves a list of items in one call and bills delivered products only, and shop returns a seller profile with item_count, follower_count, ratings, response rate and the official and verified flags. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, product, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/shopee/v1/product",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "shop_id": 165796339,
    "item_id": 4669874676,
    "market": "id"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "shopee",
    "endpoint": "product",
    "mode": "live",
    "latency_ms": 2307.5,
    "record_count": 1,
    "bytes": 936710,
    "cache_hit": false,
    "market": "id",
    "variant_count": 1,
    "voucher_count": 0,
    "price_available": false,
    "removed_fields": [
      "product_price.price",
      "product_price.price_before_discount",
      "product_price.discount"
    ]
  },
  "data": {
    "product": {
      "market": "id",
      "market_domain": "shopee.co.id",
      "item_id": 4669874676,
      "shop_id": 165796339,
      "url": "https://shopee.co.id/product/[redacted-phone]/[redacted-phone]",
      "canonical_url": null,
      "title": "A 81 Herbal Deodorant Spray Natural 60ml bpom",
      "description": "No BPOM RI NA [redacted-phone]\nProduk abi herbal ganti Nama jadi A81 herbal\n\nHATI” PRODUK PALSU YG ASLI ADA NO BATCH BARCODE DI KEMASAN DAN BOTOL\n\nproduk fresh selalu ready ya ..\n\nCara penggunaan\n- Hari pertama Sampai dengan 2 Minggu pemakaian, gunakan 2 x sehari pastikan ketiak sudah kering saat mau di semprot abi herbal ya\n- selanjutnya tergantung kebutuhan(note untuk yang bau ketiak nya udh parah tolong bagian ketiak semua baju saat cuci di sikat pakai sabun bagian ketiak nya supaya bau yg lama tidak naik lagi)\n\n-Manfaat abi herbal:\n1. Dapat menghilangkan bau badan, terutama pada bagian ket",
      "description_paragraphs": [
        {
          "type": "text",
          "text": "No BPOM RI NA [redacted-phone]"
        },
        {
          "type": "text",
          "text": "Produk abi herbal ganti Nama jadi A81 herbal"
        },
        {
          "type": "text",
          "text": "HATI” PRODUK PALSU YG ASLI ADA NO BATCH BARCODE DI KEMASAN DAN BOTOL"
        }
      ],
      "rich_description_paragraphs": null,
      "brand": "A 81 HERBAL",
      "brand_id": 3558336,
      "condition": "new",
      "currency": "IDR",
      "currency_scale": 100000,
      "item_status": "normal",
      "created_at": "[redacted-phone]T07:09:52Z",
      "images": [
        {
          "id": "id-[redacted-phone]ztp-mrl2nuvw1ybm31",
          "url": "https://down-id.img.susercontent.com/file/id-[redacted-phone]ztp-mrl2nuvw1ybm31"
        },
        {
          "id": "id-[redacted-phone]ztq-mrfm921ynd3823",
          "url": "https://down-id.img.susercontent.com/file/id-[redacted-phone]ztq-mrfm921ynd3823"
        },
        {
          "id": "sg-[redacted-phone]epd6ym9wkv97",
          "url": "https://down-id.img.susercontent.com/file/sg-[redacted-phone]epd6ym9wkv97"
        }
      ],
      "image_count": 5,
      "videos": [],
      "categories": [
        {
          "id": 100630,
          "name": "[redacted-name]",
          "level": 1
        },
        {
          "id": 102002,
          "name": "[redacted-name]",
          "level": 2
        },
        {
          "id": 102008,
          "name": "Deodoran",
          "level": 3
        }
      ],
      "frontend_categories": [
        {
          "id": 11043145,
          "name": "[redacted-name]",
          "level": 1
        },
        {
          "id": 11043146,
          "name": "[redacted-name]",
          "level": 2
        },
        {
          "id": 11043152,
          "name": "Deodoran",
          "level": 3
        }
      ],
      "category_id": 100630,
      "attributes": [
        {
          "id": 100016,
          "name": "[redacted-name]",
          "value": "Paket Hemat",
          "value_id": 381
        },
        {
          "id": 100019,
          "name": "[redacted-name]",
          "value": "Travel Size",
          "value_id": 727
        },
        {
          "id": 100036,
          "name": "Formulasi",
          "value": "Spray",
          "value_id": 801
        }
      ],
      "variants": [
        {
          "model_id": 52524008694,
          "name": null,
          "stock": 10,
          "tier_index": [
            "[trimmed-depth]"
          ],
          "sku_image_url": null,
          "is_pre_order": false,
          "estimated_days": 2,
          "measurements": null,
          "status": 1,
          "price": null
        }
      ],
      "variant_count": 1,
      "variant_options": [
        {
          "name": null,
          "options": [
            "[trimmed-depth]"
          ],
          "images": null,
          "type": 0
        }
      ],
      "stock": 10,
      "stock_source": "sum_of_variant_stock",
      "shop": {
        "shop_id": 165796339,
        "location": "KOTA TANGERANG",
        "name": null,
        "url": "https://shopee.co.id/shop/[redacted-phone]",
        "shopee_verified": null,
        "official_shop_label": true
      },
      "shop_vouchers": [],
      "seller_services": [
        {
          "title": "15 Hari Pengembalian",
          "description": "Untuk memastikan kepuasanmu, Shopee Mall memberikan periode pengembalian yang lebih panjang (15 hari setelah barang diterima).",
          "url": "https://shopee.co.id/m/bebas-pengembalian"
        },
        {
          "title": "100% Original",
          "description": "Produk ini dijamin 100% asli dan akan dikirimkan secara langsung. Jika produk yang diterima tidak asli, kamu dapat mengajukan Pengembalian Dana.",
          "url": "https://shopee.co.id/m/shopee-garansi-ori"
        },
        {
          "title": "COD-Cek Dulu",
          "description": "Bayar pesanan di tempat. Kamu berhak untuk membuka dan memeriksa barang sebelum melakukan pembayaran ke Kurir.",
          "url": "https://shopee.co.id/m/tentang-cod-cekdulu"
        }
      ],
      "wholesale_tiers": [
        {
          "min_quantity": 3,
          "max_quantity": null,
          "price": null
        }
      ],
      "size_chart": null,
      "logistics": {
        "is_pre_order": false,
        "estimated_days": 2,
        "is_free_shipping": false,
        "max_quantity_per_order": null,
        "min_purchase_quantity": 1,
        "cross_border": false
      },
      "flags": {
        "is_adult": false,
        "is_fashion_item": false,
        "is_prescription_item": false,
        "has_video": false
      },
      "price": null,
      "price_before_discount": null,
      "discount": null,
      "rating": null,
      "review_count": null,
      "sold_count": null,
      "weight": null,
      "dimensions": null,
      "shipping": null,
      "unavailable": {
        "price": "Shopee deletes the price block from the anonymous product page before serving it — its own `removed_fields` manifest lists product_price.price. Use the shop_showcase action for the one item per shop that Shopee still prices publicly.",
        "price_before_discount": "Removed by Shopee together with the price on most markets.",
        "discount": "Removed by Shopee together with the price.",
        "rating": "Removed by Shopee — both product_review.rating_star and item.item_rating are null on the anonymous page.",
        "review_count": "Removed by Shopee (cmt_count is null).",
        "sold_count": "Removed by Shopee (historical_sold and global_sold are null).",
        "stock_total_upstream": "Removed by Shopee. The `stock` field this API returns is the sum of per-variant stock, which Shopee does still publish in full.",
        "weight": "There is no weight key anywhere in Shopee's 128-field product schema, on any market. Roughly 40% of products mention a weight in free-text description or attributes and only ~17% carry it as a structured attribute, so it is left to the caller to read `attributes` / `description` rather than reported as a number.",
        "dimensions": "There is no length/width/height/dimension key in Shopee's product schema. Same situation as weight — sometimes present as an attribute or in the size chart.",
        "shipping": "product_shipping and shipping_info are null on the anonymous page; only the is_free_shipping flag and estimated_days survive (both returned under logistics).",
        "reviews": "No review text or histogram exists on this page and the ratings route is gated.",
        "related_products": "product_attributes.related_items is an empty list on every product.",
        "shop_name": "shop_detailed is null on the product page. The shop action returns the seller's name, rating and metrics for the same shop_id at ~9 KB."
      },
      "source_removed_fields": [
        "product_price.price",
        "product_price.price_before_discount",
        "product_price.discount"
      ],
      "document_bytes": 936710
    }
  }
}
Actions

What the Shopee API does

ActionDescriptionConcrete use caseKey params
productFull Shopee product detail by shop id + item id, or by product link. Title, description, every image, every variant with its own live stock count, variant option axes, attributes, 3-level category path, brand, condition, currency, seller location, product videos with direct MP4 links, and the seller's active voucher codes with their minimum spend. Works the same on all seven markets. Two limits stated up front: Shopee removes PRICE, rating, review count and sold count from the public product page for everyone, so this action returns them as null (the shop_showcase action returns a real live price for one item per shop); and Shopee publishes no weight or dimensions field at allPricing teams call product to get full Shopee product detail by shop id + item id, or by product link.shop_id, item_id, url, market
batchUp to 20 Shopee products in ONE call, fetched in parallel — the same data as the product action, at a lower per-product cost and in roughly the time a single product takes. Each entry succeeds or fails on its own: one dead id does not spoil the callMarketplace operators call batch to get up to 20 Shopee products in ONE call, fetched in parallel.items, market
shopSeller profile for a Shopee shop by shop id or shop handle — name, description, logo and cover, country and city, listing count, followers, rating with its good/neutral/bad split, response rate and response time, order preparation time, cancellation rate, official-shop and verified-seller status, and when the shop opened. This is also where the product page's missing shop NAME comes from, and it tells you in advance whether a shop's product pages can be read at allCatalog enrichment teams call shop to get seller profile for a Shopee shop by shop id or shop handle.shop_id, username, market
shop_showcaseThe one product Shopee itself publishes for a shop — WITH a real, live price, discount, rating and sold count. This is the only place a Shopee price is available publicly, and it is shop-addressed, not product-addressed: Shopee picks the item, one per shop. Use it to price-sample a seller, not to price a product you nameRetail analysts call shop_showcase to get the one product Shopee itself publishes for a shop.shop_id, username, market
Code samples

Call product from your stack

curl -X POST https://api.reefapi.com/shopee/v1/product \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"shop_id":165796339,"item_id":4669874676,"market":"id"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.shopee.product with {"shop_id":165796339,"item_id":4669874676,"market":"id"}.
Use cases

Who uses this API and why

  • Catalogue and brand-protection teams call product to pull an item's full description, images, variants and category path across seven Shopee markets.
  • Price-intelligence tools use shop_showcase to read a showcased item's current price, discount percent and sold counts.
  • Marketplace analysts use shop to size a seller — item_count, follower_count, rating breakdown and response rate — before ingesting its listings.
  • Bulk enrichment pipelines send a list of items to batch and act on the summary totals instead of walking every row.
FAQ

Questions developers ask before integrating

What is the Shopee API?

Shopee API is a ReefAPI endpoint group for southeast-asian marketplace products, variants, sellers and shop vouchers. It returns live JSON through POST requests under /shopee/v1.

Is the Shopee API free to try?

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

Do I need a Shopee login or account?

No login to Shopee 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 Shopee data?

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

How many credits does the Shopee API use?

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

Can I call Shopee from an AI assistant or MCP client?

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

Is the Shopee API a Shopee scraper?

It is the managed alternative to a DIY Shopee 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 southeast-asian marketplace products, variants, sellers and shop vouchers back as clean JSON.

Why does my Shopee scraper keep getting blocked?

Most Shopee 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 / shopee

Shopee

Southeast-Asian marketplace products, variants, sellers and shop vouchers.

base /shopee/v14 endpoints
post/shopee/v1/product2 credits

Full Shopee product detail by shop id + item id, or by product link. Title, description, every image, every variant with its own live stock count, variant option axes, attributes, 3-level category path, brand, condition, currency, seller location, product videos with direct MP4 links, and the seller's active voucher codes with their minimum spend. Works the same on all seven markets. Two limits stated up front: Shopee removes PRICE, rating, review count and sold count from the public product page for everyone, so this action returns them as null (the shop_showcase action returns a real live price for one item per shop); and Shopee publishes no weight or dimensions field at all

ParameterAllowed / rangeDescription
shop_idoptional1–Shopee shop id — the FIRST number in a product link, https://shopee.co.id/product/<shop_id>/<item_id>. A value that is not a positive whole number is reported as an invalid parameter before any request is made, so a typo costs nothing.
item_idoptional1–Shopee item id — the SECOND number in a product link, https://shopee.co.id/product/<shop_id>/<item_id>. There is no keyword search on this API (Shopee serves no listing data to anyone but its own app), so ids have to come from links, your own catalogue or your affiliate feed.
urloptionalA full Shopee product link instead of the two ids — both shapes work, /product/<shop_id>/<item_id> and the share link <product-slug>-i.<shop_id>.<item_id>. The market is taken from the link, so `market` is not needed. Overrides shop_id/item_id when both are given.
market = idoptionalid · vn · th · ph · my · sg · twWhich Shopee marketplace to read. The seven listed here are the ones this API is measured on; Shopee also runs Brazil, Mexico, Chile and Colombia, and those are rejected rather than half-served. Ignored when you pass `url` — the market is read from the link. Ids are per-market: the same item_id on a different market is a different product or nothing at all.
Try in playground →
post/shopee/v1/batch3 credits

Up to 20 Shopee products in ONE call, fetched in parallel — the same data as the product action, at a lower per-product cost and in roughly the time a single product takes. Each entry succeeds or fails on its own: one dead id does not spoil the call

ParameterAllowed / rangeDescription
itemsrequiredUp to 20 products. Each entry is either "<shop_id>/<item_id>" or a full Shopee product link — you can mix the two. A plain comma-separated string works as well as a JSON array. Entries beyond 20 are rejected rather than silently dropped, so a truncated list never looks like a complete answer.
market = idoptionalid · vn · th · ph · my · sg · twWhich Shopee marketplace to read. The seven listed here are the ones this API is measured on; Shopee also runs Brazil, Mexico, Chile and Colombia, and those are rejected rather than half-served. Ignored when you pass `url` — the market is read from the link. Ids are per-market: the same item_id on a different market is a different product or nothing at all.
Try in playground →
post/shopee/v1/shop1 credit

Seller profile for a Shopee shop by shop id or shop handle — name, description, logo and cover, country and city, listing count, followers, rating with its good/neutral/bad split, response rate and response time, order preparation time, cancellation rate, official-shop and verified-seller status, and when the shop opened. This is also where the product page's missing shop NAME comes from, and it tells you in advance whether a shop's product pages can be read at all

ParameterAllowed / rangeDescription
shop_idoptional1–Shopee shop id — the FIRST number in a product link, https://shopee.co.id/product/<shop_id>/<item_id>. A value that is not a positive whole number is reported as an invalid parameter before any request is made, so a typo costs nothing.
usernameoptionalShop handle instead of shop_id — the name in a shop link, https://shopee.co.id/<username>. Verified to work on every shop endpoint. Give either this or shop_id.
market = idoptionalid · vn · th · ph · my · sg · twWhich Shopee marketplace to read. The seven listed here are the ones this API is measured on; Shopee also runs Brazil, Mexico, Chile and Colombia, and those are rejected rather than half-served. Ignored when you pass `url` — the market is read from the link. Ids are per-market: the same item_id on a different market is a different product or nothing at all.
Try in playground →
post/shopee/v1/shop_showcase1 credit

The one product Shopee itself publishes for a shop — WITH a real, live price, discount, rating and sold count. This is the only place a Shopee price is available publicly, and it is shop-addressed, not product-addressed: Shopee picks the item, one per shop. Use it to price-sample a seller, not to price a product you name

ParameterAllowed / rangeDescription
shop_idoptional1–Shopee shop id — the FIRST number in a product link, https://shopee.co.id/product/<shop_id>/<item_id>. A value that is not a positive whole number is reported as an invalid parameter before any request is made, so a typo costs nothing.
usernameoptionalShop handle instead of shop_id — the name in a shop link, https://shopee.co.id/<username>. Verified to work on every shop endpoint. Give either this or shop_id.
market = idoptionalid · vn · th · ph · my · sg · twWhich Shopee marketplace to read. The seven listed here are the ones this API is measured on; Shopee also runs Brazil, Mexico, Chile and Colombia, and those are rejected rather than half-served. Ignored when you pass `url` — the market is read from the link. Ids are per-market: the same item_id on a different market is a different product or nothing at all.
Try in playground →