更新地点的详细信息和营业时间

更改联系信息,发布包含一次性覆盖设置的完整每周营业时间表,标记临时停业,设置 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 是一个数组,一周中的每一天对应一个条目。请始终发送全部 7 个条目,并使用 type: "CLOSED" 和空的 slots 数组标记不营业的日期,而不是将其省略。同一天内的时间段不得重叠。

字段值说明
dayMONDAY 至 SUNDAY,或 SPECIALSPECIAL 是针对 specialDate 中指定日期的一次性覆盖设置。
typeOPEN 或 CLOSED对于不营业的日期,请同时使用 CLOSED 和 slots: []。
slots[].start, slots[].end09:00am, 05:00pm使用带有 am 或 pm 的 12 小时制时间。每天允许设置多个时间段,以支持分段营业。
specialDateYYYY-MM-DD仅用于 SPECIAL 条目,该条目必须与一周 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,例如 gcid:restaurant,而 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"]  }}'

请勿将它们与 additionalCategoryIds 混淆,后者接受子类别端点返回的整数 databaseId 值。请参阅查询国家、州和类别。

5. 读取更新后的地点信息

GET /locations-by-ids 返回一个或多个 base64 ID 对应的完整记录,这些 ID 以 JSON 数组的形式通过 ids 查询参数传入。请将 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 会从数组中移除,且不会报错,因此请将返回的数量与您请求的数量进行比较。

如果配置了 webhook,则会触发一个 profile.updated 事件。该事件采用前沿触发的防抖机制,每个地点每 60 秒最多投递一次:该时间窗口内的后续编辑会被合并,而 changed_fields 仅描述开启该窗口的那次编辑。请在事件到达时读取地点信息,并在时间窗口结束后再次读取。

后续步骤