# 상품

## 템플릿 ID로 상품 제약 템플릿 상세 조회

> 템플릿 ID를 이용하여 상품 제약 조건 템플릿의 판매 옵션 상세 정보를 조회합니다.\
> \
> \## 판매 옵션 구조\
> \
> 판매 옵션은 두 가지로 분류됩니다.\
> \
> \- \*\*selectOneSaleOptions (택1 그룹)\*\*: \`groupKey\`로 묶인 옵션 그룹입니다. 같은 그룹 내에서 하나만 선택해야 합니다.\
> \- \*\*salesOptions (일반 옵션)\*\*: 개별 판매 옵션입니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"GetProductConstraintTemplateByIdFepResponse":{"required":["salesOptions","selectOneSaleOptions"],"type":"object","properties":{"selectOneSaleOptions":{"type":"array","description":"택1 판매 옵션 그룹 목록","items":{"$ref":"#/components/schemas/SelectOneSaleOptionFepResponse"}},"salesOptions":{"type":"array","description":"판매 옵션 목록","items":{"$ref":"#/components/schemas/SalesOptionFepResponse"}}},"description":"템플릿 ID 기반 상품 제약 조건 템플릿 상세 응답"},"SelectOneSaleOptionFepResponse":{"required":["groupKey","options"],"type":"object","properties":{"groupKey":{"type":"string","description":"그룹 키"},"options":{"type":"array","description":"그룹 내 판매 옵션 목록","items":{"$ref":"#/components/schemas/SalesOptionFepResponse"}}},"description":"택1 판매 옵션 그룹"},"SalesOptionFepResponse":{"required":["id","isOneOfRequiredGroup","key","optionValueTemplate"],"type":"object","properties":{"id":{"type":"integer","description":"판매 옵션 ID","format":"int64"},"key":{"type":"string","description":"옵션 키"},"optionValueTemplate":{"$ref":"#/components/schemas/OptionValueTemplateFepResponse"},"isOneOfRequiredGroup":{"type":"boolean","description":"택1 필수 그룹 여부"}},"description":"판매 옵션"},"OptionValueTemplateFepResponse":{"required":["formatType","isOption","optionGroupId","optionGroupName","valueCandidates"],"type":"object","properties":{"optionGroupId":{"type":"integer","description":"옵션 그룹 ID","format":"int64"},"optionGroupName":{"type":"string","description":"옵션 그룹 명"},"formatType":{"type":"string","description":"입력 포맷 타입 (TEXT: 자유 입력, NUMBER: 숫자 입력 + 단위, DROPDOWN: 선택형 입력, RANGE: 숫자 구간 + 단위)"},"valueCandidates":{"type":"array","description":"입력 가능한 값 리스트","items":{"type":"string","description":"입력 가능한 값 리스트"}},"isOption":{"type":"boolean","description":"옵션 여부 (true: 선택 항목, false: 필수 항목)"},"placeholder":{"type":"string","description":"입력 예시"},"unitValues":{"type":"array","description":"입력 단위","items":{"type":"string","description":"입력 단위"}},"keyComment":{"type":"string","description":"옵션 키에 대한 추가 설명"},"valueComment":{"type":"string","description":"옵션 값에 대한 추가 설명"}},"description":"옵션 값 템플릿"}}},"paths":{"/api/v3/shopping-fep/product-constraint-templates/{templateId}":{"get":{"tags":["상품 Public Controller"],"summary":"템플릿 ID로 상품 제약 템플릿 상세 조회","description":"템플릿 ID를 이용하여 상품 제약 조건 템플릿의 판매 옵션 상세 정보를 조회합니다.\n\n## 판매 옵션 구조\n\n판매 옵션은 두 가지로 분류됩니다.\n\n- **selectOneSaleOptions (택1 그룹)**: `groupKey`로 묶인 옵션 그룹입니다. 같은 그룹 내에서 하나만 선택해야 합니다.\n- **salesOptions (일반 옵션)**: 개별 판매 옵션입니다.","operationId":"findConstraintTemplateById_1","parameters":[{"name":"templateId","in":"path","description":"템플릿 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/GetProductConstraintTemplateByIdFepResponse"}}}}}}}}}}}
```

## 상품 등록

