Mall StoryDevelopers
관리자 API상품 관리소유자 토큰

상품 일괄 처리

고른 상품 여러 개의 항목 하나를 한 번에 바꾸거나, 전시 · 판매를 켜고 끄거나, 지웁니다. 관리자 상품 목록의 일괄 처리와 같습니다.

업데이트됨 10.26 — 상품 일괄 정보수정 항목이 늘고, 할인 / 적립금이 둘로 나뉘었습니다

이 쪽은

관리자 상품 목록에서 상품을 골라 누르는 일괄 정보수정 · 전시변경 · 판매변경 · 삭제와 같습니다. 주소 하나에 action 으로 고릅니다. 상품마다 상품 수정 · 상품 삭제와 같은 길을 지나므로 규칙 · 키 검사 · 감사 기록이 한 건씩 할 때와 같습니다.

  • 한 번에 1,000개까지. 일부가 실패해도 나머지는 처리하고 200 으로 돌려줍니다 — 무엇이 안 됐는지는 failed 로 봅니다.
  • 본문이 틀리면(모르는 항목 · 항목 밖의 칸 · 잘못된 값 · 잘못된 키) 한 건도 건드리기 전에 400 입니다.
  • 상품마다 다른 값을 넣으려면 상품 수정을 한 건씩 부릅니다. 이 주소는 같은 값을 여러 상품에 덮어씁니다.
본문형식설명
action필수string처리할 일 코드값
product_uniques필수string[]상품 키 1 ~ 1,000개
fieldstringupdate 일 때 필수 — 바꿀 항목 하나 코드값
patchobjectupdate 일 때 필수 — 그 항목의 칸만(상품 등록의 필드 · 규칙과 같음). 항목 밖의 칸은 400
valuebooleandisplay · sale 일 때 필수 — true 켜기 · false 끄기

정보수정

POSThttps://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk

권한 products:write

항목 하나의 값을 고른 상품 모두에 덮어씁니다. 아래는 판매가를 12,000원으로 — 셋 다 됐습니다.

bash요청
curl -X POST 'https://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk' \
  -H 'Authorization: Bearer msat_8Hk2wQ7...' \
  -H 'Content-Type: application/json' \
  -d '{"action":"update","product_uniques":["6acdc089c2ca90eedea621e1","6acdc089c2ca90eedea621e2","6acdc089c2ca90eedea621e3"],"field":"sale-price","patch":{"sale_price":12000}}'
json200 OK
{
  "done": 3,
  "failed": []
}

응답 필드

필드형식설명
donenumber처리한 상품 수
failedarray처리하지 못한 상품. 비어 있으면 모두 됐습니다
failed[].product_uniquestring그 상품 키
failed[].codestring까닭 코드 — 한 건 수정의 오류 코드와 같고(ReferenceNotFound · InvalidParameterValue 등), 일괄 처리에만 있는 OptionProduct(옵션 상품의 재고 · 원가 · 색상 · 사이즈 · 관리코드, 이미 옵션이 있는 상품의 주문옵션)가 더 있습니다
failed[].messagestring까닭 문장(관리자 화면과 같음)
  • 재고수량 · 원가 · 색상 · 사이즈 · 관리코드는 옵션이 있는 상품에서 옵션마다 갖는 값이라 그 상품은 건너뛰고 실패(OptionProduct)로 돌려줍니다 — 아래 응답은 원가를 셋에 넣은 결과입니다.
  • json200 OK — 옵션 상품 하나 실패
    {
      "done": 2,
      "failed": [
        {
          "product_unique": "6acdc089c2ca90eedea621e3",
          "code": "OptionProduct",
          "message": "주문옵션이 적용된 상품은 일괄 정보수정을 통해 [재고수량], [원가], [색상], [사이즈], [관리코드]를 변경할 수 없습니다. 상품 수정 페이지로 접근하여 [주문 옵션]란에서 각각 수정하시기 바랍니다."
        }
      ]
    }

오류

상태code언제
400InvalidParameterValuefield 가 없거나 모름 · patch 에 항목 밖의 칸("sale-price 항목은 patch 에 sale_price 만 받습니다: name") · patch 값이 틀림 · product_uniques 가 비었거나 1,000개 넘음 · 잘못된 키
401MissingLoginSessionAuthorization 헤더에 Bearer 토큰이 없음
401InvalidAccessToken토큰이 틀리거나 만료 · 폐기됨
403InsufficientScope토큰에 products:write 가 없음

배송 방식 바꾸기

