API

무신사 API: 4가지 가격, 사이즈별 재고, 실시간 랭킹을 JSON으로

무신사 스토어(musinsa.com)의 상품 목록, 가격, 사이즈별 재고, 후기, 랭킹을 비로그인 상태 기준으로 읽어 JSON으로 돌려줍니다. '무신사 파트너 API'를 찾는 입점 브랜드라면 용도가 다릅니다. 이 API로는 상품 등록이나 주문 처리를 할 수 없고, 소비자에게 공개된 정보만 읽습니다. 가격은 원화(KRW)이며, 한 상품에 함께 붙는 정상가·판매가·쿠폰적용가·최종가를 하나로 합치지 않고 필드 네 개로 나눠 줍니다.

엔드포인트

endpoint무엇이 반환되는가필수
search키워드 검색(한글·영문). 각 행에 상품 번호, 상품명, 브랜드, 4가지 가격과 할인율, 품절 여부, 후기 수와 평점. 성별, 카테고리, 브랜드, 가격대, 세일, 최소 할인율, 색상, 사이즈, 단독, 쿠폰, 아울렛·부티크, USED 중고 필터와 무신사 정렬 10가지를 지원합니다.query
brand한 브랜드관의 전체 상품. 검색과 같은 행 구조, 필터, 정렬.brand
category한 카테고리의 전체 상품(예: `001005` 맨투맨/스웨트셔츠, `002` 아우터). 검색과 같은 행 구조, 필터, 정렬.category
product상품 한 건 전체: 한글·영문 상품명, 품번, 시즌, 카테고리 경로, 4가지 가격, 옵션별 재고·추가금액·배송 예정일, 실측 사이즈(cm), 상품정보제공고시(소재, 제조국, 세탁 방법 등), 평점·후기 수·좋아요·구매 수, 배송비와 반품비.모두 선택
reviews상품 후기, 한 페이지 최대 20개: 별점, 본문, 작성일, 구매한 옵션, 사이즈·색감·퀄리티 설문 답변, 사진. 유용한순·최신순·평점순 정렬과 사진 후기만 보기를 지원합니다.모두 선택
ranking무신사 랭킹 탭 그대로: 순위, 상품, 가격, 급상승 표시, '판매 3.2천개' 같은 판매 수량 문구와 그 근사값. 섹션, 카테고리, 기간(실시간·일간·주간·월간), 성별, 연령대를 고를 수 있고 한 번에 100개를 돌려줍니다.모두 선택

호출마다 크레딧이 차감됩니다. 실패하거나 차단된 호출은 무료입니다.

동작하는 예제

아래 나이키 재킷은 `discount_rate`가 0이라 할인이 없는 것처럼 보이지만, 쿠폰이 적용돼 화면에 표시되는 가격은 175,000원이 아니라 157,500원입니다. 할인 상품을 고를 때는 쿠폰까지 반영한 `final_discount_rate`를, 가격 비교에는 `final_price`를 쓰세요. `min_price`·`max_price` 필터도 `final_price` 기준으로 적용됩니다.

요청
curl -X POST https://api.reefapi.com/musinsa/v1/search \
  -H "x-api-key: 내_API_키" \
  -H "content-type: application/json" \
  -d '{"query": "패딩", "page_size": 20, "on_sale": true}'
응답 (요약)
{
  "ok": true,
  "data": {
    "query": "패딩",
    "on_sale": true,
    "total": 24880,
    "total_pages": 1244,
    "results": [
      ...,
      {
        "product_id": 7425029,
        "title": "스포츠웨어 써마 핏 재킷 W - 블랙:세일 / IF5932-010",
        "brand": "nike",
        "brand_name": "나이키",
        "gender": "여성",
        "normal_price": 175000,
        "sale_price": 175000,
        "coupon_price": 157500,
        "final_price": 157500,
        "currency": "KRW",
        "discount_rate": 0,
        "final_discount_rate": 10,
        "coupon_discount_rate": 10,
        "is_sold_out": false,
        "review_count": 0
      },
      ...
    ]
  },
  "meta": { "record_count": 20, "total": 24880, "price_basis": "KRW, Musinsa's displayed prices (VAT included)", "cache_hit": false, "mode": "live" }
}

무신사 크롤러를 직접 만들 때 걸리는 세 가지

무신사 목록 데이터는 HTML이 아니라 사이트가 내부적으로 호출하는 JSON API에서 옵니다. 그래서 처음엔 쉬워 보이지만, 같은 주소에 검색어 없이 요청하면 '잘못된 파라미터'(400)가 돌아와 차단으로 오해하기 쉽습니다. 실제로는 요청 출처를 나타내는 `caller` 값을 브랜드·카테고리 목록에 맞게 바꾸면 정상 응답이 옵니다.

더 조용한 함정은 필터입니다. 최소 평점, 최소 후기 수, 최소 좋아요 수 같은 조건은 보내도 무신사가 오류 없이 무시하고, 필터를 걸지 않은 결과를 그대로 돌려줍니다. 그래서 '맨투맨' 검색 결과 49,101개를 기준값으로 두고 조건을 하나씩 넣어 총개수가 실제로 줄어드는지 확인했고, 줄지 않은 조건은 파라미터로 열어 두지 않았습니다. 목록에 없는 파라미터를 보내면 INVALID_PARAM으로 거절합니다.

상품 상세도 요청 한 번으로 끝나지 않습니다. 옵션별 재고, 실측 사이즈, 고시 정보를 모으려면 두 단계에 걸쳐 7개의 요청이 필요합니다. 가격 필드에도 함정이 있어, 목록에서는 쿠폰가가 비어 있는데 상세에서는 판매가와 같은 값이 들어 있는 경우가 측정한 16개 중 9개였습니다. 이 API는 쿠폰가가 판매가보다 실제로 낮을 때만 `coupon_price`를 채웁니다.

가격변동 추적이 목적이라면 미리 알아 둘 점이 있습니다. 이 API는 과거 가격을 보관하지 않으므로, 매일 같은 시각에 호출해 `final_price`를 직접 쌓아야 가격 그래프를 그릴 수 있습니다.

제한과 솔직한 메모

  • 무신사가 만든 API가 아니며, 무신사와 맺은 제휴나 계약도 없습니다.
  • 가격 추이·가격 그래프는 제공하지 않습니다. 이력이 필요하면 호출 결과를 직접 저장해야 합니다.
  • 로그인해야 보이는 회원가·최대혜택가는 들어 있지 않고, 카드·결제 프로모션 할인도 반영되지 않습니다. 상품 Q&A, 스냅, global.musinsa.com도 범위 밖입니다.
  • 실측 사이즈표는 의류에만 있습니다. 신발, 가방, 화장품은 null입니다(측정 16개 중 6개에만 있음).
  • 검색·브랜드·카테고리는 1,000페이지까지만 내려갑니다. 그보다 많은 상품은 카테고리, 가격대, 브랜드로 나눠서 조회해야 합니다.
  • 랭킹의 판매 수량은 '판매 4.6천개'처럼 반올림된 문구에서 나온 근사값입니다. 정확한 구매 수는 product의 구매 수 필드에서 확인하세요.
  • 매 호출이 무신사에서 바로 읽어 온 값입니다. 품절 여부와 쿠폰가도 호출한 시점 그대로입니다.