> 상품 등록 API입니다.\
> \
> \## 주의사항\
> \
> \- 상품 등록/수정 시에는 \*\*초당 30건 이하\*\*로 요청해주셔야 합니다\
> \- 초과 시에는 이용량 초과로 인해 요청이 실패할 수 있습니다\
> \- 카테고리 제약사항은 주기적으로 수정될 수 있으므로, API를 호출하여 제약사항을 주기적으로 확인 후 기입되도록 구현 부탁드립니다

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"RegisterProductFepRequest":{"required":["categoryId","deliveryPolicy","exchangeReturnPolicy","exposure","images","isTaxFree","name","notice","stocks"],"type":"object","properties":{"name":{"type":"string","description":"상품명\n\n- 정규식: ^[0-9a-zA-Z가-힣 ()\\-·\\[\\]/&+,~.*_#]{1,100}$"},"brandName":{"type":"string","description":"브랜드명\n\n- 정규식: [0-9a-zA-Z가-힣 *()-_+/.,]{1,50}\n\n- 사용 불가 단어: 없음, 중국, 기타, OEM, 협력사"},"categoryId":{"type":"integer","description":"상품 카테고리 ID\n\n- 카테고리 중에 isLeaf=true인 최하위 카테고리ID만 가능","format":"int64"},"stocks":{"maxItems":300,"minItems":0,"type":"array","description":"각 옵션의 판매 정보","items":{"$ref":"#/components/schemas/RegisterProductBodyStockFepRequest"}},"images":{"type":"array","description":"상품 이미지 목록. 썸네일 이미지(THUMBNAIL)가 최소 1개 이상 필요\n\n- THUMBNAIL 1개, DESCRIPTION 또는 DESCRIPTION_HTML 1개 등록 필수\n- 이미지 URL은 기존 사용하시는 사이트 이미지 URL을 업로드해주시면 내부적으로 다운로드하여 등록하게 됩니다.\n- 다운로드 실패 시 상품등록에 실패할 수 있습니다.","items":{"$ref":"#/components/schemas/RegisterProductBodyImageFepRequest"}},"exposure":{"$ref":"#/components/schemas/RegisterProductBodyExposureFepRequest"},"isTaxFree":{"type":"boolean","description":"면세 상품 여부\n\n- true: 면세\n- false: 과세"},"deliveryPolicy":{"$ref":"#/components/schemas/RegisterProductBodyDeliveryPolicyFepRequest"},"exchangeReturnPolicy":{"$ref":"#/components/schemas/RegisterProductBodyExchangeReturnPolicyFepRequest"},"notice":{"$ref":"#/components/schemas/RegisterProductBodyNoticeFepRequest"},"isCultureDeduction":{"type":"boolean","description":"문화비 소득공제 적용 여부"},"managementCode":{"type":"string","description":"판매자가 상품을 관리하려고 사용하는 코드 (최대 100자)"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 등록 요청"},"RegisterProductBodyStockFepRequest":{"required":["isHide","isMainPrice","options","originPrice","remainingCount","salePrice"],"type":"object","properties":{"options":{"type":"array","description":"재고 옵션그룹 이름 & 옵션값 이름\n\n- 카테고리 제약사항에 따라 제한됩니다.\n- 제약사항이 있는 경우에는 반드시 제약사항에 따라 입력이 가능하며 그외 옵션은 입력이 불가합니다.\n- 기존 옵션이 부재한 상품의 경우에도 카테고리 제약사항에 맞게 입력이 필요합니다.","items":{"$ref":"#/components/schemas/RegisterProductBodyStockOptionFepRequest"}},"remainingCount":{"type":"integer","description":"현재 판매할 수 있는 재고 수량\n\n- remainingCount가 0인 경우, 품절 상태로 자동 등록됩니다\n- 0 이상 입력 가능","format":"int32"},"isHide":{"type":"boolean","description":"숨김 여부 (true: 숨김, false: 노출)"},"isMainPrice":{"type":"boolean","description":"대표 가격 여부 (true: 대표 가격으로 노출)\n\n- 반드시 1개만 true여야 합니다"},"originPrice":{"type":"integer","description":"정상가. 권장소비자가격이나 자사몰/온라인 채널에서 판매 이력이 있는 가격\n\n- 최소 1원 이상","format":"int32"},"salePrice":{"type":"integer","description":"판매가. 셀러가 등록한 가격\n\n- 최소 1원 이상\n- 정상가(originPrice) 이하여야 합니다","format":"int32"},"managementCode":{"type":"string","description":"옵션 관리 코드 (최대 100자)"},"images":{"type":"array","description":"옵션 별 이미지 목록. 해당 필드에 값이 있으면 기존에 존재하던 representativeThumbnailImage 필드는 무시됩니다.","items":{"$ref":"#/components/schemas/RegisterProductBodyStockImageFepRequest"}}},"description":"상품 재고 정보"},"RegisterProductBodyStockOptionFepRequest":{"required":["groupName","valueName"],"type":"object","properties":{"groupName":{"type":"string","description":"재고 옵션그룹 이름 (예: 색상)\n- groupName은 카테고리 제약사항 categorySalesOptions의 key\n- isOption = false일 경우 필수\n- isOneOfRequiredGroup = true인 그룹 중 최소 1개 이상 반드시 포함해야 등록 가능\n- 허용 개수: 1~3개\n- 허용 글자: [0-9a-zA-Z가-힣*()-_+/.]{1,10}"},"valueName":{"type":"string","description":"재고 옵션값 이름 (예: 블랙)\n- valueName은 valueCandidates에 포함되는 값만 허용 (valueCandidates가 빈 배열일 경우 자유)\n- unitValues가 있을 경우 valueName은 해당 단위로 끝나는 값이어야합니다.\n- keyComment와 valueComment가 있을 경우 해당 내용을 참조하여 입력해야합니다.\n- 허용 개수: 1~30개\n- 허용 글자: [0-9a-zA-Z가-힣*()-_+/.]{1,30}"}},"description":"재고 옵션 정보"},"RegisterProductBodyStockImageFepRequest":{"required":["order","url"],"type":"object","properties":{"url":{"type":"string","description":"상품 옵션 이미지 url"},"order":{"type":"integer","description":"상품 옵션 정렬 순서","format":"int32"}},"description":"상품 옵션 이미지"},"RegisterProductBodyImageFepRequest":{"required":["order","type"],"type":"object","properties":{"type":{"type":"string","description":"이미지 유형","enum":["THUMBNAIL","DESCRIPTION","DESCRIPTION_HTML","AD"]},"productItemId":{"type":"integer","description":"옵션 식별용 ID","format":"int64"},"url":{"type":"string","description":"이미지 URL (최대 255자)"},"html":{"type":"string","description":"상세 설명 이미지 HTML\n\n- html의 경우, 서버에서 sanitization 후 저장"},"order":{"type":"integer","description":"정렬 순서 (0부터 증가)","format":"int32"}},"description":"상품 이미지 정보"},"RegisterProductBodyExposureFepRequest":{"required":["searchKeywords"],"type":"object","properties":{"searchKeywords":{"type":"array","description":"상품 검색에 사용되는 키워드 목록\n없으면 emptyList로 요청. 키워드 당 1~10 글자 허용\n실제 검색에 활용되는 키워드입니다.\n허용 정규식: [0-9a-zA-Z가-힣]{1,10}","items":{"type":"string","description":"상품 검색에 사용되는 키워드 목록\n없으면 emptyList로 요청. 키워드 당 1~10 글자 허용\n실제 검색에 활용되는 키워드입니다.\n허용 정규식: [0-9a-zA-Z가-힣]{1,10}"}},"description":{"type":"string","description":"사용자에 노출되는 상품 설명. 최대 1500자까지 입력 가능\n\n- AI 상품 추천에 사용돼요\n- 자세히 적을수록 더 적합한 고객에게 추천할 수 있어요"},"serialNumber":{"type":"string","description":"제조사가 부여한 모델명\n\n- 정규식: [0-9a-zA-Z가-힣 -_]{1,50}"}},"description":"상품 노출 정보"},"RegisterProductBodyDeliveryPolicyFepRequest":{"required":["deliveryFee","deliveryFeeType","deliveryMethod","isJejuAndIslandsMountainsDelivery","islandsMountainsDeliveryFee","jejuDeliveryFee","minimumPurchasePrice"],"type":"object","properties":{"deliveryMethod":{"type":"string","description":"배송 방식","enum":["NORMAL","TODAY_DELIVERY"]},"deliveryDeadline":{"type":"string","description":"출고 마감 시각 (HH:mm, 30분 단위)\n\n- 오늘 출고(TODAY_DELIVERY)일 때 필수입니다\n- 예: \"14:00\", \"14:30\""},"preparationDays":{"type":"integer","description":"상품 준비 기간 (일, 최대 14일)\n\n- 일반 배송(NORMAL)일 때 미입력 시 기본값 3으로 설정됩니다","format":"int32"},"deliveryLocationId":{"type":"integer","description":"배송비 묶음 그룹 ID\n\n- null이면 묶음배송 불가\n- 배송비 묶음 그룹 ID 목록 참고","format":"int64"},"deliveryFeeType":{"type":"string","description":"배송비 유형","enum":["FREE","PAID","CONDITIONALLY_FREE"]},"deliveryFee":{"type":"integer","description":"기본 배송비. 무료 배송이면 0원","format":"int32"},"minimumPurchasePrice":{"type":"integer","description":"조건부 무료배송 시 무료배송 조건 금액","format":"int32"},"isJejuAndIslandsMountainsDelivery":{"type":"boolean","description":"제주/도서산간 배송 가능여부 true/false"},"jejuDeliveryFee":{"type":"integer","description":"제주도 추가 배송비\n\n- isJejuAndIslandsMountainsDelivery가 true일 경우 적용됩니다","format":"int32"},"islandsMountainsDeliveryFee":{"type":"integer","description":"도서 산간 추가 배송비\n\n- isJejuAndIslandsMountainsDelivery가 true일 경우 적용됩니다","format":"int32"},"deliveryCompanyId":{"type":"integer","description":"택배사 ID","format":"int64"}},"description":"배송 정책"},"RegisterProductBodyExchangeReturnPolicyFepRequest":{"required":["applicationMethodDescription","applicationTermDescription","exchangeRefundLocationId","exchangeRoundTripDeliveryFee","refundOneWayDeliveryFee"],"type":"object","properties":{"exchangeRefundLocationId":{"type":"integer","description":"교환/반품지 ID\n\n- 교환/반품지 조회 API 참조","format":"int64"},"refundOneWayDeliveryFee":{"type":"integer","description":"반품 편도 배송비 (0 이상)","format":"int32"},"exchangeRoundTripDeliveryFee":{"type":"integer","description":"교환 왕복 배송비 (0 이상)","format":"int32"},"applicationMethodDescription":{"type":"string","description":"교환,환불 방법 설명 (1~500자)"},"applicationTermDescription":{"type":"string","description":"교환,환불 신청 가능 기간 설명 (1~500자)"}},"description":"교환/반품 정책"},"RegisterProductBodyNoticeFepRequest":{"required":["categoryCode","items"],"type":"object","properties":{"categoryCode":{"type":"string","description":"상품 정보제공 고시 카테고리 코드\n\n- 정보제공 고시를 위한 카테고리 목록 조회 API 참조"},"items":{"type":"array","description":"상품 정보제공 고시 항목 목록\n\n- 정보제공 고시를 위한 항목 조회 API 참조","items":{"$ref":"#/components/schemas/RegisterProductBodyNoticeItemFepRequest"}}},"description":"상품 정보제공 고시"},"RegisterProductBodyNoticeItemFepRequest":{"required":["content","id"],"type":"object","properties":{"id":{"type":"integer","description":"정보제공 고시 항목 ID","format":"int64"},"content":{"type":"string","description":"고시 항목 내용 (판매자 입력 정보, 1~4000자)"}},"description":"정보제공 고시 항목"},"RegisterProductResponse":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","description":"상품 ID","format":"int64"}},"description":"상품 등록 응답"}}},"paths":{"/api/v3/shopping-fep/products/v2":{"post":{"tags":["상품 Public Controller"],"summary":"상품 등록","description":"상품 등록 API입니다.\n\n## 주의사항\n\n- 상품 등록/수정 시에는 **초당 30건 이하**로 요청해주셔야 합니다\n- 초과 시에는 이용량 초과로 인해 요청이 실패할 수 있습니다\n- 카테고리 제약사항은 주기적으로 수정될 수 있으므로, API를 호출하여 제약사항을 주기적으로 확인 후 기입되도록 구현 부탁드립니다","operationId":"registerProductV2","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterProductFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","TOO_MANY_REQUEST","BAD_REQUEST","NOT_FOUND","INTERNAL_SERVER_ERROR","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/RegisterProductResponse"}}}}}}}}}}}
```

## 상품 정보 변경

> 상품등록시 반환된 상품 ID를 이용하여 상품 정보를 변경합니다.\
> \
> \## 검수 정책\
> \
> \- \*\*이미지 변경\*\*: 검수 단계로 진입됩니다\
> \- \*\*가격/재고/배송정보 변경\*\*: 즉시 반영됩니다\
> \- \*\*검수 반려된 상품\*\*: 정보 변경 시 자동으로 검수 단계로 진입합니다

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ChangeProductFepRequest":{"required":["categoryId","deliveryPolicy","exchangeReturnPolicy","exposure","images","isTaxFree","name","notice","stocks"],"type":"object","properties":{"name":{"type":"string","description":"상품명\n\n- 정규식: ^[0-9a-zA-Z가-힣 ()\\-·\\[\\]/&+,~.*_#]{1,100}$"},"brandName":{"type":"string","description":"브랜드명\n\n- 정규식: [0-9a-zA-Z가-힣 *()-_+/.,]{1,50}\n\n- 사용 불가 단어: 없음, 중국, 기타, OEM, 협력사"},"stocks":{"maxItems":300,"minItems":0,"type":"array","description":"각 옵션의 판매 정보","items":{"$ref":"#/components/schemas/ChangeProductBodyStockFepRequest"}},"images":{"type":"array","description":"상품 이미지 목록","items":{"$ref":"#/components/schemas/ChangeProductBodyImageFepRequest"}},"exposure":{"$ref":"#/components/schemas/ChangeProductBodyExposureFepRequest"},"isTaxFree":{"type":"boolean","description":"면세 상품 여부 (true: 면세, false: 과세)"},"isCultureDeduction":{"type":"boolean","description":"문화비 소득공제 적용 여부"},"deliveryPolicy":{"$ref":"#/components/schemas/ChangeProductBodyDeliveryPolicyFepRequest"},"exchangeReturnPolicy":{"$ref":"#/components/schemas/ChangeProductBodyExchangeReturnPolicyFepRequest"},"notice":{"$ref":"#/components/schemas/ChangeProductBodyNoticeFepRequest"},"categoryId":{"type":"integer","description":"상품 카테고리 ID","format":"int64"},"managementCode":{"type":"string","description":"상품 관리 코드 (최대 100자)"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 정보 변경 요청"},"ChangeProductBodyStockFepRequest":{"required":["isHide","isMainPrice","options","originPrice","remainingCount","salePrice"],"type":"object","properties":{"options":{"type":"array","description":"옵션 목록","items":{"$ref":"#/components/schemas/Option"}},"remainingCount":{"type":"integer","description":"현재 판매할 수 있는 재고 수량\n\n- remainingCount가 0인 경우, 품절 상태로 자동 등록됩니다\n- 0 이상 입력 가능","format":"int32"},"isMainPrice":{"type":"boolean","description":"대표 가격 여부 (true: 대표 가격으로 노출)"},"isHide":{"type":"boolean","description":"숨김 여부 (true: 숨김, false: 노출)"},"originPrice":{"type":"integer","description":"정상가. 권장소비자가격이나 자사몰/온라인 채널에서 판매 이력이 있는 가격\n\n- 최소 1원 이상","format":"int32"},"salePrice":{"type":"integer","description":"판매가. 셀러가 등록한 가격\n\n- 최소 1원 이상\n- 정상가(originPrice) 이하여야 합니다","format":"int32"},"managementCode":{"type":"string","description":"옵션 관리 코드 (최대 100자)"},"representativeThumbnailImage":{"type":"string","description":"옵션 별 대표 썸네일 이미지 URL"},"images":{"type":"array","description":"옵션 별 이미지 목록","items":{"$ref":"#/components/schemas/ChangeProductBodyStockImageFepRequest"}}},"description":"상품 재고 정보"},"Option":{"required":["groupName","valueName"],"type":"object","properties":{"groupName":{"type":"string","description":"옵션 그룹 이름"},"valueName":{"type":"string","description":"옵션 값 이름"}},"description":"재고 옵션"},"ChangeProductBodyStockImageFepRequest":{"required":["order","url"],"type":"object","properties":{"url":{"type":"string","description":"상품 옵션 이미지 url"},"order":{"type":"integer","description":"상품 옵션 이미지 순서","format":"int32"}},"description":"상품 옵션 이미지"},"ChangeProductBodyImageFepRequest":{"required":["order","type"],"type":"object","properties":{"type":{"type":"string","description":"이미지 유형","enum":["THUMBNAIL","DESCRIPTION","DESCRIPTION_HTML","AD","PRODUCT_ITEM"]},"url":{"type":"string","description":"이미지 URL (최대 255자)"},"html":{"type":"string","description":"상세 설명 이미지 HTML\n\n- html의 경우, 서버에서 sanitization 후 저장"},"order":{"type":"integer","description":"정렬 순서 (0부터 증가)","format":"int32"}},"description":"상품 이미지 정보"},"ChangeProductBodyExposureFepRequest":{"required":["description","searchKeywords"],"type":"object","properties":{"searchKeywords":{"type":"array","description":"상품 검색에 사용되는 키워드 목록\n없으면 emptyList로 요청. 키워드 당 1~10 글자 허용\n실제 검색에 활용되는 키워드입니다.\n허용 정규식: [0-9a-zA-Z가-힣]{1,10}","items":{"type":"string","description":"상품 검색에 사용되는 키워드 목록\n없으면 emptyList로 요청. 키워드 당 1~10 글자 허용\n실제 검색에 활용되는 키워드입니다.\n허용 정규식: [0-9a-zA-Z가-힣]{1,10}"}},"description":{"type":"string","description":"사용자에게 보여지는 상품 설명. 최대 1500자까지 입력 가능\n\n- AI 상품 추천에 사용돼요\n- 자세히 적을수록 더 적합한 고객에게 추천할 수 있어요"},"serialNumber":{"type":"string","description":"제조사가 부여한 모델명\n\n- 정규식: [0-9a-zA-Z가-힣 -_]{1,50}"}},"description":"상품 노출 정보"},"ChangeProductBodyDeliveryPolicyFepRequest":{"required":["deliveryFee","deliveryFeeType","deliveryMethod","isJejuAndIslandsMountainsDelivery","islandsMountainsDeliveryFee","jejuDeliveryFee","minimumPurchasePrice"],"type":"object","properties":{"deliveryMethod":{"type":"string","description":"배송 방식","enum":["NORMAL","TODAY_DELIVERY"]},"deliveryDeadline":{"type":"string","description":"출고 마감 시각 (HH:mm, 30분 단위)\n\n- 오늘 출고(TODAY_DELIVERY)일 때 필수입니다\n- 예: \"14:00\", \"14:30\""},"preparationDays":{"type":"integer","description":"상품 준비 기간 (일, 최대 14일)\n\n- 일반 배송(NORMAL)일 때 미입력 시 기본값 3으로 설정됩니다","format":"int32"},"deliveryLocationId":{"type":"integer","description":"배송비 묶음 그룹 ID\n\n- null이면 묶음배송 불가\n- 배송비 묶음 그룹 ID 목록 참고","format":"int64"},"deliveryFeeType":{"type":"string","description":"배송비 유형","enum":["FREE","PAID","CONDITIONALLY_FREE"]},"deliveryFee":{"type":"integer","description":"기본 배송비 (0 이상)","format":"int32"},"minimumPurchasePrice":{"type":"integer","description":"조건부 무료배송 시 무료배송 조건 금액 (0 이상)","format":"int32"},"isJejuAndIslandsMountainsDelivery":{"type":"boolean","description":"제주/도서산간 배송 가능여부 true/false"},"jejuDeliveryFee":{"type":"integer","description":"제주도 추가 배송비 (0 이상)\n\n- isJejuAndIslandsMountainsDelivery가 true일 경우 적용됩니다","format":"int32"},"islandsMountainsDeliveryFee":{"type":"integer","description":"도서 산간 추가 배송비 (0 이상)\n\n- isJejuAndIslandsMountainsDelivery가 true일 경우 적용됩니다","format":"int32"},"deliveryCompanyId":{"type":"integer","description":"택배사 ID\n\n- 택배사 목록 조회 API 참조","format":"int64"}},"description":"배송 정책"},"ChangeProductBodyExchangeReturnPolicyFepRequest":{"required":["applicationMethodDescription","applicationTermDescription","exchangeRefundLocationId","exchangeRoundTripDeliveryFee","refundOneWayDeliveryFee"],"type":"object","properties":{"exchangeRefundLocationId":{"type":"integer","description":"교환/반품지 ID\n\n- 교환/반품지 조회 API 참조","format":"int64"},"refundOneWayDeliveryFee":{"type":"integer","description":"반품 배송비(편도) (0 이상)","format":"int32"},"exchangeRoundTripDeliveryFee":{"type":"integer","description":"교환 배송비(왕복) (0 이상)","format":"int32"},"applicationMethodDescription":{"type":"string","description":"교환/반품 신청 방법 (1~500자)"},"applicationTermDescription":{"type":"string","description":"교환/반품 신청 가능 기간 (1~500자)"}},"description":"교환/반품 정책"},"ChangeProductBodyNoticeFepRequest":{"required":["categoryCode","items"],"type":"object","properties":{"categoryCode":{"type":"string","description":"상품 정보제공 고시 카테고리 코드"},"items":{"type":"array","description":"상품 정보제공 고시 항목 목록","items":{"$ref":"#/components/schemas/ChangeProductBodyNoticeItemFepRequest"}}},"description":"상품 정보제공 고시"},"ChangeProductBodyNoticeItemFepRequest":{"required":["content","id"],"type":"object","properties":{"id":{"type":"integer","description":"상품 정보제공 고시 항목 ID","format":"int64"},"content":{"type":"string","description":"상품 정보제공 고시 항목에 대한 내용 (1~4000자)"}},"description":"정보제공 고시 항목"}}},"paths":{"/api/v3/shopping-fep/products/{productId}/v2":{"put":{"tags":["상품 Public Controller"],"summary":"상품 정보 변경","description":"상품등록시 반환된 상품 ID를 이용하여 상품 정보를 변경합니다.\n\n## 검수 정책\n\n- **이미지 변경**: 검수 단계로 진입됩니다\n- **가격/재고/배송정보 변경**: 즉시 반영됩니다\n- **검수 반려된 상품**: 정보 변경 시 자동으로 검수 단계로 진입합니다","operationId":"changeProductV2","parameters":[{"name":"productId","in":"path","description":"상품 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeProductFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","NOT_FOUND","INTERNAL_SERVER_ERROR","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 삭제

> 상품을 삭제합니다.\
> \
> \## 주의사항\
> \
> \- 노출중인 상품은 삭제할 수 없습니다\
> \- 상품 삭제 전 \*\*상품 정보 노출 상태 숨기기로 변경 API\*\*를 호출하여 숨김 처리 후 삭제해주셔야 합니다

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"RemoveProductBody":{"required":["productId"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 ID","format":"int64"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 삭제 요청"}}},"paths":{"/api/v3/shopping-fep/products/remove":{"post":{"tags":["상품 Public Controller"],"summary":"상품 삭제","description":"상품을 삭제합니다.\n\n## 주의사항\n\n- 노출중인 상품은 삭제할 수 없습니다\n- 상품 삭제 전 **상품 정보 노출 상태 숨기기로 변경 API**를 호출하여 숨김 처리 후 삭제해주셔야 합니다","operationId":"removeProduct","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveProductBody"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","NOT_FOUND","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 조회

> 상품 ID를 이용하여 상품 정보를 조회합니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ProductFepResponse":{"required":["categories","categoryId","categoryName","constraintTemplateId","deliveryPolicy","exchangeReturnPolicy","exposure","firstCategoryId","firstCategoryName","id","images","inspectionStatus","isCultureDeduction","isTaxFree","merchantId","name","options","rejectionReasons","stocks","version"],"type":"object","properties":{"id":{"type":"integer","description":"상품 식별용 ID","format":"int64"},"merchantId":{"type":"integer","description":"상점 식별용 ID","format":"int64"},"name":{"type":"string","description":"사용자에게 노출되는 상품 이름"},"brandName":{"type":"string","description":"브랜드 이름"},"isTaxFree":{"type":"boolean","description":"면세 상품 여부 (true: 면세, false: 과세)"},"isCultureDeduction":{"type":"boolean","description":"문화비 소득공제 적용 여부"},"inspectionStatus":{"type":"string","description":"검수 상태","enum":["LLM_INSPECTION_READY","COMPLETE","REJECT"]},"rejectionReasons":{"type":"array","description":"검수 거절 사유 목록","items":{"$ref":"#/components/schemas/ProductResponseRejectionReasonFepResponse"}},"exposure":{"$ref":"#/components/schemas/ProductResponseExposureFepResponse"},"serialNumberId":{"type":"integer","description":"모델명 ID","format":"int64"},"version":{"type":"integer","description":"상품 버전 번호 (상품 수정될 때마다 증가)","format":"int32"},"constraintTemplateId":{"type":"integer","description":"상품 제약 템플릿 식별용 ID","format":"int64"},"deliveryPolicy":{"$ref":"#/components/schemas/ProductResponseDeliveryPolicyFepResponse"},"firstCategoryId":{"type":"integer","description":"상품 1차 카테고리 ID","format":"int64"},"firstCategoryName":{"type":"string","description":"상품 1차 카테고리 명"},"categoryId":{"type":"integer","description":"상품 카테고리 ID","format":"int64"},"categoryName":{"type":"string","description":"상품 카테고리 명"},"categories":{"type":"array","description":"1차 카테고리부터 해당 카테고리까지 경로상의 모든 카테고리 정보 배열","items":{"$ref":"#/components/schemas/ProductResponseCategoryFepResponse"}},"options":{"type":"array","description":"상품 옵션 그룹","items":{"$ref":"#/components/schemas/ProductResponseOptionGroupFepResponse"}},"stocks":{"type":"array","description":"상품의 옵션별 재고 정보","items":{"$ref":"#/components/schemas/ProductResponseStockFepResponse"}},"images":{"type":"array","description":"상품 이미지 (썸네일, 상세 설명 이미지 등)","items":{"$ref":"#/components/schemas/ProductResponseImageFepResponse"}},"exchangeReturnPolicy":{"$ref":"#/components/schemas/ProductResponseExchangeReturnPolicyFepResponse"},"notice":{"$ref":"#/components/schemas/ProductResponseNoticeFepResponse"},"lastInspectionRequestedAt":{"type":"string","description":"마지막 검수 요청 시각","format":"date-time"},"managementCode":{"type":"string","description":"판매자가 상품 관리에 사용하는 코드"},"removedAt":{"type":"string","description":"삭제 시각","format":"date-time"}},"description":"상품 상세 조회 응답"},"ProductResponseRejectionReasonFepResponse":{"required":["message","title"],"type":"object","properties":{"title":{"type":"string","description":"반려 사유 제목"},"message":{"type":"string","description":"반려 사유 메시지"}},"description":"검수 거절 사유 목록"},"ProductResponseExposureFepResponse":{"required":["description","searchKeywords"],"type":"object","properties":{"searchKeywords":{"type":"array","description":"검색 키워드 목록","items":{"type":"string","description":"검색 키워드 목록"}},"description":{"type":"string","description":"상품 설명"},"serialNumber":{"type":"string","description":"모델명"}},"description":"검색 키워드, 상품 설명, 모델명 등 사용자 노출과 관련된 정보"},"ProductResponseDeliveryPolicyFepResponse":{"required":["deliveryFee","deliveryFeeType","deliveryMethod","deliveryType","isJejuAndIslandsMountainsDelivery","islandsMountainsDeliveryFee","jejuDeliveryFee"],"type":"object","properties":{"deliveryType":{"type":"string","description":"배송 타입","enum":["NORMAL","NO_DELIVERY"]},"deliveryMethod":{"type":"string","description":"배송 방식","enum":["NORMAL","TODAY_DELIVERY"]},"deliveryDeadline":{"type":"string","description":"출고 마감 시각 (HH:mm)"},"deliveryCutoffTime":{"type":"string","description":"출고 마감 시각 (HH:mm)"},"preparationDays":{"type":"integer","description":"상품 준비 기간 (일)","format":"int32"},"deliveryLocationId":{"type":"integer","description":"배송비 묶음 그룹 ID","format":"int64"},"deliveryFeeType":{"type":"string","description":"배송비 유형","enum":["FREE","PAID","CONDITIONALLY_FREE"]},"deliveryFee":{"type":"integer","description":"배송 비용","format":"int32"},"minimumPurchasePrice":{"type":"integer","description":"무료배송 조건을 위한 최소 구매 금액","format":"int32"},"isJejuAndIslandsMountainsDelivery":{"type":"boolean","description":"제주/도서산간 배송 여부"},"jejuDeliveryFee":{"type":"integer","description":"제주 배송 비용","format":"int32"},"islandsMountainsDeliveryFee":{"type":"integer","description":"도서산간 배송 비용","format":"int32"},"deliveryCompanyId":{"type":"integer","description":"택배사 ID","format":"int64"}},"description":"배송 정책"},"ProductResponseCategoryFepResponse":{"required":["id","level","name"],"type":"object","properties":{"id":{"type":"integer","description":"카테고리 식별용 ID","format":"int64"},"level":{"type":"integer","description":"카테고리 깊이 (1차 카테고리는 1, 2차 카테고리는 2)","format":"int32"},"name":{"type":"string","description":"카테고리 이름"},"parentId":{"type":"integer","description":"바로 위 카테고리 ID","format":"int64"}},"description":"1차 카테고리부터 해당 카테고리까지 경로상의 모든 카테고리 정보 배열"},"ProductResponseOptionGroupFepResponse":{"required":["name","order","values"],"type":"object","properties":{"name":{"type":"string","description":"옵션 그룹 이름"},"order":{"type":"integer","description":"옵션 그룹 표시 순서","format":"int32"},"values":{"type":"array","description":"이 옵션 그룹에 속하는 옵션 값","items":{"$ref":"#/components/schemas/ProductResponseOptionGroupValue"}}},"description":"상품 옵션 그룹"},"ProductResponseOptionGroupValue":{"required":["name","order"],"type":"object","properties":{"name":{"type":"string","description":"옵션 값 이름"},"order":{"type":"integer","description":"옵션 값 표시 순서","format":"int32"}},"description":"이 옵션 그룹에 속하는 옵션 값"},"ProductResponseStockFepResponse":{"required":["id","images","isHide","isMainPrice","isPurchasableAlone","isSoldOut","options","originPrice","remainingCount","salePrice","type"],"type":"object","properties":{"id":{"type":"integer","description":"재고 식별용 ID","format":"int64"},"itemId":{"type":"integer","description":"옵션 식별용 ID","format":"int64"},"type":{"type":"string","description":"재고 유형"},"options":{"type":"array","description":"옵션 목록","items":{"$ref":"#/components/schemas/ProductResponseStockOptionFepResponse"}},"remainingCount":{"type":"integer","description":"현재 판매 가능한 재고 수량","format":"int32"},"isMainPrice":{"type":"boolean","description":"대표 가격 여부 (true: 대표 가격으로 노출)"},"isSoldOut":{"type":"boolean","description":"품절 상태 여부 (true: 품절, false: 판매 중)","deprecated":true},"isHide":{"type":"boolean","description":"재고 숨김 여부 (true: 숨김, false: 노출)"},"originPrice":{"type":"integer","description":"정상가 (권장소비자가격이나 자사몰/온라인 채널에서 판매 이력이 있는 가격)","format":"int32"},"salePrice":{"type":"integer","description":"판매가 (셀러가 등록한 가격)","format":"int32"},"isPurchasableAlone":{"type":"boolean","description":"단독구매 가능 여부. true 면 단독구매 가능 false 면 단독구매 불가능","deprecated":true},"managementCode":{"type":"string","description":"판매자가 옵션 관리에 사용하는 코드"},"representativeThumbnailImage":{"type":"string","description":"옵션별 썸네일 이미지 URL"},"images":{"type":"array","description":"옵션별 썸네일 이미지 목록","items":{"$ref":"#/components/schemas/ProductResponseStockImageFepResponse"}}},"description":"상품의 옵션별 재고 정보"},"ProductResponseStockOptionFepResponse":{"required":["groupName","valueName"],"type":"object","properties":{"groupName":{"type":"string","description":"옵션 그룹 이름"},"valueName":{"type":"string","description":"옵션 값 이름"}},"description":"옵션 목록"},"ProductResponseStockImageFepResponse":{"required":["url"],"type":"object","properties":{"url":{"type":"string","description":"상품 옵션 썸네일 이미지 url"}},"description":"상품 옵션 이미지"},"ProductResponseImageFepResponse":{"required":["order","type","url"],"type":"object","properties":{"type":{"type":"string","description":"이미지 유형","enum":["THUMBNAIL","DESCRIPTION","DESCRIPTION_HTML","AD"]},"url":{"type":"string","description":"URL"},"requestedUrl":{"type":"string","description":"요청 이미지 URL"},"sellerHtml":{"type":"string","description":"판매자 HTML"},"order":{"type":"integer","description":"이미지 표시 순서","format":"int32"}},"description":"상품 이미지 (썸네일, 상세 설명 이미지 등)"},"ProductResponseExchangeReturnPolicyFepResponse":{"required":["applicationMethodDescription","applicationTermDescription","exchangeRefundLocationId","exchangeRoundTripDeliveryFee","refundOneWayDeliveryFee"],"type":"object","properties":{"exchangeRefundLocationId":{"type":"integer","description":"교환/반품지 ID","format":"int64"},"refundOneWayDeliveryFee":{"type":"integer","description":"반품 배송비(편도)","format":"int32"},"exchangeRoundTripDeliveryFee":{"type":"integer","description":"교환 배송비(왕복)","format":"int32"},"applicationMethodDescription":{"type":"string","description":"교환/반품 신청 방법"},"applicationTermDescription":{"type":"string","description":"교환/반품 신청 가능 기간"}},"description":"상품 교환/반품 정책"},"ProductResponseNoticeFepResponse":{"required":["categoryCode","items"],"type":"object","properties":{"categoryCode":{"type":"string","description":"상품 정보제공 고시 카테고리 코드"},"items":{"type":"array","description":"상품 정보제공 고시 항목 목록","items":{"$ref":"#/components/schemas/ProductResponseNoticeItemFepResponse"}}},"description":"상품 정보제공 고시"},"ProductResponseNoticeItemFepResponse":{"required":["content","id","title"],"type":"object","properties":{"id":{"type":"integer","description":"상품 정보제공 고시 항목 ID","format":"int64"},"title":{"type":"string","description":"상품 정보제공 고시 항목"},"content":{"type":"string","description":"상품 정보제공 고시 항목에 대한 내용"}},"description":"상품 정보제공 고시 항목 목록"}}},"paths":{"/api/v3/shopping-fep/products/{productId}/v2":{"get":{"tags":["상품 Public Controller"],"summary":"상품 조회","description":"상품 ID를 이용하여 상품 정보를 조회합니다.","operationId":"getProductV2","parameters":[{"name":"productId","in":"path","description":"상품 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"partnerName","in":"query","description":"연동 프로그램명 또는 자사 서비스명","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","NOT_FOUND","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/ProductFepResponse"}}}}}}}}}}}
```

## 상품 목록 조회

> 등록한 상품 목록을 커서 조회합니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ListProductsV2FepResponse":{"required":["hasNext","nextToken","products"],"type":"object","properties":{"products":{"type":"array","description":"상품 목록","items":{"$ref":"#/components/schemas/ListProductsV2FepResponseItem"}},"nextToken":{"type":"string","description":"다음 페이지를 위한 토큰. 다음 페이지 조회 시 이 값을 그대로 전달"},"hasNext":{"type":"boolean","description":"다음 페이지 존재 여부. false이면 마지막 페이지"}}},"ListProductsV2FepResponseItem":{"required":["exposureStatus","id","images","inspectionStatus","name","regTs","salePrice"],"type":"object","properties":{"id":{"type":"integer","description":"상품 ID","format":"int64"},"images":{"type":"array","description":"상품 이미지 목록","items":{"$ref":"#/components/schemas/ListProductsV2FepResponseImageItem"}},"brandName":{"type":"string","description":"브랜드명"},"name":{"type":"string","description":"상품명"},"salePrice":{"type":"integer","description":"판매가","format":"int32"},"inspectionStatus":{"type":"string","description":"검수 상태","enum":["LLM_INSPECTION_READY","COMPLETE","REJECT"]},"exposureStatus":{"type":"string","description":"노출 상태","enum":["UNEXPOSURE","EXPOSURE_WAITING","EXPOSURE","EXPOSURE_FINISHED"]},"regTs":{"type":"string","description":"상품 등록 일시","format":"date-time"}},"description":"상품 목록"},"ListProductsV2FepResponseImageItem":{"required":["id","indexOrder","inspectionStatus","type"],"type":"object","properties":{"id":{"type":"integer","description":"이미지 ID","format":"int64"},"type":{"type":"string","description":"이미지 유형","enum":["THUMBNAIL","DESCRIPTION","DESCRIPTION_HTML","AD","PRODUCT_ITEM"]},"url":{"type":"string","description":"이미지 URL"},"inspectionStatus":{"type":"string","enum":["LLM_INSPECTION_READY","COMPLETE","REJECT"]},"indexOrder":{"type":"integer","description":"상품 이미지 순서","format":"int32"}},"description":"상품 이미지 목록"}}},"paths":{"/api/v3/shopping-fep/products/v2":{"get":{"tags":["상품 Public Controller"],"summary":"상품 목록 조회","description":"등록한 상품 목록을 커서 조회합니다.","operationId":"listProductsV2","parameters":[{"name":"regStartDate","in":"query","description":"상품 등록 일자 시작 범위","required":false,"schema":{"type":"string","format":"date"}},{"name":"regEndDate","in":"query","description":"상품 등록 일자 끝 범위","required":false,"schema":{"type":"string","format":"date"}},{"name":"productIds","in":"query","description":"조회할 상품 ID 목록","required":false,"schema":{"uniqueItems":true,"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"nextToken","in":"query","description":"다음 페이지를 위한 커서 정보 (직전 호출에서 받은 nextToken을 그대로 넘겨 호출)","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"페이지 사이즈 (기본값: 20)","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"partnerName","in":"query","description":"연동 프로그램명 또는 자사 서비스명","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드"},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/ListProductsV2FepResponse"}}}}}}}}}}}
```

## 단일 상품의 아이템 목록 조회 (커서 기반)

> 상품에 속한 아이템(옵션) 목록을 커서 기반으로 조회합니다.\
> \
> \## 페이지네이션\
> \
> \- 커서 기반 페이지네이션을 사용합니다.\
> \
> \- 첫 요청 시 \`cursorItemId\`를 비워서 호출합니다.\
> \
> \- 응답의 \`hasNext\`가 \`true\`이면, \`nextCursor\` 값을 다음 요청의 \`cursorItemId\`에 넣어 호출합니다.\
> \
> \- \`hasNext\`가 \`false\`이면 마지막 페이지입니다.\
> \
> \## 필터링\
> \
> \- \`itemStatuses\`: 아이템 상태로 필터링할 수 있습니다. 여러 상태를 동시에 지정할 수 있습니다.\
> \
> \- \`itemIds\`: 특정 아이템 ID로 필터링할 수 있습니다. 여러 ID를 동시에 지정할 수 있습니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ListProductItemsFepResponse":{"required":["hasNext","items"],"type":"object","properties":{"items":{"type":"array","description":"아이템 목록","items":{"$ref":"#/components/schemas/ListProductItemsFepResponseItem"}},"hasNext":{"type":"boolean","description":"다음 페이지 존재 여부"},"nextCursor":{"type":"integer","description":"다음 페이지 커서 (다음 조회 시 cursorItemId로 전달)","format":"int64"}},"description":"상품 아이템 목록 조회 응답 (커서 기반)"},"ListProductItemsFepResponseItem":{"required":["isAdultProduct","isMainOption","itemId","itemName","originPrice","quantity","rejectReasons","salePrice","status"],"type":"object","properties":{"itemId":{"type":"integer","description":"아이템 ID","format":"int64"},"itemName":{"type":"string","description":"아이템명"},"quantity":{"type":"integer","description":"재고 수량","format":"int32"},"rejectReasons":{"type":"array","description":"검수 반려 사유 목록","items":{"$ref":"#/components/schemas/ListProductItemsFepResponseRejectReason"}},"isMainOption":{"type":"boolean","description":"대표 옵션 여부"},"status":{"$ref":"#/components/schemas/ListProductItemsFepResponseStatus"},"originPrice":{"type":"integer","description":"정상가","format":"int32"},"salePrice":{"type":"integer","description":"판매가","format":"int32"},"isAdultProduct":{"type":"boolean","description":"청소년 구매 불가 상품 여부"}},"description":"상품 아이템 항목"},"ListProductItemsFepResponseRejectReason":{"required":["message","title"],"type":"object","properties":{"title":{"type":"string","description":"반려 사유 제목"},"message":{"type":"string","description":"반려 사유 상세 메시지"}},"description":"검수 반려 사유"},"ListProductItemsFepResponseStatus":{"required":["code","label"],"type":"object","properties":{"code":{"type":"string","description":"상태 코드","enum":["SOLD_OUT","PENALTY","SELLING","WAITING_FOR_SALE","REJECTED","INSPECTING"]},"label":{"type":"string","description":"상태 라벨"}},"description":"아이템 상태 요약"}}},"paths":{"/api/v3/shopping-fep/products/{productId}/product-items":{"get":{"tags":["상품 Public Controller"],"summary":"단일 상품의 아이템 목록 조회 (커서 기반)","description":"상품에 속한 아이템(옵션) 목록을 커서 기반으로 조회합니다.\n\n## 페이지네이션\n\n- 커서 기반 페이지네이션을 사용합니다.\n\n- 첫 요청 시 `cursorItemId`를 비워서 호출합니다.\n\n- 응답의 `hasNext`가 `true`이면, `nextCursor` 값을 다음 요청의 `cursorItemId`에 넣어 호출합니다.\n\n- `hasNext`가 `false`이면 마지막 페이지입니다.\n\n## 필터링\n\n- `itemStatuses`: 아이템 상태로 필터링할 수 있습니다. 여러 상태를 동시에 지정할 수 있습니다.\n\n- `itemIds`: 특정 아이템 ID로 필터링할 수 있습니다. 여러 ID를 동시에 지정할 수 있습니다.","operationId":"getProductItemsByProduct_1","parameters":[{"name":"productId","in":"path","description":"상품 식별용 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"cursorItemId","in":"query","description":"커서 아이템 ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"pageSize","in":"query","description":"페이지 크기 (기본값: 20, 최대: 50)","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"itemStatuses","in":"query","description":"아이템 상태 필터","required":false,"schema":{"uniqueItems":true,"type":"array","items":{"type":"string","enum":["SOLD_OUT","PENALTY","SELLING","WAITING_FOR_SALE","REJECTED","INSPECTING"]}}},{"name":"itemIds","in":"query","description":"아이템 ID 필터 (최대 100개)","required":false,"schema":{"uniqueItems":true,"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/ListProductItemsFepResponse"}}}}}}}}}}}
```

## 상품 정보 노출 상태 보이기로 변경

> 상품의 노출 상태를 '보이기'로 변경합니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ShowProductBody":{"required":["productId"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 ID","format":"int64"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 보이기 요청"}}},"paths":{"/api/v3/shopping-fep/products/show":{"post":{"tags":["상품 Public Controller"],"summary":"상품 정보 노출 상태 보이기로 변경","description":"상품의 노출 상태를 '보이기'로 변경합니다.","operationId":"showProduct_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShowProductBody"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 정보 노출 상태 숨기기로 변경

> 상품의 노출 상태를 '숨기기'로 변경합니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"HideProductBody":{"required":["productId"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 ID","format":"int64"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 숨기기 요청"}}},"paths":{"/api/v3/shopping-fep/products/hide":{"post":{"tags":["상품 Public Controller"],"summary":"상품 정보 노출 상태 숨기기로 변경","description":"상품의 노출 상태를 '숨기기'로 변경합니다.","operationId":"hideProduct_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HideProductBody"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 옵션 판매가 수정

> 특정 상품 옵션의 판매가를 수정합니다.\
> \
> \## 가격 구조\
> \
> \- \*\*정상가\*\*: 권장소비자가격(도서는 정가) 또는 자사몰/온라인 판매 채널에서 판매 이력이 있는 가격\
> \- \*\*판매가\*\*: 실제로 소비자에게 상품을 판매하는 가격으로 쿠폰 등의 할인이 포함되지 않은 가격\
> \
> \## 상품정보 변경 시, API 호출 순서\
> \
> 1\. 상품 정보 조회 API로 상품 아이템 ID를 획득\
> 2\. 해당 상품 아이템 ID를 활용하여 판매가 수정 API 호출

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ChangeOptionSalePriceFepRequest":{"required":["productId","salePrice"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 식별용 ID","format":"int64"},"salePrice":{"type":"integer","description":"판매가 (셀러가 등록한 가격)\n\n- 최소 1원 이상\n- 정상가(originPrice) 이하여야 합니다","format":"int32"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 옵션 판매가 수정 요청"}}},"paths":{"/api/v3/shopping-fep/product-items/{productItemId}/sale-price":{"put":{"tags":["상품 Public Controller"],"summary":"상품 옵션 판매가 수정","description":"특정 상품 옵션의 판매가를 수정합니다.\n\n## 가격 구조\n\n- **정상가**: 권장소비자가격(도서는 정가) 또는 자사몰/온라인 판매 채널에서 판매 이력이 있는 가격\n- **판매가**: 실제로 소비자에게 상품을 판매하는 가격으로 쿠폰 등의 할인이 포함되지 않은 가격\n\n## 상품정보 변경 시, API 호출 순서\n\n1. 상품 정보 조회 API로 상품 아이템 ID를 획득\n2. 해당 상품 아이템 ID를 활용하여 판매가 수정 API 호출","operationId":"changeSalePrice","parameters":[{"name":"productItemId","in":"path","description":"상품 아이템 ID (상품 옵션 ID)","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeOptionSalePriceFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","NOT_FOUND","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 옵션 정상가 수정

> 특정 상품 옵션의 정상가를 수정합니다.\
> \
> \## 가격 구조\
> \
> \- \*\*정상가\*\*: 권장소비자가격(도서는 정가) 또는 자사몰/온라인 판매 채널에서 판매 이력이 있는 가격\
> \- \*\*판매가\*\*: 실제로 소비자에게 상품을 판매하는 가격으로 쿠폰 등의 할인이 포함되지 않은 가격\
> \
> \## 상품정보 변경 시, API 호출 순서\
> \
> 1\. 상품 정보 조회 API로 상품 아이템 ID를 획득\
> 2\. 해당 상품 아이템 ID를 활용하여 정상가 수정 API 호출

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ChangeOptionOriginPriceFepRequest":{"required":["originPrice","productId"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 식별용 ID","format":"int64"},"originPrice":{"type":"integer","description":"변경할 정상가 가격","format":"int32"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"상품 옵션 정상가 수정 요청"}}},"paths":{"/api/v3/shopping-fep/product-items/{productItemId}/origin-price":{"put":{"tags":["상품 Public Controller"],"summary":"상품 옵션 정상가 수정","description":"특정 상품 옵션의 정상가를 수정합니다.\n\n## 가격 구조\n\n- **정상가**: 권장소비자가격(도서는 정가) 또는 자사몰/온라인 판매 채널에서 판매 이력이 있는 가격\n- **판매가**: 실제로 소비자에게 상품을 판매하는 가격으로 쿠폰 등의 할인이 포함되지 않은 가격\n\n## 상품정보 변경 시, API 호출 순서\n\n1. 상품 정보 조회 API로 상품 아이템 ID를 획득\n2. 해당 상품 아이템 ID를 활용하여 정상가 수정 API 호출","operationId":"changeOriginPrice_1","parameters":[{"name":"productItemId","in":"path","description":"상품 아이템 ID (상품 옵션 ID)","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeOptionOriginPriceFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","NOT_FOUND","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 구매 개수 제한 생성

> 특정 상품 또는 옵션에 대한 구매 개수 제한을 생성합니다.\
> \
> \## 제한 설정\
> \
> \- \`startTs\`, \`endTs\`: 구매 제한이 적용되는 기간 설정합니다. (ISO-8601 형식)\
> \- \`maxQuantityPerUser\`: 기간 내 사용자 1인당 구매 가능한 최대 수량입니다.\
> \- \`productItemIds\`: 여러 옵션에 대해 동일한 제한 적용 시 배열로 전달합니다.\
> \
> \## 주의사항\
> \
> \- 동일한 옵션들은 같은 \`purchaseLimitGroupId\`로 묶여서 관리됩니다.\
> \- \`startTs\`는 \`endTs\`보다 이전이어야 함

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"CreatePurchaseLimitFepRequest":{"required":["endTs","maxQuantityPerUser","productId","productItemIds","startTs"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 식별용 ID\n\n- 검수 승인 완료된 상품만 가능","format":"int64"},"productItemIds":{"type":"array","description":"옵션 식별용 ID 목록 (1개 이상 필수)","items":{"type":"integer","description":"옵션 식별용 ID 목록 (1개 이상 필수)","format":"int64"}},"startTs":{"type":"string","description":"시작일자\n\n- 익일 이후만 가능 (당일 및 과거 날짜 불가)","format":"date-time"},"endTs":{"type":"string","description":"종료일자\n\n- 시작일자 이후여야 합니다\n- 동일 옵션에 대해 기간이 겹치는 구매 제한이 이미 존재하면 생성 불가","format":"date-time"},"maxQuantityPerUser":{"type":"integer","description":"제한할 구매 갯수 (1 이상의 양수)","format":"int32"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"구매 수량 제한 생성 요청"},"CreatePurchaseLimitFepResponse":{"required":["items"],"type":"object","properties":{"items":{"type":"array","description":"생성된 구매 수량 제한 목록","items":{"$ref":"#/components/schemas/CreatePurchaseLimitItemFepResponse"}}},"description":"구매 수량 제한 생성 응답"},"CreatePurchaseLimitItemFepResponse":{"required":["endTs","maxQuantityPerUser","productId","purchaseLimitGroupId","startTs"],"type":"object","properties":{"purchaseLimitGroupId":{"type":"integer","description":"구매 수량 제한 그룹 ID","format":"int64"},"productId":{"type":"integer","description":"상품 식별용 ID","format":"int64"},"productItemId":{"type":"integer","description":"옵션 식별용 ID","format":"int64"},"maxQuantityPerUser":{"type":"integer","description":"사용자당 최대 구매 수량","format":"int32"},"description":{"type":"string","description":"구매 수량 제한 설명"},"startTs":{"type":"string","description":"시작일시","format":"date-time"},"endTs":{"type":"string","description":"종료일시","format":"date-time"}},"description":"구매 수량 제한 생성 항목"}}},"paths":{"/api/v3/shopping-fep/purchase-limits":{"post":{"tags":["상품 구매 개수 제한 Public Controller"],"summary":"상품 구매 개수 제한 생성","description":"특정 상품 또는 옵션에 대한 구매 개수 제한을 생성합니다.\n\n## 제한 설정\n\n- `startTs`, `endTs`: 구매 제한이 적용되는 기간 설정합니다. (ISO-8601 형식)\n- `maxQuantityPerUser`: 기간 내 사용자 1인당 구매 가능한 최대 수량입니다.\n- `productItemIds`: 여러 옵션에 대해 동일한 제한 적용 시 배열로 전달합니다.\n\n## 주의사항\n\n- 동일한 옵션들은 같은 `purchaseLimitGroupId`로 묶여서 관리됩니다.\n- `startTs`는 `endTs`보다 이전이어야 함","operationId":"create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePurchaseLimitFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/CreatePurchaseLimitFepResponse"}}}}}}}}}}}
```

## 상품 구매 개수 제한 조회

> 특정 상품에 설정된 구매 개수 제한을 조회합니다.\
> \
> \## 응답 정보\
> \
> \- \`purchaseLimitGroupId\`: 동일한 구매 개수 제한 그룹에 속한 옵션들은 같은 ID를 가집니다.

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"GetPurchaseLimitListFepResponse":{"required":["items"],"type":"object","properties":{"items":{"type":"array","description":"구매 수량 제한 목록","items":{"$ref":"#/components/schemas/GetPurchaseLimitFepResponse"}}},"description":"구매 수량 제한 목록 조회 응답"},"GetPurchaseLimitFepResponse":{"required":["endTs","maxQuantityPerUser","productId","purchaseLimitGroupId","startTs"],"type":"object","properties":{"purchaseLimitGroupId":{"type":"integer","description":"구매 수량 제한 그룹 ID","format":"int64"},"productId":{"type":"integer","description":"상품 식별용 ID","format":"int64"},"productItemId":{"type":"integer","description":"옵션 식별용 ID","format":"int64"},"maxQuantityPerUser":{"type":"integer","description":"사용자당 최대 구매 수량","format":"int32"},"description":{"type":"string","description":"구매 수량 제한 설명"},"startTs":{"type":"string","description":"시작일시","format":"date-time"},"endTs":{"type":"string","description":"종료일시","format":"date-time"}},"description":"구매 수량 제한 상세"}}},"paths":{"/api/v3/shopping-fep/purchase-limits/product-ids/{productId}":{"get":{"tags":["상품 구매 개수 제한 Public Controller"],"summary":"상품 구매 개수 제한 조회","description":"특정 상품에 설정된 구매 개수 제한을 조회합니다.\n\n## 응답 정보\n\n- `purchaseLimitGroupId`: 동일한 구매 개수 제한 그룹에 속한 옵션들은 같은 ID를 가집니다.","operationId":"get","parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"partnerName","in":"query","description":"연동 프로그램명 또는 자사 서비스명","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/GetPurchaseLimitListFepResponse"}}}}}}}}}}}
```

## 상품 구매 개수 제한 제거

> 설정된 구매 개수 제한을 삭제합니다.\
> \
> \## 삭제 방법\
> \
> \- \`purchaseLimitGroupId\`: 조회 API에서 확인한 구매 개수 제한 그룹 ID입니다.\
> \- \`productItemId\`: 삭제할 옵션 ID입니다.\
> \- 여러 옵션의 제한을 한 번에 삭제 가능합니다. (배열로 전달)\ <br>

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"DeletePurchaseLimitFepRequest":{"required":["purchaseLimitGroups"],"type":"object","properties":{"purchaseLimitGroups":{"type":"array","description":"삭제할 구매 수량 제한 목록","items":{"$ref":"#/components/schemas/DeletePurchaseLimitGroupFepItem"}},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}},"description":"구매 수량 제한 삭제 요청"},"DeletePurchaseLimitGroupFepItem":{"required":["productItemId","purchaseLimitGroupId"],"type":"object","properties":{"productItemId":{"type":"integer","description":"옵션 ID","format":"int64"},"purchaseLimitGroupId":{"type":"integer","description":"상품 구매 갯수 제한 ID","format":"int64"}},"description":"구매 수량 제한 삭제 항목"}}},"paths":{"/api/v3/shopping-fep/purchase-limits":{"delete":{"tags":["상품 구매 개수 제한 Public Controller"],"summary":"상품 구매 개수 제한 제거","description":"설정된 구매 개수 제한을 삭제합니다.\n\n## 삭제 방법\n\n- `purchaseLimitGroupId`: 조회 API에서 확인한 구매 개수 제한 그룹 ID입니다.\n- `productItemId`: 삭제할 옵션 ID입니다.\n- 여러 옵션의 제한을 한 번에 삭제 가능합니다. (배열로 전달)\n\n","operationId":"delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePurchaseLimitFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["INVALID_REQUEST","BAD_REQUEST","COMMON_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 상품 옵션 정상 재고 수량 변경

> 특정 상품 옵션의 정상 재고 수량을 변경합니다.\
> \
> \## 주의사항\
> \
> \- 재고 수량은 음수가 될 수 없습니다.\
> \- 재고 수량을 0으로 설정하면 품절 처리됩니다. \
> \- 품절 상태의 상품의 재고 수량을 1 이상으로 설정하면 품절 취소됩니다.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ChangeOptionRemainingCountFepRequest":{"required":["productId","remainingCount"],"type":"object","properties":{"productId":{"type":"integer","description":"상품 식별용 ID","format":"int64"},"remainingCount":{"minimum":0,"type":"integer","description":"현재 판매 가능한 재고 수량 (0 이상)","format":"int32"},"partnerName":{"type":"string","description":"연동 프로그램명 또는 자사 서비스명"}}}}},"paths":{"/api/v3/shopping-fep/product-items/{productItemId}/stocks/normal-stock/remaining-count":{"put":{"tags":["상품 Public Controller"],"summary":"상품 옵션 정상 재고 수량 변경","description":"특정 상품 옵션의 정상 재고 수량을 변경합니다.\n\n## 주의사항\n\n- 재고 수량은 음수가 될 수 없습니다.\n- 재고 수량을 0으로 설정하면 품절 처리됩니다. \n- 품절 상태의 상품의 재고 수량을 1 이상으로 설정하면 품절 취소됩니다. ","operationId":"changeOptionRemainingCount_1","parameters":[{"name":"productItemId","in":"path","description":"상품 아이템 ID (상품 옵션 ID)","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeOptionRemainingCountFepRequest"}}},"required":true},"responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드"},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"type":"object","description":"성공시 제공, 별도 내용이 없습니다. {}으로 반환"}}}}}}}}}}}
```

## 택배사 목록 조회

> 사용 가능한 택배사 목록을 조회합니다.\
> \
> \## 사용처\
> \
> \- 상품 등록/수정 시 배송정책의 \`deliveryCompanyId\` 파라미터에 사용할 택배사 ID를 확인할 수 있습니다

```json
{"openapi":"3.0.1","info":{"title":"ShoppingFep API","version":"snapshot"},"servers":[{"url":"https://shopping-fep.toss.im"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ListDeliveryCompaniesFepResponse":{"required":["deliveryCompanies"],"type":"object","properties":{"deliveryCompanies":{"type":"array","description":"택배사 목록","items":{"$ref":"#/components/schemas/DeliveryCompanyFepResponse"}}},"description":"택배사 목록 조회 응답"},"DeliveryCompanyFepResponse":{"required":["code","id","isEnabled","name"],"type":"object","properties":{"id":{"type":"integer","description":"택배사 ID","format":"int64"},"name":{"type":"string","description":"택배사 명"},"code":{"type":"string","description":"배송 코드"},"isEnabled":{"type":"boolean","description":"사용 여부"}},"description":"택배사 정보"}}},"paths":{"/api/v3/shopping-fep/delivery-companies":{"get":{"tags":["상품 Public Controller"],"summary":"택배사 목록 조회","description":"사용 가능한 택배사 목록을 조회합니다.\n\n## 사용처\n\n- 상품 등록/수정 시 배송정책의 `deliveryCompanyId` 파라미터에 사용할 택배사 ID를 확인할 수 있습니다","operationId":"listDeliveryCompanies_1","responses":{"200":{"description":"모든 응답은 200으로 내려갑니다 (성공 실패 포함) (장애상황에서만 5xx 노출)","content":{"application/json":{"schema":{"type":"object","properties":{"resultType":{"type":"string","description":"응답 결과 타입","enum":["SUCCESS","FAIL"]},"error":{"type":"object","properties":{"errorCode":{"type":"string","description":"에러 코드","enum":["COMMON_ERROR","INTERNAL_SERVER_ERROR"]},"reason":{"type":"string","description":"에러 사유"}},"description":"에러 응답, resultType FAIL 시 제공"},"success":{"$ref":"#/components/schemas/ListDeliveryCompaniesFepResponse"}}}}}}}}}}}
```

> ### API 연동 중 문의사항이나 개선 제안이 있으신가요?

{% hint style="info" %}
토스쇼핑 API 연동에 대한 질문이나, 건의사항이 있다면 [연동/개발 문의](https://discord.gg/xPz6H9NZ3P)에 남겨주세요. 다른 유저의 문의를 참고하거나, 토스쇼핑 담당자와 질의를 주고 받을 수 있어요.
{% endhint %}
