Perbarui detail dan jam operasional lokasi

Ubah kontak, terbitkan jadwal mingguan lengkap dengan pengecualian satu kali, tandai tutup sementara, atur kategori Google, dan baca ulang perubahan.

POST /locations/update melakukan pembaruan parsial. Semua field ditempatkan di bawah input, input.id adalah satu-satunya field wajib, dan field yang Anda hilangkan tetap mempertahankan nilainya saat ini. Setiap bagian di bawah hanya mengubah isi permintaan JSON.

1. Perbarui nomor telepon dan situs web

Kirim id beserta field yang akan diubah. Platform publikasi memublikasikan bizUrl sebagai URL situs web. locations.update() pada Python SDK menerima dict dengan key camelCase, dan updateLocation() pada Node SDK menerima objek yang sama.

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"      }    }  }}

Kegagalan validasi tetap mengembalikan HTTP 200, dengan success: false dan alasannya di data.updateLocation.errors, jadi periksa success alih-alih kode status. Kedua SDK memunculkan ValidationError untuk kasus tersebut.

2. Tetapkan jam operasional mingguan

businessHours adalah array dengan satu entri untuk setiap hari dalam seminggu. Selalu kirim ketujuh entri tersebut, dan tandai hari tutup dengan type: "CLOSED" serta array slots kosong alih-alih menghilangkan entri hari tersebut. Interval dalam satu hari tidak boleh tumpang tindih.

FieldNilaiCatatan
dayMONDAY hingga SUNDAY, atau SPECIALSPECIAL adalah pengecualian satu kali untuk tanggal di specialDate.
typeOPEN atau CLOSEDGunakan CLOSED dengan slots: [] untuk hari tanpa kegiatan operasional.
slots[].start, slots[].end09:00am, 05:00pmWaktu dalam format 12 jam dengan am atau pm. Beberapa slot per hari diperbolehkan untuk sif terpisah.
specialDateYYYY-MM-DDHanya pada entri SPECIAL, yang dikirim bersama ketujuh entri hari dalam seminggu, tidak pernah sebagai penggantinya.
moreHours[]hoursTypeId, moreHour[]Jadwal tambahan seperti layanan pengantaran atau layanan lantatur. moreHour menggunakan struktur day, type, slots yang sama dan tidak memiliki 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": [] }    ]  }}'

Untuk hari libur, tambahkan entri SPECIAL ke array yang sama. Entri ini menggantikan jadwal hanya untuk tanggal tersebut dan membiarkan pola mingguan tetap seperti semula:

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

3. Tandai penutupan sementara atau sembunyikan alamat

temporarilyClosed: true menandai bisnis sebagai tutup dan menghentikan publikasi jam operasionalnya. Tetapkan nilainya ke false untuk membuka kembali. Untuk bisnis dengan area layanan, tetapkan hideAddress: true: ListingsAPI menyimpan alamat pada lokasi tetapi tidak mengirimkannya ke platform publikasi.

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. Tetapkan kategori Google

Google Business Profile memiliki taksonomi kategorinya sendiri, yang terpisah dari subCategoryId numerik. primaryGbpSiteCategoryId menerima GCID seperti gcid:restaurant, dan additionalGbpSiteCategoryIds menerima GCID tambahan. Keduanya dicocokkan berdasarkan countryIso, jadi kirim negara dalam panggilan yang sama.

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"]  }}'

Jangan samakan keduanya dengan additionalCategoryIds, yang menerima nilai integer databaseId dari endpoint subkategori. Lihat Cari negara, negara bagian, dan kategori.

5. Baca kembali lokasi

GET /locations-by-ids mengembalikan rekaman lengkap untuk satu atau beberapa ID base64, yang diteruskan sebagai array JSON dalam parameter kueri ids. Bandingkan phone, businessHours, dan temporarilyClosed dengan nilai yang Anda kirim.

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 yang tidak ada di akun Anda dihilangkan dari array tanpa kesalahan, jadi bandingkan jumlah yang dikembalikan dengan jumlah yang Anda minta.

Jika webhook dikonfigurasi, peristiwa profile.updated dipicu. Peristiwa ini dibatasi dengan debounce menjadi satu pengiriman per lokasi setiap 60 detik, dengan pengiriman dilakukan pada awal jendela waktu: pengeditan berikutnya dalam jendela waktu tersebut digabungkan, dan changed_fields hanya menjelaskan pengeditan yang memulai jendela waktu itu. Baca kembali lokasi saat peristiwa diterima, lalu sekali lagi setelah jendela waktu berakhir.

Langkah berikutnya