# Musinsa API — Korea's #1 fashion store: search, brand and category listings, full product records with per-size stock, reviews and the live sales ranking

> Keyword search on musinsa.com (무신사 스토어). Each row carries four named prices (normal, sale, coupon, final), the discount, review count and score, sold-out flag and brand. Filters: gender, category, brand, price range, on-sale, minimum discount, colour, size, sold-out inclusion, exclusives, coupon, outlet/boutique store, used listings; ten sort orders. Every filter was measured against the unfiltered total; filters the site silently ignores are not offered.
> ReefAPI engine `musinsa` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/musinsa/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/musinsa/v1/search — 2 credits
Keyword search on musinsa.com (무신사 스토어). Each row carries four named prices (normal, sale, coupon, final), the discount, review count and score, sold-out flag and brand. Filters: gender, category, brand, price range, on-sale, minimum discount, colour, size, sold-out inclusion, exclusives, coupon, outlet/boutique store, used listings; ten sort orders. Every filter was measured against the unfiltered total; filters the site silently ignores are not offered.

**Parameters:**
- `query` (string, required) — Search words in Korean or English (e.g. `맨투맨`, `nike`, `패딩`). Full-width / compatibility characters are normalised (NFKC).
- `category` (string, optional) — Musinsa category code: 3 digits per level (e.g. `001` 상의 tops, `001005` 맨투맨/스웨트셔츠, `002` 아우터 outerwear, `003` 바지 trousers, `103` 신발 shoes, `104` 뷰티 beauty). A product's `category_path[].code` is accepted as-is. An unknown code answers an empty result (total 0).
- `brand` (string, optional) — Brand slug as Musinsa writes it in the brand URL musinsa.com/brand/<slug> and in every row's `brand` (e.g. `musinsastandard`, `nike`, `covernat`).
- `min_price` (integer, optional) — Minimum price in KRW, applied by the source to `final_price` (the price shown, after the product coupon and any extra discount).
- `max_price` (integer, optional) — Maximum price in KRW, applied to `final_price` like `min_price`.
- `on_sale` (boolean, optional) — `true` = only discounted products (세일). `false` is the same as leaving it out.
- `min_discount` (enum, optional) — Only products whose total discount (`final_discount_rate`, coupon included) is at least this many percent. [one of: 10, 20, 30, 40, 50, 60, 70, 80]
- `color` (string, optional) — Musinsa colour code in capitals, as in the site's colour facet (e.g. `BLACK`, `WHITE`, `GRAY`, `NAVY`, `BEIGE`, `IVORY`, `KHAKI`, `SKYBLUE`). An unknown code answers an empty result.
- `size` (enum, optional) — Standard clothing size (the site's 사이즈 facet). [one of: XS, S, M, L, XL, XXL]
- `include_sold_out` (boolean, optional, default false) — `true` also returns sold-out (품절) products; by default the site hides them.
- `exclusive` (boolean, optional) — `true` = only Musinsa exclusives (단독).
- `coupon` (boolean, optional) — `true` = only products with a coupon (쿠폰).
- `store` (enum, optional) — Only one Musinsa sub-store. [one of: outlet, boutique]
- `used` (boolean, optional) — `true` = the second-hand (USED 중고) listings instead of new products; rows then carry `used_condition`.
- `gender` (enum, optional, default "all") — Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch). [one of: all, men, women]
- `sort` (enum, optional, default "popular") — Result order, the site's own sort codes. [one of: popular, newest, discount, price_asc, price_desc, reviews, sales_1d, sales_1w, sales_1m, sales_3m]
- `page` (integer, optional, default 1) — Result page. The source stops at page 1000 and at its own last page (`total_pages`).
- `page_size` (integer, optional, default 60) — Rows per page, 1-100 (the site uses 60).

