更新地點的詳細資料與營業時間
變更聯絡資料、發布包含單次覆寫設定的完整每週營業時間表、標記暫時停業、設定 Google 類別,並讀回變更結果。
POST /locations/update 會執行部分更新。所有欄位都放在 input 下,input.id 是唯一的必填欄位,省略的欄位會保留目前的值。以下各節只會變更 JSON 請求主體。
1. 更新電話與網站
傳送 id 以及要變更的欄位。發布平台會將 bizUrl 發布為網站網址。Python SDK 的 locations.update() 接受使用 camelCase 鍵的 dict,Node SDK 的 updateLocation() 則接受相同的物件。
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" }}'{ "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 是一個陣列,一週中的每一天各有一個項目。請務必傳送全部七個項目,並使用 type: "CLOSED" 和空的 slots 陣列標記休息日,不要省略該日。同一天內的時段不得重疊。
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 項目。此項目只會覆寫該日期的設定,不會變更每週的固定營業時間:
{ "day": "SPECIAL", "type": "CLOSED", "specialDate": "2026-12-25", "slots": [] }3. 標記暫時停業或隱藏地址
temporarilyClosed: true 會將商家標記為停業,並停止發布其營業時間。將其設為 false 即可恢復營業。對於服務區域商家,請設定 hideAddress: true:ListingsAPI 會在地點資料中保留地址,但不會將地址提交至發布平台。
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,例如 gcid:restaurant,而 additionalGbpSiteCategoryIds 則接受更多 GCID。兩者都會根據 countryIso 解析,因此請在同一次呼叫中傳送國家。
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"] }}'請勿將這些欄位與 additionalCategoryIds 混淆,後者接受來自子類別端點的整數 databaseId 值。請參閱查詢國家、州與類別。
5. 讀回地點資料
GET /locations-by-ids 會回傳一個或多個 base64 ID 對應的完整記錄,這些 ID 以 JSON 陣列形式透過 ids 查詢參數傳入。請將 phone、businessHours 和 temporarilyClosed 與您傳送的內容比較。
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ=="]' \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "getLocationsByIds": [ { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "phone": "5125550199", "hideAddress": false, "temporarilyClosed": true } ] }}您帳戶中不存在的 ID 會從陣列中排除,且不會產生錯誤,因此請比較回傳的數量與您請求的數量。
若已設定 webhook,就會觸發 profile.updated 事件。此事件經過防抖動(debounce)處理,每個地點每 60 秒只傳送一次,並在首次觸發時立即傳送:該時段內的後續編輯會合併處理,而 changed_fields 僅描述啟動該時段的那次編輯。請在收到事件時讀回地點資料,並在該時段結束後再次讀回。
後續步驟
- 上傳標誌、封面與相片:將圖片加入您剛更新的記錄。
- 尋找地點並封存您不再管理的地點:依門市代碼搜尋,並將已停業的分店封存。
- 更新地點與依 ID 取得地點:參考文件頁面,包含地點操作連結及所有可寫入欄位。