숙소상품 카테고리 상품의 숙소정보를 저장합니다. 상품 하나에 숙소정보 하나이며, 등록과 수정이 같은 API입니다.
- 숙소상품 카테고리(카테고리 조회 응답의 accommodationSupported 가 true)에서만 사용할 수 있습니다.
- 요청 내용 전체로 저장하므로 보내지 않은 선택 항목(guide, addressDetail, amenityCodes, amenitiesText 등)은 삭제됩니다. 일부만 바꿀 때도 숙소정보 조회 응답에 바꿀 값을 반영해 전체를 보내 주세요.
- 숙소정보 조회 응답을 그대로 보내도 되지만, 사용이 중지된 부대시설 코드는 오류(accommodation.amenity_code.invalid)가 나므로 부대시설 코드 목록 조회에 없는 코드는 빼고 보내 주세요.
- 숙소상품 카테고리 상품은 숙소정보가 필수라 상품 등록 요청에 accommodation 을 함께 넣어야 합니다(없으면 accommodation.required 오류). 이 API 는 등록된 상품의 숙소정보만 바꿀 때 사용합니다. 상품과 함께 저장할 때의 규칙(카테고리 변경 시 삭제 등)은 ProductRequest 의 주의사항 '18. 숙소정보'를 참고해 주세요.
본인 스토어의 상품만 요청할 수 있습니다. 다른 스토어의 상품이거나 없는 상품이면 404(error_code -12002) 에러가 반환됩니다.
요청
<Content-type: application/json 요청>
POST /v1/store/product/accommodation/update?productId={productId} HTTP/1.1
Content-type: application/json
$RequestBody
<요청 패러미터>
| 키 | 타입 | 필수여부 | 설명 |
|---|---|---|---|
| productId | Long | 필수 | 상품번호(쿼리 파라미터) |
<RequestBody>
| 타입 | 필수여부 | 설명 |
|---|---|---|
| Accommodation | 필수 | 숙소정보. 필드와 제약사항은 Accommodation 데이터 타입을 참고해 주세요. |
<요청 바디 샘플>
{
"type": "HOTEL",
"name": "제주 오션뷰 호텔",
"checkInTime": "15:00",
"checkOutTime": "11:00",
"guide": "체크인 시 신분증을 확인합니다.",
"zipcode": "63535",
"address": "제주특별자치도 서귀포시 예시로 123",
"addressDetail": "본관",
"longitude": 126.4128371235,
"latitude": 33.2462189877,
"businessNumber": "1234567890",
"amenityCodes": [
"WIFI",
"PARKING",
"BREAKFAST"
],
"amenitiesText": "오션뷰 라운지, 키즈 클럽"
}
응답
요청이 성공하면 저장된 숙소정보가 반환됩니다.
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"type": "HOTEL",
"name": "제주 오션뷰 호텔",
"checkInTime": "15:00",
"checkOutTime": "11:00",
"guide": "체크인 시 신분증을 확인합니다.",
"zipcode": "63535",
"address": "제주특별자치도 서귀포시 예시로 123",
"addressDetail": "본관",
"longitude": 126.4128371235,
"latitude": 33.2462189877,
"businessNumber": "1234567890",
"amenityCodes": [
"WIFI",
"PARKING",
"BREAKFAST"
],
"amenitiesText": "오션뷰 라운지, 키즈 클럽"
}
오류
검증에 실패하면 400 응답의 validation 에 필드별 문구(필드와 무관한 사유는 _global)가, reason_code 에 그중 대표 사유 하나의 코드가 담깁니다. 오류가 여러 개면 reason_code 는 validation 의 첫 항목과 다를 수 있으니, 전체 사유는 validation 으로 확인해 주세요.
| reason_code | 상황 |
|---|---|
| accommodation.categoryNotAllowed | 숙소상품 카테고리가 아닌 상품 |
| accommodation.type.empty | 숙박 유형(type) 누락 |
| accommodation.type.invalid | 숙박 유형 목록에 없는 값 |
| accommodation.name.empty | 숙소명 누락 |
| accommodation.name.oversize | 숙소명이 70자를 넘음 |
| accommodation.time.empty | 체크인·체크아웃 시각 누락 |
| accommodation.time.unparseable | 체크인·체크아웃 시각이 HH:mm 형식이 아님 |
| accommodation.time.invalid_minute | 체크인·체크아웃 시각의 분이 00·30 이 아님 |
| accommodation.guide.oversize | 안내사항이 1,000자를 넘음 |
| accommodation.address.empty | 주소 누락 |
| accommodation.address.oversize | 주소가 500자를 넘음 |
| accommodation.address_detail.oversize | 상세주소가 100자를 넘음 |
| accommodation.longitude.invalid | 경도가 -180~180 을 벗어남 |
| accommodation.latitude.invalid | 위도가 -90~90 을 벗어남(위도·경도를 바꿔 넣은 경우 포함) |
| accommodation.zipcode.empty | 해외 숙소의 우편번호 누락 |
| accommodation.zipcode.oversize | 우편번호가 10자를 넘음 |
| accommodation.country_code.invalid | 해외 숙소의 국가코드가 2자리가 아님 |
| accommodation.city.empty | 해외 숙소의 도시 누락 |
| accommodation.city.oversize | 도시가 60자를 넘음 |
| accommodation.state_province.oversize | 주/도가 60자를 넘음 |
| accommodation.business_number.invalid | 국내 숙소의 사업자번호가 하이픈 없는 숫자 10자리가 아님 |
| accommodation.amenity_code.invalid | 부대시설 코드 목록 조회에 없는 코드(사용이 중지된 코드 포함) |
| accommodation.amenity.oversize | amenitiesText 의 항목이 100자를 넘음 |
| accommodation.amenity.invalid_chars | amenitiesText 에 한글·영문·숫자·공백 외 문자가 있음 |
<오류 응답 샘플>
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
{
"error_code": -10001,
"error_message": "유효하지 않은 요청입니다.",
"reason_code": "accommodation.time.invalid_minute",
"validation": {
"checkInTime": [
"체크인 시각의 분은 00분 또는 30분만 가능합니다."
]
}
}