Details und Öffnungszeiten eines Standorts aktualisieren

Pflegen Sie Kontaktdaten, den vollständigen Wochenplan mit einmaligen Ausnahmen, temporäre Schließungen und Google-Kategorien und lesen Sie Änderungen aus.

POST /locations/update führt eine Teilaktualisierung durch. Alle Felder werden unter input angegeben, input.id ist das einzige Pflichtfeld, und ausgelassene Felder behalten ihre aktuellen Werte. In jedem der folgenden Abschnitte wird nur der JSON-Anfragekörper geändert.

1. Telefonnummer und Website aktualisieren

Senden Sie id zusammen mit den zu ändernden Feldern. Plattformen veröffentlichen bizUrl als Website-URL. locations.update() im Python SDK erwartet ein dict mit Schlüsseln im Format camelCase, und updateLocation() im Node SDK erwartet dasselbe Objekt.

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

Auch bei einem Validierungsfehler wird HTTP 200 zurückgegeben, zusammen mit success: false und dem Grund in data.updateLocation.errors. Prüfen Sie daher success statt des Statuscodes. Beide SDKs lösen in diesem Fall ValidationError aus.

2. Wöchentliche Öffnungszeiten festlegen

businessHours ist ein Array mit einem Eintrag pro Wochentag. Senden Sie immer alle sieben Einträge und kennzeichnen Sie einen geschlossenen Tag mit type: "CLOSED" und einem leeren slots-Array, statt ihn auszulassen. Zeitintervalle innerhalb eines Tages dürfen sich nicht überschneiden.

FeldWerteHinweise
dayMONDAY bis SUNDAY oder SPECIALSPECIAL ist eine einmalige Ausnahme für das Datum in specialDate.
typeOPEN oder CLOSEDVerwenden Sie CLOSED mit slots: [] für einen Tag ohne Geschäftsbetrieb.
slots[].start, slots[].end09:00am, 05:00pmUhrzeiten im 12-Stunden-Format mit am oder pm. Mehrere Zeitfenster pro Tag sind für geteilte Schichten zulässig.
specialDateYYYY-MM-DDNur bei einem SPECIAL-Eintrag, der zusätzlich zu den sieben Wochentagseinträgen gesendet wird, niemals an deren Stelle.
moreHours[]hoursTypeId, moreHour[]Zusätzliche Zeitpläne, beispielsweise für Lieferung oder Drive-through. moreHour verwendet dieselbe Struktur mit day, type und slots und hat kein 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": [] }    ]  }}'

Fügen Sie für einen Feiertag einen SPECIAL-Eintrag am Ende desselben Arrays hinzu. Er überschreibt die Öffnungszeiten für dieses eine Datum und lässt den Wochenplan unverändert:

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

3. Eine vorübergehende Schließung kennzeichnen oder die Adresse ausblenden

temporarilyClosed: true kennzeichnet das Unternehmen als geschlossen und beendet die Veröffentlichung seiner Öffnungszeiten. Setzen Sie es auf false, um das Unternehmen wieder als geöffnet zu kennzeichnen. Setzen Sie für ein Unternehmen mit Einzugsgebiet hideAddress: true: ListingsAPI behält die Adresse beim Standort bei, übermittelt sie jedoch nicht an Plattformen.

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-Kategorien festlegen

Google Business Profile hat eine eigene Kategorietaxonomie, die von der numerischen subCategoryId getrennt ist. primaryGbpSiteCategoryId akzeptiert eine GCID wie gcid:restaurant, und additionalGbpSiteCategoryIds akzeptiert weitere GCIDs. Beide werden anhand von countryIso aufgelöst, senden Sie daher das Land im selben Aufruf mit.

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

Verwechseln Sie diese nicht mit additionalCategoryIds, das ganzzahlige databaseId-Werte vom Endpunkt für Unterkategorien akzeptiert. Siehe Länder, Bundesländer und Kategorien nachschlagen.

5. Den Standort erneut auslesen

GET /locations-by-ids gibt den vollständigen Datensatz für eine oder mehrere Base64-kodierte IDs zurück, die als JSON-Array im Abfrageparameter ids übergeben werden. Vergleichen Sie phone, businessHours und temporarilyClosed mit den von Ihnen gesendeten Werten.

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

IDs, die in Ihrem Konto nicht existieren, werden ohne Fehlermeldung aus dem Array entfernt. Vergleichen Sie daher die Anzahl der zurückgegebenen Datensätze mit der Anzahl der angeforderten Datensätze.

Wenn Webhooks konfiguriert sind, wird ein profile.updated-Ereignis ausgelöst. Die Zustellung wird durch Debouncing auf eine Zustellung pro Standort innerhalb von 60 Sekunden begrenzt und erfolgt zu Beginn des Zeitfensters: Spätere Änderungen innerhalb dieses Zeitfensters werden zusammengefasst, und changed_fields beschreibt nur die Änderung, die das Zeitfenster eröffnet hat. Lesen Sie den Standort erneut aus, sobald das Ereignis eintrifft, und nochmals nach Ablauf des Zeitfensters.

Nächste Schritte