# momoshop API — momo購物網, Taiwan's #1 online store: search, category listings, full product records with every price and per-variant stock, and reviews

> Keyword search on momoshop.com.tw. Each row carries the headline price and the struck 市售價, total stock, rating and rating count, the source's sales band (總銷量>1,000), the fast-delivery mark, coupon / gift / instant-discount flags and whether momo or a third-party shop sells it; paid placements are kept apart in `ads`. Filters: search category, brand id, price range, fast delivery, coupon, in stock, 0% instalments, convenience-store pickup or payment, TV shopping, video, instant discount, cash on delivery, chilled delivery, subscription, large-appliance delivery, ship-from; seven sorts. Every filter was measured against the unfiltered total; ones the site ignores are not offered. Facets (search categories and brands with counts) come with every answer.
> ReefAPI engine `momoshop` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/momoshop/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/momoshop/v1/search — 2 credits
Keyword search on momoshop.com.tw. Each row carries the headline price and the struck 市售價, total stock, rating and rating count, the source's sales band (總銷量>1,000), the fast-delivery mark, coupon / gift / instant-discount flags and whether momo or a third-party shop sells it; paid placements are kept apart in `ads`. Filters: search category, brand id, price range, fast delivery, coupon, in stock, 0% instalments, convenience-store pickup or payment, TV shopping, video, instant discount, cash on delivery, chilled delivery, subscription, large-appliance delivery, ship-from; seven sorts. Every filter was measured against the unfiltered total; ones the site ignores are not offered. Facets (search categories and brands with counts) come with every answer.

**Parameters:**
- `query` (string, required) — Search words in Traditional Chinese or English (e.g. `耳機`, `洗髮精`, `iPhone`). Full-width characters are normalised (NFKC) — the site itself does not fold them ('ＱＣＹ' 27 results vs 'QCY' 35).
- `category` (string, optional) — Search-tree category code from this action's own `facets.categories` (e.g. `1100000000` 手機, `1100700000` 音訊設備) or a product's `search_category_code`. The product page's breadcrumb codes (4200000000 …) belong to a different tree and answer 0 here; use the `category` action for those. An unknown code answers an empty result.
- `brand_id` (string, optional) — momo's numeric brand id from `facets.brands[].brand_id` or a product's `brand.brand_id` (e.g. `20160808155618011` Apple). The source ignores brand NAMES, so only the id is accepted.
- `min_price` (integer, optional) — Lowest price in TWD (the headline price).
- `max_price` (integer, optional) — Highest price in TWD.
- `fast_delivery` (boolean, optional) — `true` = only 快速到貨 (momo fast delivery) items.
- `has_coupon` (boolean, optional) — `true` = only items a coupon (折價券) applies to.
- `in_stock` (boolean, optional) — `true` = only items with stock (商品有量).
- `zero_interest` (boolean, optional) — `true` = only items with 0% instalments (0利率).
- `store_pickup` (boolean, optional) — `true` = only items deliverable to a convenience store (超商取貨).
- `tv_shopping` (boolean, optional) — `true` = only momo TV-shopping items (電視購物).
- `has_video` (boolean, optional) — `true` = only items with a product video (有影片).
- `instant_discount` (boolean, optional) — `true` = only items in an instant-discount campaign (現折活動).
- `cash_on_delivery` (boolean, optional) — `true` = only items payable on delivery (貨到付款).
- `store_payment` (boolean, optional) — `true` = only items payable at a convenience store (超商付款).
- `chilled_delivery` (boolean, optional) — `true` = only chilled / frozen home delivery items (低溫宅配).
- `subscription` (boolean, optional) — `true` = only items with scheduled / split delivery (定期配/分次配).
- `appliance_install` (boolean, optional) — `true` = only large appliances with delivery and installation (大家電安心配).
- `appliance_fast` (boolean, optional) — `true` = only large appliances with fast delivery (大家電快配).
- `ship_from` (enum, optional) — Where the item ships from (出貨來源). [one of: momo_express, vendor, cross_border]
- `sort` (enum, optional, default "relevance") — Result order, the site's own sort tabs. [one of: relevance, monthly_sales, newest, price_asc, price_desc, rating_desc, rating_asc]
- `page` (integer, optional, default 1) — Result page. A page past the source's last page (`total_pages`) answers NOT_FOUND.

**Returns:** results[]{product_id, title, subtitle (the source's promotion line, e.g. 滿2000折250), url, image, title_brand, price (headline TWD), list_price (市售價 when above price), price_note, currency=TWD, stock (the card's total stock), is_sold_out, rating (0-5), rating_count, total_sales_text, total_sales_min, fast_delivery, icons[], has_coupon, has_gift, instant_discount (現折活動), adult_only, on_sale_from, seller_type (momo|third_party), is_ad} + ads[] (paid rows, same shape) + total (null when the source gives none) + total_pages + page + has_more + facets{categories[]{code, name, count}, brands[]{name, brand_id, count}}

**Example request body:**
```json
{
  "query": "耳機"
}
```