**Returns:** results[]{product_id, title, url, image, brand, brand_name, gender, normal_price (정상가), sale_price (판매가), coupon_price (쿠폰적용가), final_price (the price shown), currency=KRW, discount_rate, final_discount_rate, coupon_discount_rate, extra_discount_amount, option_price_varies, is_sold_out, review_count, review_score_pct (0-100), is_lowest_price, plus_delivery, used_condition, labels[]} + ads[] (sponsored rows, kept apart) + total (the source's count) + total_pages + page + page_size + has_more

**Example request body:**
```json
{
  "query": "맨투맨"
}
```

### POST https://api.reefapi.com/musinsa/v1/brand — 2 credits
Every product of one brand on Musinsa (the brand store grid), with the same row shape, filters and sorts as `search`.

**Parameters:**
- `category` (string, optional) — Musinsa category code: 3 digits per level (e.g. `001` 상의 tops, `001005` 맨투맨/스웨트셔츠, `002` 아우터 outerwear, `003` 바지 trousers, `103` 신발 shoes, `104` 뷰티 beauty). A product's `category_path[].code` is accepted as-is. An unknown code answers an empty result (total 0).
- `brand` (string, required) — Brand slug as Musinsa writes it in the brand URL musinsa.com/brand/<slug> and in every row's `brand` (e.g. `musinsastandard`, `nike`, `covernat`).
- `min_price` (integer, optional) — Minimum price in KRW, applied by the source to `final_price` (the price shown, after the product coupon and any extra discount).
- `max_price` (integer, optional) — Maximum price in KRW, applied to `final_price` like `min_price`.
- `on_sale` (boolean, optional) — `true` = only discounted products (세일). `false` is the same as leaving it out.
- `min_discount` (enum, optional) — Only products whose total discount (`final_discount_rate`, coupon included) is at least this many percent. [one of: 10, 20, 30, 40, 50, 60, 70, 80]
- `color` (string, optional) — Musinsa colour code in capitals, as in the site's colour facet (e.g. `BLACK`, `WHITE`, `GRAY`, `NAVY`, `BEIGE`, `IVORY`, `KHAKI`, `SKYBLUE`). An unknown code answers an empty result.
- `size` (enum, optional) — Standard clothing size (the site's 사이즈 facet). [one of: XS, S, M, L, XL, XXL]
- `include_sold_out` (boolean, optional, default false) — `true` also returns sold-out (품절) products; by default the site hides them.
- `exclusive` (boolean, optional) — `true` = only Musinsa exclusives (단독).
- `coupon` (boolean, optional) — `true` = only products with a coupon (쿠폰).
- `store` (enum, optional) — Only one Musinsa sub-store. [one of: outlet, boutique]
- `used` (boolean, optional) — `true` = the second-hand (USED 중고) listings instead of new products; rows then carry `used_condition`.
- `gender` (enum, optional, default "all") — Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch). [one of: all, men, women]
- `sort` (enum, optional, default "popular") — Result order, the site's own sort codes. [one of: popular, newest, discount, price_asc, price_desc, reviews, sales_1d, sales_1w, sales_1m, sales_3m]
- `page` (integer, optional, default 1) — Result page. The source stops at page 1000 and at its own last page (`total_pages`).
- `page_size` (integer, optional, default 60) — Rows per page, 1-100 (the site uses 60).

**Returns:** results[]{product_id, title, url, image, brand, brand_name, gender, normal_price (정상가), sale_price (판매가), coupon_price (쿠폰적용가), final_price (the price shown), currency=KRW, discount_rate, final_discount_rate, coupon_discount_rate, extra_discount_amount, option_price_varies, is_sold_out, review_count, review_score_pct (0-100), is_lowest_price, plus_delivery, used_condition, labels[]} + ads[] (sponsored rows, kept apart) + total (the source's count) + total_pages + page + page_size + has_more

**Example request body:**
```json
{
  "brand": "musinsastandard"
}
```

### POST https://api.reefapi.com/musinsa/v1/category — 2 credits
Every product of one Musinsa category (e.g. `001005` 맨투맨/스웨트셔츠, `002` outerwear), with the same row shape, filters and sorts as `search`.

**Parameters:**
- `category` (string, required) — Musinsa category code: 3 digits per level (e.g. `001` 상의 tops, `001005` 맨투맨/스웨트셔츠, `002` 아우터 outerwear, `003` 바지 trousers, `103` 신발 shoes, `104` 뷰티 beauty). A product's `category_path[].code` is accepted as-is. An unknown code answers an empty result (total 0).
- `brand` (string, optional) — Brand slug as Musinsa writes it in the brand URL musinsa.com/brand/<slug> and in every row's `brand` (e.g. `musinsastandard`, `nike`, `covernat`).
- `min_price` (integer, optional) — Minimum price in KRW, applied by the source to `final_price` (the price shown, after the product coupon and any extra discount).
- `max_price` (integer, optional) — Maximum price in KRW, applied to `final_price` like `min_price`.
- `on_sale` (boolean, optional) — `true` = only discounted products (세일). `false` is the same as leaving it out.
- `min_discount` (enum, optional) — Only products whose total discount (`final_discount_rate`, coupon included) is at least this many percent. [one of: 10, 20, 30, 40, 50, 60, 70, 80]
- `color` (string, optional) — Musinsa colour code in capitals, as in the site's colour facet (e.g. `BLACK`, `WHITE`, `GRAY`, `NAVY`, `BEIGE`, `IVORY`, `KHAKI`, `SKYBLUE`). An unknown code answers an empty result.
- `size` (enum, optional) — Standard clothing size (the site's 사이즈 facet). [one of: XS, S, M, L, XL, XXL]
- `include_sold_out` (boolean, optional, default false) — `true` also returns sold-out (품절) products; by default the site hides them.
- `exclusive` (boolean, optional) — `true` = only Musinsa exclusives (단독).
- `coupon` (boolean, optional) — `true` = only products with a coupon (쿠폰).
- `store` (enum, optional) — Only one Musinsa sub-store. [one of: outlet, boutique]
- `used` (boolean, optional) — `true` = the second-hand (USED 중고) listings instead of new products; rows then carry `used_condition`.
- `gender` (enum, optional, default "all") — Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch). [one of: all, men, women]
- `sort` (enum, optional, default "popular") — Result order, the site's own sort codes. [one of: popular, newest, discount, price_asc, price_desc, reviews, sales_1d, sales_1w, sales_1m, sales_3m]
- `page` (integer, optional, default 1) — Result page. The source stops at page 1000 and at its own last page (`total_pages`).
- `page_size` (integer, optional, default 60) — Rows per page, 1-100 (the site uses 60).

**Returns:** results[]{product_id, title, url, image, brand, brand_name, gender, normal_price (정상가), sale_price (판매가), coupon_price (쿠폰적용가), final_price (the price shown), currency=KRW, discount_rate, final_discount_rate, coupon_discount_rate, extra_discount_amount, option_price_varies, is_sold_out, review_count, review_score_pct (0-100), is_lowest_price, plus_delivery, used_condition, labels[]} + ads[] (sponsored rows, kept apart) + total (the source's count) + total_pages + page + page_size + has_more

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

### POST https://api.reefapi.com/musinsa/v1/product — 3 credits
One Musinsa product in full: title (Korean and English), brand, style number, season, gender, category path, images; the four prices (normal / sale / coupon / final) and discount; every size/colour variant with its own in-stock flag, price delta and expected delivery date; the measured size chart (cm per size); the product facts table (material, colour, maker, country of manufacture, care); rating out of 5, review count, like count, page views and purchases; delivery and return fee; ranking badges; the seller's published business details.

**Parameters:**
- `product_id` (string, optional) — Musinsa product number (goodsNo), the `product_id` of any search, brand, category or ranking row (also the number in musinsa.com/products/<id>). Provide product_id OR url.
- `url` (string, optional) — A musinsa.com product URL; alternative to product_id.

**Returns:** product{product_id, title, title_en, url, style_no, brand{slug, name, name_en, country, since_year, url}, gender[], season, category_path[]{code, name}, store, images[], prices{normal_price, sale_price, coupon_price, final_price, currency, discount_rate, final_discount_rate, coupon_applied, extra_discount_amount, member_discount_rate, is_lowest_price, option_price_varies}, sale_status, is_sold_out, rating (0-5), review_count, like_count, page_view_total, purchase_total, labels[], flags{…}, delivery{expected_arrival_date, expected_release_date, release_period_days, courier, overseas, return_shipping_fee}, order_limits, ranking_badges[], used{condition, original_product_id}, seller{store_id, company, ceo, business_number, mail_order_number, phone, email, address}, options{axes[]{name, values[]}, variants[]{variant_id, options[], code, price_delta, active, in_stock, remain_quantity, expected_release_date, expected_arrival_date}, variant_count, in_stock_count}, size_chart{type, unit=cm, note, sizes[]{size, measurements{}}}, product_info[]{name, value}}

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

### POST https://api.reefapi.com/musinsa/v1/reviews — 2 credits
Reviews (후기) of one Musinsa product, 20 per page: rating 1-5, text, date, the size or option the reviewer bought, their height / weight / gender when they shared it, the fit survey answers (size, colour, quality …), photos, likes and comments.

**Parameters:**
- `product_id` (string, optional) — Musinsa product number (goodsNo), the `product_id` of any search, brand, category or ranking row (also the number in musinsa.com/products/<id>). Provide product_id OR url.
- `url` (string, optional) — A musinsa.com product URL; alternative to product_id.
- `sort` (enum, optional, default "helpful") — Review order. [one of: helpful, newest, rating_high, rating_low, most_comments]
- `photo_only` (boolean, optional, default false) — `true` = only reviews with photos.
- `page` (integer, optional, default 1) — Review page. A page past the last one answers NOT_FOUND.
- `page_size` (integer, optional, default 20) — Reviews per page, 1-20 (the source refuses more).

**Returns:** reviews[]{review_id, type, rating, content, created_at, chosen_option, like_count, comment_count, images[], reviewer{nickname, level, gender, height_cm, weight_kg, skin_type, is_staff}, survey[]{question, answer}, is_first_review, country, product_id} + total + page + page_size + has_more

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

### POST https://api.reefapi.com/musinsa/v1/ranking — 3 credits
Musinsa's live sales ranking (랭킹), the list the site's ranking tab shows: rank, product, brand, price shown and normal price, discount, sold-out flag, the rising (급상승) label, the source's sales count ('판매 3.2천개' → ~3,200), how many people are viewing / buying now, review count and score. 100 products per answer (the `used` section returns 300). Choose the section, category, period, gender and age band.

**Parameters:**
- `section` (enum, optional, default "all") — Ranking list (the site's ranking tabs). [one of: all, new, rising, offline, used, boutique, outlet, kids, street, minimal, preppy, romantic, girlcore, casual, workwear, retro, chic]
- `category` (string, optional) — Category inside the section, as the site's sub-tabs list it. all/new/rising/offline: `000` all, `104` beauty, `103` shoes, `001` tops, `002` outerwear, `003` trousers, `100` dresses & skirts, `004` bags, `120` hats, `101` accessories, `026` underwear, `017` sports, `102` digital/life, `122` food/health, `106` kids. Style sections: `000`, `001`, `002`, `003`, `100`, `004`. used: `109000` all, `109001` tops, `109002` outerwear, `109003` trousers, `109004` dresses, `109005` kids, `109006` sports. boutique: 25884 all, 25898 clothing, 25899 shoes, 25900 bags, 25901 accessories, 25902 lifestyle, 25903 beauty. outlet: 29279 all, 29280 clothing, 29281 shoes, 29282 accessories, 29283 kids, 29284 sports. kids: 29285 all … 29299. Default: the section's 'all'.
- `period` (enum, optional, default "realtime") — Ranking window. [one of: realtime, daily, weekly, monthly]
- `gender` (enum, optional, default "all") — Musinsa's gender filter (the site's 전체 / 남성 / 여성 switch). [one of: all, men, women]
- `age_band` (enum, optional, default "all") — Shopper age band the ranking is computed for. [one of: all, under_19, 20_24, 25_29, 30_34, 35_39, 40_plus]

**Returns:** results[]{rank, product_id, title, url, image, brand, brand_name, final_price, normal_price, currency=KRW, discount_rate, option_price_varies, is_sold_out, is_rising, sales_text, sales_count_approx, viewing_now_text, viewing_now_approx, buying_now_text, buying_now_approx, review_count, review_score_pct, labels[]} + section, category, period, gender, age_band, updated_at, applied_filters (the source's own echo), note

**Example request body:**
```json
{
  "section": "all",
  "period": "daily"
}
```

## 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=musinsa
- Human docs page: https://reefapi.com/docs/musinsa
- Overview page: https://reefapi.com/musinsa-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
