사업장 세부 정보 및 영업시간 업데이트

연락처 정보를 변경하고, 일회성 재정의가 포함된 전체 주간 영업 일정을 게시하고, 임시 휴업을 표시하고, Google 카테고리를 설정한 다음, 변경 사항을 다시 조회합니다.

POST /locations/update는 부분 업데이트를 수행합니다. 모든 필드는 input 아래에 지정하며, input.id만 필수 필드이고, 생략한 필드는 현재 값을 유지합니다. 아래 각 섹션에서는 JSON 요청 본문만 변경합니다.

1. 전화번호 및 웹사이트 업데이트

id와 함께 변경할 필드를 전송합니다. 게시 플랫폼은 bizUrl을 웹사이트 URL로 게시합니다. Python SDK의 locations.update()는 camelCase 키를 사용하는 dict를 받으며, Node SDK의 updateLocation()도 동일한 객체를 받습니다.

Phone and website
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "id": "TG9jYXRpb246MTgwMDI4OQ==",    "phone": "5125550199",    "bizUrl": "https://acmekitchen.example.com"  }}'
JSON
{  "data": {    "updateLocation": {      "success": true,      "errors": null,      "location": {        "id": "TG9jYXRpb246MTgwMDI4OQ==",        "databaseId": 1800289,        "name": "Jenny Home",        "phone": "5125550199",        "status": "APPROVED"      }    }  }}

유효성 검사에 실패해도 HTTP 200이 반환되고, success: false와 함께 data.updateLocation.errors에 실패 사유가 포함되므로 상태 코드 대신 success를 확인해야 합니다. 이 경우 두 SDK 모두 ValidationError 예외를 발생시킵니다.

2. 주간 영업시간 설정

businessHours는 요일마다 항목이 1개씩 있는 배열입니다. 항상 7개 항목을 모두 전송하고, 휴무일은 생략하지 말고 type: "CLOSED"와 빈 slots 배열로 표시합니다. 하루 안의 시간 구간은 서로 겹치면 안 됩니다.

필드값참고 사항
dayMONDAY부터 SUNDAY까지 또는 SPECIALSPECIAL은 specialDate에 지정된 날짜에 적용하는 일회성 재정의입니다.
typeOPEN 또는 CLOSED영업하지 않는 날에는 CLOSED를 slots: []과 함께 사용합니다.
slots[].start, slots[].end09:00am, 05:00pmam 또는 pm을 사용하는 12시간제 시각입니다. 분할 영업을 위해 하루에 여러 시간대를 지정할 수 있습니다.
specialDateYYYY-MM-DDSPECIAL 항목에만 사용하며, 이 항목은 7개 요일 항목과 함께 전송해야 하고 절대 요일 항목을 대신해서는 안 됩니다.
moreHours[]hoursTypeId, moreHour[]배달 또는 드라이브스루와 같은 부가 서비스의 영업 일정입니다. moreHour는 동일한 day, type, slots 구조를 사용하며 specialDate는 없습니다.
Weekly hours
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "id": "TG9jYXRpb246MTgwMDI4OQ==",    "businessHours": [      { "day": "MONDAY",    "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "TUESDAY",   "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "WEDNESDAY", "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "THURSDAY",  "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "FRIDAY",    "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "SATURDAY",  "type": "OPEN",   "slots": [{ "start": "10:00am", "end": "02:00pm" }] },      { "day": "SUNDAY",    "type": "CLOSED", "slots": [] }    ]  }}'

공휴일에는 같은 배열에 SPECIAL 항목을 추가합니다. 이 항목은 해당 날짜만 재정의하며 주간 일정은 그대로 유지합니다.

JSON
{ "day": "SPECIAL", "type": "CLOSED", "specialDate": "2026-12-25", "slots": [] }

3. 임시 휴업 표시 또는 주소 숨기기

temporarilyClosed: true는 사업장을 휴업 상태로 표시하고 영업시간 게시를 중단합니다. 영업을 재개하려면 이 값을 false로 설정합니다. 서비스 지역 비즈니스의 경우 hideAddress: true를 설정하면 ListingsAPI는 사업장 정보에 주소를 유지하지만 게시 플랫폼에는 제출하지 않습니다.

Temporary closure
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "temporarilyClosed": true } }'

4. Google 카테고리 설정

Google Business Profile에는 숫자형 subCategoryId와 별개인 자체 카테고리 분류 체계가 있습니다. primaryGbpSiteCategoryId에는 gcid:restaurant과 같은 GCID를 지정하고, additionalGbpSiteCategoryIds에는 추가 GCID를 지정합니다. 둘 다 countryIso를 기준으로 해석되므로 같은 호출에서 국가도 전송합니다.

Google categories
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "id": "TG9jYXRpb246MTgwMDI4OQ==",    "countryIso": "US",    "primaryGbpSiteCategoryId": "gcid:restaurant",    "additionalGbpSiteCategoryIds": ["gcid:pizza_restaurant", "gcid:italian_restaurant"]  }}'

이를 하위 카테고리 엔드포인트의 정수형 databaseId 값을 받는 additionalCategoryIds와 혼동하지 않아야 합니다. 국가, 주 및 카테고리 조회를 참조하세요.

5. 사업장 다시 조회

GET /locations-by-ids는 ids 쿼리 매개변수에 JSON 배열로 전달한 1개 이상의 base64 ID에 해당하는 전체 레코드를 반환합니다. phone, businessHours, temporarilyClosed를 전송한 값과 비교합니다.

Verify
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ=="]' \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "getLocationsByIds": [      {        "id": "TG9jYXRpb246MTgwMDI4OQ==",        "databaseId": 1800289,        "name": "Jenny Home",        "phone": "5125550199",        "hideAddress": false,        "temporarilyClosed": true      }    ]  }}

계정에 존재하지 않는 ID는 오류 없이 배열에서 제외되므로 반환된 개수를 요청한 개수와 비교합니다.

웹훅이 구성되어 있으면 profile.updated 이벤트가 발생합니다. 이벤트 전달은 사업장별로 60초당 1회로 디바운스되며, 해당 시간 구간이 시작될 때 전달됩니다. 해당 구간 내의 후속 수정은 통합되며, changed_fields는 구간을 시작한 수정만 설명합니다. 이벤트가 도착하면 사업장을 다시 조회하고, 해당 시간 구간이 끝난 후 다시 한번 조회합니다.

다음 단계