### POST https://api.reefapi.com/momoshop/v1/category — 2 credits
Every product of one momo shop category (the category pages of momoshop.com.tw), 20 per page, with the same row shape as `search`, the category's breadcrumb and its brand list with counts. Takes the shop-tree code from a product's `category_path[].code` (e.g. `4201700090` 真無線 earbuds, `4200000000` 3C週邊).

**Parameters:**
- `category` (string, required) — momo shop-tree category code (10 digits) from a product's `category_path[].code`, e.g. `4201700090` (真無線), `4201700000` (耳機/藍牙耳機), `4200000000` (3C週邊). An unknown code answers NOT_FOUND.
- `min_price` (integer, optional) — Lowest price in TWD.
- `max_price` (integer, optional) — Highest price in TWD.
- `page` (integer, optional, default 1) — Result page. A page past the source's last page (`total_pages`) answers NOT_FOUND.

**Returns:** results[]{product_id, title, subtitle (the source's promotion line, e.g. 滿2000折250), url, image, title_brand, price (headline TWD), list_price (市售價 when above price), price_note, currency=TWD, stock (the card's total stock), is_sold_out, rating (0-5), rating_count, total_sales_text, total_sales_min, fast_delivery, icons[], has_coupon, has_gift, instant_discount (現折活動), adult_only, on_sale_from, seller_type (momo|third_party), is_ad} + total + total_pages + page + has_more + category_path[]{code, name} + brands[]{name, brand_id, count}

**Example request body:**
```json
{
  "category": "4201700090"
}
```

### POST https://api.reefapi.com/momoshop/v1/product — 3 credits
One momo product in full: title and subtitle, brand and brand id, images, video, the shop category path and the search category, every price the page prints (headline price and its label — 促銷價, or 限時折後價 during a time-limited discount — the promotion price and the market price), every variant with its own stock and delivery promise, delivery options with their fees and free-shipping thresholds, payment methods and the card offer, warranty, gifts, the sales band and category ranking, the spec table and description text, and for third-party listings the shop (name, rating, reply rate, defect rate, product count). One extra call adds the rating and rating count.

**Parameters:**
- `product_id` (string, optional) — momo product code, the `product_id` of any search or category row: digits for momo's own listings (e.g. `13414517`, the number in momoshop.com.tw/product/<code> or GoodsDetail.jsp?i_code=<code>) or `TP` + 14 digits for third-party shop listings (e.g. `TP00042480000305`). A product URL is accepted too. Provide product_id OR url.
- `url` (string, optional) — A momoshop.com.tw product URL; alternative to product_id.

**Returns:** product{product_id, title, subtitle, url, seller_type, brand{name, brand_id}, title_brand, images[], video_url, category_path[]{code, name}, search_category_code, search_category_path[], prices{price, price_label, promo_price, list_price, price_note, time_limited, currency=TWD, prices_as_labeled[]{label, price}}, in_stock, stock_total, stock_total_is_lower_bound, variants[]{variant_id, name, option_a, option_b, price, stock, stock_capped, low_stock_tip, delivery_text, image}, variant_count, delivery_text, fast_delivery, delivery_options[]{method, code, terms, promotions[]}, payment_methods[], card_offer, warranty, max_order_quantity, on_sale_from, gifts[], has_coupon, adult_only, icons[], tags[], total_sales_text, total_sales_min, ranking{list, text, search_category_code}, specs[]{name, value}, features[], spec_text, seller{shop_id, name, rating, reply_rate, defect_rate_pct, product_count, status, cross_border, logo}, supplier_code, rating, rating_count, rating_count_text, rating_count_is_approx, witness{ldjson_prices[], analytics_price, analytics_category[]}}

**Example request body:**
```json
{
  "product_id": "13414517"
}
```

### POST https://api.reefapi.com/momoshop/v1/reviews — 1 credit
Reviews (評價) of one momo product, 20 per page: star rating, text, date, the buyer's masked name as momo shows it, the variant bought, photos and video, likes, the seller's reply; plus the product's average rating, rating count, the count per star, and the aspect scores (商品品質 …).

**Parameters:**
- `product_id` (string, optional) — momo product code, the `product_id` of any search or category row: digits for momo's own listings (e.g. `13414517`, the number in momoshop.com.tw/product/<code> or GoodsDetail.jsp?i_code=<code>) or `TP` + 14 digits for third-party shop listings (e.g. `TP00042480000305`). A product URL is accepted too. Provide product_id OR url.
- `url` (string, optional) — A momoshop.com.tw product URL; alternative to product_id.
- `filter` (enum, optional, default "with_text") — Which reviews. The source lists nothing without a filter. [one of: with_text, with_media, 5, 4, 3, 2, 1]
- `page` (integer, optional, default 1) — Result page. A page past the source's last page (`total_pages`) answers NOT_FOUND.

**Returns:** reviews[]{review_id, rating, content, date, reviewer, variant, like_count, images[], video_url, seller_reply, seller_reply_date} + rating + rating_count + with_text_count + with_media_count + star_counts{5..1} + counts_are_approx + rating_count_text + score_breakdown[] + page + total_pages + has_more

**Example request body:**
```json
{
  "product_id": "13414517"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=momoshop
- Human docs page: https://reefapi.com/docs/momoshop
- Overview page: https://reefapi.com/momoshop-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