delivery-PARCEL · delivery-DIRECT · delivery-QUICK · delivery-PICKUP 은 그 방식 한 줄만 바꿔 끼우고 다른 방식은 그대로 둡니다.

  • 켜기 · 템플릿 바꾸기 — "patch": {"delivery": [{"method": "QUICK", "template_id": "…"}]}. 템플릿은 같은 방식의 이 쇼핑몰 템플릿이어야 합니다(아니면 그 상품이 ReferenceNotFound).
  • 끄기 — "patch": {"delivery": []}. 끄고 나서 배송 방식이 하나도 남지 않으면 그 상품은 배송없음이 됩니다.
  • 배송없음 상품에 방식을 켜면 배송 상품이 됩니다 — 배송여부는 남은 방식으로 정합니다.
  • 쇼핑몰이 상품 옵션 설정에서 배송여부를 숨겼으면(모든 상품이 배송 고정) 마지막 방식을 끄는 상품은 배송없음이 되지 않고 실패(InvalidParameterValue)로 돌려줍니다.
bash요청 — 퀵배송 켜기
curl -X POST 'https://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk' \
  -H 'Authorization: Bearer msat_8Hk2wQ7...' \
  -H 'Content-Type: application/json' \
  -d '{"action":"update","product_uniques":["6acdc089c2ca90eedea621e1"],"field":"delivery-QUICK","patch":{"delivery":[{"method":"QUICK","template_id":"6abf72da1454015871f8be50"}]}}'
json그 상품의 delivery(상세)
[
  {
    "method": "PARCEL",
    "template_id": "6a9fa2affc6e77ca0e475e4c"
  },
  {
    "method": "QUICK",
    "template_id": "6abf72da1454015871f8be50"
  }
]

주문옵션 · 이미지 바꾸기

option-select 는 option_info 와 options 를 함께 받습니다(필드는 상품 등록과 같음). 옵션별 재고 · 관리코드 · 장바구니에 담긴 옵션이 한꺼번에 바뀌지 않도록 갈래가 둘입니다.

  • 설정 — option_info.names 와 options 를 모두 채웁니다. 옵션이 없는 상품에만 새로 붙고, 이미 옵션이 있는 상품은 건너뛰고 실패(OptionProduct)입니다. 그 상품은 상품 수정으로 고칩니다.
  • 설정안함 — "patch": {"option_info": {"names": []}, "options": []}. 옵션이 있는 상품의 옵션을 모두 지웁니다(상품 재고는 마지막 옵션 재고 합계가 남음). 옵션이 없는 상품은 건드리지 않고 성공으로 셉니다.
  • 한쪽만 비어 오면(옵션명만 · 행만) 한 건도 건드리기 전에 400 입니다.
  • image · detail 과 옵션 이미지는 한 파일을 여러 상품이 같이 쓰지 않도록 상품마다 파일을 복사해 붙입니다 — 상품 수만큼 저장 용량을 씁니다.

전시변경 · 판매변경

POSThttps://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk

권한 products:write

display 는 전시를, sale 은 판매를 켜고 끕니다. 켤 때 전시기간이 걸려 있던 상품은 기간 전시로 돌아가고, 판매를 켜도 재고가 0 이면 품절로 저장됩니다.

bash요청
curl -X POST 'https://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk' \
  -H 'Authorization: Bearer msat_8Hk2wQ7...' \
  -H 'Content-Type: application/json' \
  -d '{"action":"display","product_uniques":["6acdc089c2ca90eedea621e1","6acdc089c2ca90eedea621e2","6acdc089c2ca90eedea621e3"],"value":false}'
json200 OK
{
  "done": 3,
  "failed": []
}

오류

상태code언제
400InvalidParameterValuevalue 가 true · false 가 아님
401MissingLoginSessionAuthorization 헤더에 Bearer 토큰이 없음
401InvalidAccessToken토큰이 틀리거나 만료 · 폐기됨
403InsufficientScope토큰에 products:write 가 없음

삭제

POSThttps://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk

권한 products:write

고른 상품을 지웁니다. 상품 삭제와 같고 되돌릴 수 없습니다.

bash요청
curl -X POST 'https://api.mallstory.kr/v1/shop/{shop_unique}/products/bulk' \
  -H 'Authorization: Bearer msat_8Hk2wQ7...' \
  -H 'Content-Type: application/json' \
  -d '{"action":"delete","product_uniques":["6acdc089c2ca90eedea621e1","6acdc089c2ca90eedea621e2","6acdc089c2ca90eedea621e3"]}'
json200 OK
{
  "done": 3,
  "failed": []
}

오류

상태code언제
401MissingLoginSessionAuthorization 헤더에 Bearer 토큰이 없음
401InvalidAccessToken토큰이 틀리거나 만료 · 폐기됨
403InsufficientScope토큰에 products:write 가 없음