Standorte
Standort-Endpunkte in Nutzungsreihenfolge mit cURL, Python und Node: Liste, Suche, ID-/Filialcode-Abruf, Erstellen, Aktualisieren, Archivieren, Fotos.
Einträge, Bewertungen, Beiträge und Analysedaten sind jeweils einer Standort-ID zugeordnet. Die Standort-Ressource umfasst dreizehn Endpunkte: vier Lese-Endpunkte zum Finden von Standorten, vier Schreib-Endpunkte zum Erstellen, Ändern und Archivieren von Standorten und fünf zur Verwaltung von Fotos. Ein Schlüssel mit Read (Lesezugriff) deckt die Leseoperationen ab. Jeder POST benötigt einen Schlüssel mit Write (Schreibzugriff); bei einer Schreiboperation mit einem Read-Schlüssel gibt der Endpunkt HTTP 400 mit SY90016 zurück.
Jede ID in dieser Anleitung ist eine Base64-Relay-ID, zum Beispiel TG9jYXRpb246MTgwMDI4OQ== (dekodiert: Location:1800289). Beide SDKs akzeptieren auch den numerischen Wert databaseId und kodieren ihn für Sie.
Endpunkte auf einen Blick
Alle Standorte auflisten
GET /locations ruft alle Standorte im Konto seitenweise ab, die neuesten zuerst. Die Antwort ist eine Cursor-Connection: edges[].node enthält die einzelnen Datensätze, und pageInfo.endCursor liefert den Wert für den Parameter after für die nächste Seite. Verwenden Sie diesen Endpunkt, um das gesamte Konto mit Ihrem eigenen System zu synchronisieren.
Parameter
curl "https://listingsapi.com/api/v4/locations?first=50" \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "allLocations": { "edges": [ { "cursor": "TG9jYXRpb246MTgwMDI4OQ==", "node": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "storeId": null, "approved": "APPROVED", "archived": false, "archivalScheduledAt": null, "city": "Austin", "stateIso": "TX", "countryIso": "US", "subCategoryId": 1432, "planName": "Launch", "placeActionLinks": [], "discoveredPlaceActionLinks": [] } } ], "pageInfo": { "hasNextPage": false, "hasPreviousPage": false, "endCursor": "TG9jYXRpb246MTgwMDI4OQ==", "total": 1 } } }}Lesen Sie pageInfo.hasNextPage aus und beenden Sie den Abruf, wenn der Wert false ist. Die Anzahl auf Seitenebene steht in pageInfo.total. Das Feld id des Knotens enthält die Kennung, die alle anderen Endpunkte erwarten.
Standorte suchen
GET /locations/search gleicht einen Suchbegriff mit dem Standortnamen, der Straßenadresse, der Stadt und der Filial-ID ab. Die Antwort ist eine Cursor-Connection mit derselben Struktur für edges[].node und pageInfo.endCursor wie beim Auflisten. Verwenden Sie diesen Endpunkt für ein Auswahlfeld mit Suchvorschlägen während der Eingabe oder um vor dem Erstellen einer Filiale zu prüfen, ob sie bereits vorhanden ist.
Parameter
Beide SDKs akzeptieren außerdem eine Liste für fields, um den Abgleich auf bestimmte Felder zu beschränken, zum Beispiel nur auf name.
curl "https://listingsapi.com/api/v4/locations/search?query=Jenny&first=10" \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "searchLocations": { "edges": [ { "cursor": "TG9jYXRpb246MTgwMDI4OQ==", "node": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "storeId": null, "street": "600 Congress Ave, Suite 200", "city": "Austin", "approved": "APPROVED", "archived": false } } ], "pageInfo": { "endCursor": "TG9jYXRpb246MTgwMDI4OQ==", "hasNextPage": false, "hasPreviousPage": false, "total": 1 } } }}Ein leeres edges-Array bedeutet, dass keine Treffer gefunden wurden. Der Knoten enthält die vollständige Adresse, die Kategorie und den approved-Status, sodass für eine Ergebniszeile kein zweiter Abruf erforderlich ist.
Standorte anhand von IDs abrufen
GET /locations-by-ids gibt die vollständigen Datensätze für mehrere Base64-IDs in einem einzigen Aufruf zurück und benötigt damit weniger Anfragen als ein Aufruf pro Standort. Sowohl aktive als auch archivierte Standorte werden gefunden. Die Rückgabe ist ein einfaches Array, keine Connection. Verwenden Sie diesen Aufruf, um IDs aus einer Webhook-Payload oder Ihrem eigenen Datenspeicher um die vollständigen Datensätze zu ergänzen.
Parameter
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ==","TG9jYXRpb246MTgwMDI5MA=="]' \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "getLocationsByIds": [ { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "storeId": null, "name": "Jenny Home", "archived": false, "archivedAt": null, "city": "Austin", "stateIso": "TX", "countryIso": "US", "subCategoryId": 1432, "businessHours": [], "locationPhotos": [], "placeActionLinks": [], "discoveredPlaceActionLinks": [] } ] }}IDs, die in Ihrem Konto nicht existieren, werden ohne Fehlermeldung weggelassen. Vergleichen Sie die Anzahl der zurückgegebenen Datensätze mit der Anzahl der gesendeten IDs, um veraltete IDs zu erkennen.
Standorte anhand von Filialcodes abrufen
GET /locations-by-store-codes ermöglicht die umgekehrte Suche: Der Aufruf löst Ihre eigenen Filialcodes in vollständige Datensätze auf. Er gibt ein einfaches Array zurück. Verwenden Sie ihn, wenn Ihr Kassensystem oder Ihr Franchise-Verzeichnis Standorte anhand von Filialcodes identifiziert und Sie unsere IDs nie gespeichert haben.
Parameter
curl -G https://listingsapi.com/api/v4/locations-by-store-codes \--data-urlencode 'storeCodes=["ACME01","ACME02"]' \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "getLocationsByStoreCodes": [ { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "storeId": "ACME01", "name": "Jenny Home", "archived": false, "city": "Austin", "countryIso": "US", "planName": "Launch" } ] }}Ordnen Sie den Wert von storeId jedes Objekts Ihrem Verzeichnis zu. Codes ohne Treffer fehlen in der Rückgabe. Ein Standort hat nur dann einen Filialcode, wenn storeId beim Erstellen oder Aktualisieren gesetzt wurde.
Einen Standort erstellen
POST /locations erstellt einen Standort und stellt ihn zur Übermittlung an alle Plattformen Ihres Tarifs in die Warteschlange oder nur an enabledSiteIds, wenn Sie dieses Feld übergeben. Alle Felder werden unter input angegeben. 10 Felder sind Pflichtfelder; die übrigen sind optional, und alle weggelassenen Felder werden von den Plattformen leer angezeigt.
Parameter
Hinzu kommen die auf der Referenzseite aufgeführten optionalen Felder: Google-GCID-Kategorien, URLs sozialer Netzwerke, Koordinaten, Kontaktdaten des Inhabers, Zahlungsmethoden, Einzugsgebiet und weitere.
curl -X POST https://listingsapi.com/api/v4/locations \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "name": "Acme Kitchen", "description": "Acme Kitchen is a family-owned neighborhood restaurant in downtown New York serving wood-fired pizza, hand-rolled pasta, and a short seasonal menu built around produce from nearby growers. Our dining room seats forty, takeout and delivery run until close, and the bar pours regional wine and beer on tap.", "storeId": "ACME01", "street": "123 Jump Street", "city": "New York", "stateIso": "NY", "postalCode": "10013", "countryIso": "US", "phone": "6443859313", "bizUrl": "https://acmekitchen.example.com", "subCategoryId": 1432, "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": [] } ], "placeActionLinks": [ { "placeActionType": "FOOD_ORDERING", "uri": "https://order.acmekitchen.example.com", "isPreferred": true } ] }}'{ "data": { "createLocation": { "clientMutationId": null, "success": true, "errors": null, "location": { "id": "TG9jYXRpb246MTgwMDI5MA==", "databaseId": 1800290, "storeId": "ACME01", "name": "Acme Kitchen", "city": "New York", "countryIso": "US", "status": "PENDING", "placeActionLinks": [ { "placeActionType": "FOOD_ORDERING", "uri": "https://order.acmekitchen.example.com", "isPreferred": true, "name": null, "submissionStatus": null } ], "discoveredPlaceActionLinks": [] } } }}Bewahren Sie beide IDs auf: Die Base64-ID id wird für jeden späteren Schreibvorgang benötigt, und databaseId ist die Nummer, die Sie in Dashboards und Webhooks sehen. status beginnt mit dem Wert PENDING und wird ohne weiteren API-Aufruf fortgeschrieben. Die Werte name und submissionStatus eines Aktionslinks für einen Ort bleiben auf null, bis der Link mit Google synchronisiert wurde. In Python validiert locations.add() die Pflichtfelder lokal und löst ValidationError vor jedem Netzwerkaufruf aus; locations.create(input) akzeptiert stattdessen ein unverarbeitetes camelCase-dict.
Einen Standort aktualisieren
POST /locations/update ist eine Teilaktualisierung: input.id ist das einzige Pflichtfeld, und nur die von Ihnen gesendeten Felder werden geändert. Mit demselben Aufruf können Sie eine Telefonnummer korrigieren oder den Wochenplan neu festlegen. locations.update() in Python und updateLocation() in Node nehmen jeweils ein camelCase-Objekt entgegen.
Parameter
Hinzu kommen die optionalen Felder, die auf der Referenzseite aufgeführt sind.
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", "primaryGbpSiteCategoryId": "gcid:restaurant", "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": [] } ] }}'{ "data": { "updateLocation": { "clientMutationId": null, "success": true, "errors": null, "location": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "phone": "5125550199", "status": "APPROVED", "placeActionLinks": [ { "placeActionType": "FOOD_ORDERING", "uri": "https://order.example.com", "isPreferred": true, "name": null, "submissionStatus": null } ], "discoveredPlaceActionLinks": [] } } }}Die Antwort enthält den aktualisierten Standort, damit Sie prüfen können, ob die neuen Werte übernommen wurden. Jede Aktualisierung gibt die vollständige aktuelle placeActionLinks-Menge des Standorts zurück. Um die URL eines Links zu ändern, senden Sie in derselben Anfrage ein delete für den alten Link und ein add für den neuen.
Standorte archivieren
POST /locations/archive plant die Archivierung eines oder mehrerer Standorte. Die Archivierung erfolgt nicht sofort: Jeder Standort wechselt in ARCHIVE_SCHEDULED, bleibt bis zum Ende des aktuellen Abrechnungszeitraums aktiv und kostenpflichtig und wird archiviert, wenn die nächste Rechnung erstellt wird. Verwenden Sie diesen Aufruf, um geschlossene Filialen gesammelt abzumelden.
Parameter
curl -X POST https://listingsapi.com/api/v4/locations/archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationIds": ["TG9jYXRpb246MTgwMDI4OQ==", "TG9jYXRpb246MTgwMDI5MA=="] }}'{ "data": { "archiveLocations": { "clientMutationId": null, "bulkEditTaskId": null, "errors": null, "success": null, "result": [ { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "status": "ARCHIVE_SCHEDULED", "success": true, "errors": null }, { "locationId": "TG9jYXRpb246MTgwMDI5MA==", "status": "ARCHIVE_SCHEDULED", "success": true, "errors": null } ] } }}success auf der obersten Ebene ist null; lesen Sie stattdessen den jeweiligen success-Wert jedes result[]-Eintrags aus, damit eine fehlerhafte ID den Rest des Stapels nicht blockiert.
Solange die Archivierung geplant ist, ist archivalScheduledAt für den Standort in Listen- und Suchergebnissen gesetzt. Ein archivierter Standort kann erst nach seiner Reaktivierung aktualisiert werden.
Geplante Archivierung abbrechen
POST /locations/cancel_archive versetzt Standorte in ARCHIVE_SCHEDULED zurück in ACTIVE, und die Abrechnung läuft weiter. Dies funktioniert nur, solange der Abrechnungszeitraum noch nicht abgeschlossen ist; sobald ein Standort vollständig archiviert ist, gibt dieser Aufruf für ihn 404 zurück.
Parameter
curl -X POST https://listingsapi.com/api/v4/locations/cancel_archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationIds": ["TG9jYXRpb246MTgwMDI4OQ=="] } }'{ "data": { "cancelLocationsArchive": { "clientMutationId": null, "bulkEditTaskId": null, "errors": null, "success": null, "result": [ { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "status": "ACTIVE", "success": true, "errors": null } ] } }}Jeder result[]-Eintrag bestätigt, dass sich der Standort wieder in ACTIVE befindet. Beide SDKs erfordern zwei zusätzliche positionale Argumente, einen Auswahltyp und eine changedBy-Kennung, die sie zusammen mit locationIds senden; der REST-Body benötigt nur die IDs.
Fotos zu einem Standort hochladen
POST /locations/photos fügt Bilder über eine öffentliche URL hinzu: Sie hosten das Bild, die API ruft es ab und speichert es. Ein Standort speichert ein LOGO, ein COVER und beliebig viele ADDITIONAL-Fotos. Wenn Sie ein Logo oder Titelbild erneut hochladen, ersetzt es das vorhandene.
Parameter
curl -X POST https://listingsapi.com/api/v4/locations/photos \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "photos": [ { "photo": "https://cdn.example.com/jenny-home/logo.png", "type": "LOGO" }, { "photo": "https://cdn.example.com/jenny-home/storefront.jpg", "type": "ADDITIONAL" } ] }}'{ "data": { "addLocationPhotos": { "clientMutationId": null, "success": true, "request": {}, "photos": [ { "id": "TWVkaWFGaWxlOjU4Nzg5MzE=", "databaseId": 5878931, "type": "LOGO", "starred": false, "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/f47d62a6.png" }, { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "databaseId": 5878932, "type": "ADDITIONAL", "starred": false, "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/ef4ffb12.jpg" } ], "errors": null } }}Bewahren Sie id für jedes Foto auf; die Endpunkte zum Markieren mit einem Stern und zum Entfernen nehmen diesen Wert entgegen. Dies ist das Inline-Format für einen kleinen Stapel. Ein großer Stapel wird stattdessen in die Warteschlange aufgenommen: photos wird leer zurückgegeben und request.requestId ist gesetzt, und Sie fragen den nächsten Endpunkt mit dieser ID regelmäßig ab. Der Schwellenwert wird serverseitig konfiguriert; verzweigen Sie daher danach, ob request.requestId vorhanden ist.
Status des Foto-Sammeluploads prüfen
GET /locations/photos/requests/{requestId} fragt den Status eines Uploads in der Warteschlange ab, bis er abgeschlossen ist, und meldet dann das Ergebnis für jedes Bild. Verwenden Sie dies, um einen Fortschrittsbalken zu steuern und genau anzuzeigen, welche Dateien abgelehnt wurden und warum.
Parameter
curl https://listingsapi.com/api/v4/locations/photos/requests/e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "getLocationPhotosUploadStatus": { "requestId": "e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a", "status": "SUCCESS", "photos": [ { "mediaId": "TWVkaWFGaWxlOjkxODI3", "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "status": "SUCCESS", "errorMessage": null }, { "mediaId": null, "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "status": "ERROR", "errorMessage": "Image dimensions below the minimum 250x250." } ] } }}Der Auftragsstatus besagt nur, dass die Verarbeitung abgeschlossen ist, nicht, dass jedes Bild erfolgreich hochgeladen wurde. Warten Sie zwischen den Statusabfragen einige Sekunden; eine Schleife ohne ausreichende Pausen führt hier schnell zu 429.
Fotos für einen Standort abrufen
GET /locations/{locationId}/photos gibt alle Mediendateien eines Standorts als einfaches Array zurück: Logo, Titelbild und zusätzliche Bilder, jeweils mit dem öffentlichen url, thumbnailUrl, der Kategorie, dem Flag starred und viewsCount über die gesamte Laufzeit. Rufen Sie den Endpunkt vor einem Upload auf, um zu sehen, welcher Bildplatz noch nicht belegt ist, und um IDs für die Aufrufe zum Markieren mit einem Stern und zum Entfernen zu sammeln.
Parameter
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/photos \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "mediaFilesOfLocation": [ { "id": "TWVkaWFGaWxlOjU4Nzg5MzE=", "categoryName": "Logo", "categoryId": "4", "fileType": "image", "starred": false, "viewsCount": 0, "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/f47d62a6.jpg", "thumbnailUrl": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/thumbnail_f47d62a6.jpg" }, { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "categoryName": "Additional", "categoryId": "12", "fileType": "image", "starred": true, "viewsCount": 143, "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/ef4ffb12.jpg", "thumbnailUrl": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/thumbnail_ef4ffb12.jpg" } ] }}categoryName ist Logo, Cover oder Additional. Verwenden Sie thumbnailUrl für eine Rasteransicht und url für die Ansicht in voller Größe. Bei einem Standort ohne Medien wird ein leeres Array zurückgegeben, kein Fehler.
Standortfotos mit einem Stern markieren
POST /locations/photos/star markiert zusätzliche Fotos für eine bevorzugte Platzierung auf Plattformen, die hervorgehobene Bilder unterstützen. Nur Fotos vom Typ ADDITIONAL können mit einem Stern markiert werden, höchstens 4 pro Standort. Das Entfernen der Sternmarkierung funktioniert genauso: Das Flag starred im Body bestimmt, was geschieht.
Parameter
curl -X POST https://listingsapi.com/api/v4/locations/photos/star \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "photoIds": ["TWVkaWFGaWxlOjU4Nzg5MzI="], "starred": true }}'{ "data": { "starUnstarLocationPhotos": { "success": true, "photos": [ { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "databaseId": 5878932, "type": "ADDITIONAL", "starred": true } ], "error": null } }}Der Antwortschlüssel lautet bei beiden Pfaden starUnstarLocationPhotos und enthält einen einzelnen Wert error, kein Array errors. Ein fünftes mit einem Stern markiertes Foto lässt den gesamten Aufruf mit SY15012 fehlschlagen; bei der Prüfung werden bereits mit einem Stern markierte Fotos und die Fotos in dieser Anfrage zusammengezählt.
Fotos von einem Standort entfernen
POST /locations/photos/remove hebt anhand der Medien-ID die Zuordnung zusätzlicher Fotos auf. Verwenden Sie dies, um veraltete Bilder der Geschäftsfront zu entfernen oder einen fehlerhaften Sammelimport rückgängig zu machen. Nur Fotos vom Typ ADDITIONAL können entfernt werden; ersetzen Sie ein Logo oder Titelbild, indem Sie ein neues Bild mit diesem type hochladen.
Parameter
curl -X POST https://listingsapi.com/api/v4/locations/photos/remove \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "photoIds": ["TWVkaWFGaWxlOjU4Nzg5MzI="] }}'{ "data": { "removeLocationPhotos": { "clientMutationId": null, "removedCount": 1, "errors": null } }}removedCount gibt an, für wie viele Dateien die Zuordnung tatsächlich aufgehoben wurde; 0 mit errors: null bedeutet daher, dass keine dieser IDs diesem Standort zugeordnet war. Beim Entfernen wird die Zuordnung der Datei aufgehoben; die Datei wird dabei nicht unbedingt aus Ihrer Medienbibliothek gelöscht.
Auftretende Fehler
Schreibvorgänge können auch HTTP 200 mit success: false und den Details in data.<operation>.errors zurückgeben. Die vollständige Liste finden Sie unter Fehlercodes.
Nächste Schritte
- Standort hinzufügen, Standort aktualisieren, Standortfotos hochladen und Standorte suchen und archivieren: die auf diesen Endpunkten aufbauenden Aufgabenanleitungen.
- Länder und Kategorien nachschlagen: die Werte für
countryIso,stateIsoundsubCategoryId, die zum Erstellen benötigt werden. - Aktionslinks für Orte: das vollständige Modell für Google-Aktionsschaltflächen beim Erstellen und Aktualisieren.
- Standorte: die Übersichtsseite der Ressource und die SDK-Referenzen für Python und Node.
- Fotomethoden haben eigene SDK-Seiten: Fotos mit Python und Fotos mit Node.