Aggiorna i dettagli e gli orari di una sede
Modifica recapiti, pubblica orari settimanali completi con eccezioni per data, indica chiusure temporanee, imposta categorie Google e rileggi le modifiche.
POST /locations/update esegue un aggiornamento parziale. Tutti i campi vanno inseriti in input, input.id è l'unico campo obbligatorio e i campi che ometti mantengono i valori attuali. Ogni sezione seguente modifica solo il corpo JSON della richiesta.
1. Aggiorna il numero di telefono e il sito web
Invia id insieme ai campi da modificare. Le piattaforme di pubblicazione pubblicano bizUrl come URL del sito web. locations.update() del Python SDK accetta un dict con chiavi camelCase e updateLocation() del Node SDK accetta lo stesso oggetto.
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" } } }}Un errore di validazione restituisce comunque HTTP 200, con success: false e il motivo in data.updateLocation.errors, quindi controlla success anziché il codice di stato. In questo caso, entrambi gli SDK sollevano ValidationError.
2. Imposta gli orari settimanali
businessHours è un array con una voce per ogni giorno della settimana. Invia sempre tutti e sette i giorni e indica un giorno di chiusura con type: "CLOSED" e un array slots vuoto, anziché ometterlo. Gli intervalli all'interno di una giornata non devono sovrapporsi.
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": [] } ] }}'Per una festività, aggiungi una voce SPECIAL alla fine dello stesso array. Sostituisce gli orari solo per quella data e lascia invariato il calendario settimanale:
{ "day": "SPECIAL", "type": "CLOSED", "specialDate": "2026-12-25", "slots": [] }3. Indica una chiusura temporanea o nascondi l'indirizzo
temporarilyClosed: true indica che l'attività è chiusa e interrompe la pubblicazione dei suoi orari. Impostalo su false per riaprire. Per un'attività che opera in un'area di servizio, imposta hideAddress: true: ListingsAPI conserva l'indirizzo nei dati della sede, ma non lo invia alle piattaforme di pubblicazione.
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. Imposta le categorie Google
Google Business Profile ha una propria tassonomia delle categorie, separata dal valore numerico subCategoryId. primaryGbpSiteCategoryId accetta un GCID come gcid:restaurant e additionalGbpSiteCategoryIds ne accetta altri. Entrambi vengono risolti in base a countryIso, quindi invia il paese nella stessa chiamata.
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"] }}'Non confonderli con additionalCategoryIds, che accetta valori interi databaseId dall'endpoint delle sottocategorie. Consulta Consulta paesi, stati e categorie.
5. Rileggi i dati della sede
GET /locations-by-ids restituisce il record completo per uno o più ID in base64, passati come array JSON nel parametro di query ids. Confronta phone, businessHours e temporarilyClosed con i valori che hai inviato.
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 } ] }}Gli ID che non esistono nel tuo account vengono esclusi dall'array senza generare errori, quindi confronta il numero di risultati restituiti con quello richiesto.
Se i webhook sono configurati, viene generato un evento profile.updated. Un meccanismo di debounce limita l'invio a una volta per sede ogni 60 secondi, all'inizio dell'intervallo: le modifiche successive in quell'intervallo vengono accorpate e changed_fields descrive solo la modifica che lo ha avviato. Rileggi i dati della sede quando arriva l'evento e di nuovo dopo la chiusura dell'intervallo.
Passaggi successivi
- Carica un logo, un'immagine di copertina e foto: aggiungi immagini al record che hai appena aggiornato.
- Trova le sedi e archivia quelle che non gestisci più: cerca per codice del punto vendita e ritira le filiali chiuse.
- Aggiorna una sede e Recupera le sedi tramite ID: le pagine di riferimento, che includono i link alle azioni per il luogo e tutti i campi modificabili.