拠点の詳細と営業時間を更新する

連絡先情報を変更し、特定日の例外設定を含む1週間分のスケジュールを公開し、臨時休業を設定し、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配列で指定してください。1日の中で時間帯が重複してはいけません。

フィールド値注意事項
dayMONDAYからSUNDAY、またはSPECIALSPECIALは、specialDateの日付に対する1回限りの例外設定です。
typeOPENまたはCLOSED休業日には、CLOSEDとslots: []を組み合わせて使用します。
slots[].start, slots[].end09:00am, 05:00pm時刻はamまたはpmを付けた12時間表記で指定します。分割営業に対応するため、1日に複数の時間帯を指定できます。
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 は、エラーを返さずに配列から除外されるため、返された件数をリクエストした件数と比較してください。

Webhook が設定されている場合、profile.updatedイベントが発生します。このイベントには、拠点ごとに60秒間で1回の配信にまとめるデバウンス処理が適用され、最初の編集時に配信されます。その時間枠内の後続の編集はまとめられ、changed_fieldsには、その時間枠を開始した編集のみが記述されます。イベントを受信したときに拠点を再取得し、時間枠が終了した後にもう一度取得してください。

次の手順