Verbundene Konten

Endpunkte mit cURL/Python/Node-Beispielen: Google/Facebook anbinden, Konten auflisten, Einträge abgleichen/verknüpfen, Ordner, GMB-Erstellung, trennen.

Ein verbundenes Konto ist eine OAuth-Berechtigung, die der Inhaber eines Google Business Profile- oder Facebook Pages-Kontos erteilt und mit der die API die für dieses Konto zugänglichen Einträge lesen und verwalten kann. Die Ressource erfüllt drei Aufgaben: OAuth-Links erstellen, die Einträge des Kontos Ihren Standorten zuordnen oder mit ihnen verknüpfen und die Verbindung wieder trennen. Die beiden GET-Abfragen für Listen und Details funktionieren mit einem Schlüssel vom Typ Read (Lesen); jede POST-Anfrage, einschließlich des rein lesenden Abrufs von Einträgen, benötigt einen Schlüssel vom Typ Write (Schreiben), und eine Schreibanfrage mit einem Read-Schlüssel gibt HTTP 400 mit SY90016 zurück.

Alle folgenden Beispiele setzen einen einmalig erstellten Client voraus, wie im ersten Beispiel gezeigt, und lesen LISTINGSAPI_KEY aus der Umgebung. Als IDs dienen die connectedAccountId-UUID vom Listenendpunkt und die Base64-Standort-ID (TG9jYXRpb246MTgwMDI4OQ==); kodieren Sie keine der beiden IDs für URLs.

Endpunkte im Überblick

MethodePfadFunktionReferenz
POST/connected-accounts/connect-googleEinen 24 Stunden gültigen Link zum gesammelten Verbinden für ein Google-Konto erstellen.Ein Google-Konto verbinden
POST/connected-accounts/connect-facebookEinen 24 Stunden gültigen Link zum gesammelten Verbinden für ein Facebook-Konto erstellen.Ein Facebook-Konto verbinden
POST/locations/oauth_connect_urlEinen einmal verwendbaren Verbindungslink erstellen, der an einen Standort gebunden ist.OAuth-Verbindungs-URL für einen Standort
GET/connected-accountsVerbundene Konten mit ihrem Zustand und der Anzahl ihrer Verknüpfungen auflisten.Verbundene Konten auflisten
GET/connected-accounts/{connectedAccountId}/detailsEin Konto einschließlich des Status des Zuordnungsauftrags abrufen.Details eines verbundenen Kontos abrufen
POST/connected-accounts/connected-account-listingsDie für ein Konto zugänglichen Einträge auf den Plattformen auflisten.Einträge eines verbundenen Kontos abrufen
POST/connected-accounts/trigger-matchesDen Auftrag zum Abrufen und Zuordnen für ein oder mehrere Konten in die Warteschlange stellen.Standortzuordnungen auslösen
GET/connected-accounts/{connectedAccountId}/connection-suggestionsDie vorgeschlagenen Zuordnungen zwischen Standorten und Einträgen abrufen.Verknüpfungsvorschläge auflisten
POST/connected-accounts/confirm-matchesVorschläge annehmen und aktive Verknüpfungen erstellen.Verknüpfungszuordnungen bestätigen
POST/connected-accounts/connect-listingEinen ausgewählten Eintrag mit einem Standort verknüpfen.Einen Eintrag mit einem Standort verbinden
POST/connected-accounts/disconnect-listingDie Verknüpfung eines Standorts mit einer Plattform aufheben.Einen Eintrag von einem Standort trennen
POST/connected-accounts/create-location-from-listingEinen neuen Standort aus einem Eintrag auf einer Plattform erstellen.Einen Standort aus einem Eintrag erstellen
GET/connected-accounts/{connectedAccountId}/foldersDie Gruppen (Ordner) des Google-Kontos auflisten.GMB-Ordner auflisten
POST/locations/create/gmb-listingEin vollständig neues Google Business Profile für einen Standort erstellen.Einen GMB-Eintrag erstellen
POST/connected-accounts/disconnect-googleDie Verbindung zu einem gesamten Google-Konto trennen.Ein Google-Konto trennen
POST/connected-accounts/disconnect-facebookDie Verbindung zu einem gesamten Facebook-Konto trennen.Ein Facebook-Konto trennen
POST/locations/oauth-disconnectEinen Standort von einer Plattform trennen (derselbe Vorgang wie disconnect-listing).Einen Standort von einer Plattform trennen

POST /connected-accounts/connect-google

Gibt eine kurzzeitig gültige OAuth-URL zurück. Leiten Sie den Kontoinhaber dorthin weiter; Google leitet ihn anschließend zu Ihrer successUrl oder errorUrl zurück. Der Link gilt für das Konto, dem der API-Schlüssel gehört, daher enthält der Body nur Ihre beiden Weiterleitungs-URLs. Wenn Sie für ein Konto mit abgelaufener Berechtigung erneut einen Link ausstellen, wird die bestehende Verbindung erneuert, statt eine doppelte Verbindung anzulegen.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt; der gesamte Body ist darin verschachtelt.
input.successUrlbodyjaAbsolute https-URL unter Ihrer Kontrolle. Wird nach der Zustimmung aufgerufen.
input.errorUrlbodyjaAbsolute https-URL unter Ihrer Kontrolle. Wird bei Abbruch oder Fehler aufgerufen.
Connect Google
curl -X POST https://listingsapi.com/api/v4/connected-accounts/connect-google \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "successUrl": "https://app.example.com/connect/google/success",    "errorUrl": "https://app.example.com/connect/google/error"  }}'
JSON
{  "data": {    "bulkConnectLinkForGoogle": {      "success": true,      "url": "https://connect.example.com/oauth?token=8f3c1d92-...",      "errors": null    }  }}

url oben ist ein Platzhalter. Leiten Sie den Inhaber zu der url weiter, die in Ihrer eigenen Antwort zurückgegeben wird.

Der Link ist 24 Stunden gültig. errors wird nur befüllt, wenn die Erstellung fehlschlägt. Prüfen Sie daher, ob url nicht null ist. Ein flacher Body oder ein Body mit accountId wird mit HTTP 400 abgelehnt.

POST /connected-accounts/connect-facebook

Das Gegenstück für Facebook mit demselben Body. Während des Ablaufs akzeptiert der Inhaber die Bedingungen von Facebook und erteilt die von der API benötigten Berechtigungen zur Seitenverwaltung; wenn er eine Berechtigung auslässt, ist über die Verbindung keine Synchronisierung möglich. Stellen Sie daher den Link erneut aus und lassen Sie den Inhaber erneut zustimmen.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.successUrlbodyjaAbsolute https-URL unter Ihrer Kontrolle.
input.errorUrlbodyjaAbsolute https-URL unter Ihrer Kontrolle.
Connect Facebook
curl -X POST https://listingsapi.com/api/v4/connected-accounts/connect-facebook \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "successUrl": "https://app.example.com/connect/facebook/success",    "errorUrl": "https://app.example.com/connect/facebook/error"  }}'
JSON
{  "data": {    "bulkConnectLinkForFacebook": {      "success": true,      "url": "https://connect.example.com/oauth?token=8f3c1d92-...",      "errors": null    }  }}

url oben ist ein Platzhalter. Leiten Sie den Inhaber zu der url weiter, die in Ihrer eigenen Antwort zurückgegeben wird.

Der Schlüssel in der Antwort lautet bulkConnectLinkForFacebook; ansonsten werten Sie die Antwort genauso aus wie beim Google-Link. Sobald der Inhaber den Vorgang abgeschlossen hat, erscheint das Konto im Listenendpunkt als FacebookAccount.

POST /locations/oauth_connect_url

Verwenden Sie diese Option, wenn Sie bereits wissen, welchen Standort der Eigentümer verbindet. Der Link ist an den von Ihnen angegebenen Standort gebunden, sodass anschließend kein Zuordnungsschritt erforderlich ist: Wenn der Eigentümer zustimmt, werden die Zugangsdaten direkt diesem Standort zugeordnet. Die beiden oben genannten Sammellinks verbinden dagegen jeweils ein ganzes Konto.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.locationIdbodyjaBase64-kodierte Standort-ID oder die unkodierte numerische ID.
input.sitebodyjaGOOGLE, FACEBOOK oder APPLE.
input.successUrlbodyjaAbsolute URL, die nach Erteilung der Berechtigung aufgerufen wird.
input.errorUrlbodyjaAbsolute URL, die bei Abbruch oder Fehler aufgerufen wird.
Single-location link
curl -X POST https://listingsapi.com/api/v4/locations/oauth_connect_url \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "site": "GOOGLE",    "successUrl": "https://app.example.com/locations/1800289/connected",    "errorUrl": "https://app.example.com/locations/1800289/connect-failed"  }}'
JSON
{  "data": {    "createConnectUrl": {      "success": true,      "url": "https://connect.example.com/oauth?token=8f3c1d92-...",      "errors": null    }  }}

url oben ist ein Platzhalter. Leiten Sie den Eigentümer zu url weiter, das in der Antwort auf Ihre eigene Anfrage zurückgegeben wird.

Der Link kann nur einmal verwendet werden. Erstellen Sie daher für jeden Versuch einen neuen Link, statt ihn zwischenzuspeichern. Eine relative oder nicht auswertbare Weiterleitungs-URL führt zu success: true mit null url, prüfen Sie also url und nicht nur success. Bei einem Schlüssel ohne Zugriffsberechtigung für diesen Standort wird 403 mit SY90003 zurückgegeben. Die SDKs wandeln site für Sie in Großbuchstaben um.

Verbundene Konten auflisten

GET /connected-accounts

Gibt alle für Ihr API-Konto autorisierten Konten zurück, einschließlich des Verbindungszustands und der Anzahl der mit jedem Konto verknüpften Standorte. Die Seitennavigation ist offsetbasiert: records[] plus pageInfo.totalRecords, gesteuert über die nicht verschachtelten Abfrageparameter page und perPage. Die Sortierung ist fest auf die E-Mail-Adresse des Kontos in aufsteigender Reihenfolge eingestellt.

NameInErforderlichHinweise
pagequeryneinSeitennummer, beginnend bei 1. Standardwert 1.
perPagequeryneinDatensätze pro Seite. Standardwert 20.
publisherqueryneinGoogleAccount, FacebookAccount, AppleAccount, YelpAccount, TripadvisorAccount, LinkedinAccount, PinterestAccount oder TwitterAccount.
statusqueryneinConnected, NotConnected oder ConnectionIssue. Gemischte Groß- und Kleinschreibung.
List accounts
curl "https://listingsapi.com/api/v4/connected-accounts?publisher=GoogleAccount&status=Connected&page=1&perPage=20" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "connectedAccountsInfo": {      "pageInfo": { "hasNextPage": false, "hasPreviousPage": false, "totalPages": 1, "totalRecords": 1 },      "records": [        {          "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",          "connectedAccountType": "GoogleAccount",          "email": "owner@brightsmile-dental.com",          "status": "CONNECTED",          "connectivityIssue": null,          "connectedLocationsCount": 0,          "requestMatchesStatus": "MATCH_COMPLETED",          "lastFetchMatchesRequestedAt": "2026-07-06 21:43:07 UTC"        }      ]    }  }}

Wählen Sie den Datensatz, dessen email den Eigentümer bezeichnet, der zugestimmt hat, und speichern Sie dessen connectedAccountId; jeder spätere Aufruf benötigt diesen Wert. Alle Angaben außer den vier Abfrageparametern werden ignoriert, statt abgelehnt zu werden, sodass bei einem JSON-pageInfo ohne Fehlermeldung Seite 1 zurückgegeben wird.

status des DatensatzesBedeutung
CONNECTEDDie Zugangsdaten sind gültig. Sie können die Zuordnung oder Veröffentlichung auslösen.
MATCH_IN_PROGRESSEin Zuordnungslauf ist vorgemerkt oder wird gerade ausgeführt.
CONNECTIVITY_ISSUEDie Berechtigung ist abgelaufen. connectivityIssue nennt den Grund; stellen Sie einen neuen Verbindungslink aus.

Der Filter status und das Feld status des Datensatzes verwenden unterschiedliche Werte. Wenn Sie CONNECTED wieder als Filter übergeben, ist dies ein ungültiger Enum-Wert und führt zur Rückgabe von 400.

Details eines Kontos abrufen

GET /connected-accounts/{connectedAccountId}/details

Gibt dieselben Felder wie ein einzelner Datensatz der Liste zurück, beschränkt auf ein Konto. Verwenden Sie diesen Aufruf, um requestMatchesStatus nach dem Auslösen der Zuordnung regelmäßig abzufragen oder um status und connectivityIssue zu prüfen, bevor Sie eine Aktualisierung über das Konto übertragen.

NameInErforderlichHinweise
connectedAccountIdpathjaUUID aus dem Listenendpunkt.
Account details
curl https://listingsapi.com/api/v4/connected-accounts/4f712c17-4f95-42dd-90f4-97171a2e67b5/details \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "connectedAccountDetails": {      "details": {        "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",        "connectedAccountType": "GoogleAccount",        "status": "CONNECTED",        "connectivityIssue": null,        "connectedLocationsCount": 0,        "requestMatchesStatus": "MATCH_COMPLETED"      }    }  }}

Der Datensatz befindet sich eine Ebene tiefer unter data.connectedAccountDetails.details. requestMatchesStatus wechselt von MATCH_IN_PROGRESS zu MATCH_COMPLETED, sobald Vorschläge vorliegen. Completed bedeutet, dass der Zuordnungsprozess abgeschlossen ist, nicht dass etwas verknüpft wurde: connectedLocationsCount bleibt 0, bis Sie einen Eintrag bestätigen oder verbinden.

Die Einträge abrufen, auf die ein Konto zugreifen kann

POST /connected-accounts/connected-account-listings

Listet alle Google Business Profile- oder Facebook-Einträge auf, auf die das Konto Zugriff hat, unabhängig davon, ob sie mit einem Ihrer Standorte verknüpft sind. id jedes Datensatzes ist der Wert für connectedAccountListingId, den connect-listing und create-location-from-listing entgegennehmen. Dies ist ein POST-Aufruf, der ausschließlich Daten liest und eine offsetbasierte Seite zurückgibt: records[] plus pageInfo, gesteuert über die nicht verschachtelten Schlüssel page und perPage im Body.

NameInErforderlichHinweise
connectedAccountIdbodyjaUUID des Kontos, dessen Einträge abgerufen werden sollen. Nicht in input eingebettet.
pagebodyneinSeitennummer. Standardwert 1.
perPagebodyneinDatensätze pro Seite. Standardwert 500, zugleich der Höchstwert.
locationInfobodyneinFreitextsuche in Name, Adresse, Ort, Postleitzahl, Filialcode und Telefonnummer.
Account listings
curl -X POST https://listingsapi.com/api/v4/connected-accounts/connected-account-listings \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5", "perPage": 50, "locationInfo": "William St" }'
JSON
{  "data": {    "connectedAccountListings": {      "pageInfo": { "hasNextPage": false, "totalPages": 1, "totalRecords": 60 },      "records": [        {          "id": "R21iQnVsa0RhdGFMYWtlOjA2MDQ4NmExLTA0NzQtNDc4NS1iMjNhLTBkOGM4MzhmNGQ5OA==",          "accountTypeName": "Google",          "locationName": "Trial",          "address": "123 William St, NY 10038, Manhattan, US",          "phone": "(718) 667-7787",          "liveLink": null        }      ]    }  }}

Blättern Sie mit pageInfo.hasNextPage und pageInfo.totalPages durch die Ergebnismenge. Die SDKs setzen connectedAccountId für Sie in den Body, sodass dies nur manuell geschriebene REST-Aufrufe betrifft.

Zuordnung starten

POST /connected-accounts/trigger-matches

Stellt den Auftrag in die Warteschlange, der alle Profile abruft, auf die die angegebenen Konten zugreifen können, und jedes davon einem Ihrer Standorte zuordnet. Die Zuordnung berücksichtigt jeden aktiven, nicht archivierten Standort, der noch nicht verbunden ist. Dabei werden nur Vorschläge gespeichert; erst nach Ihrer Bestätigung werden Verknüpfungen hergestellt.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.connectedAccountIdsbodyjaArray von Konto-UUIDs aus dem Listenendpunkt.
Trigger matches
curl -X POST https://listingsapi.com/api/v4/connected-accounts/trigger-matches \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "connectedAccountIds": ["4f712c17-4f95-42dd-90f4-97171a2e67b5"] } }'
JSON
{  "data": {    "connectedAccountsTriggerMatches": {      "success": true,      "failedIds": null    }  }}

success: true bedeutet, dass der Auftrag in die Warteschlange gestellt wurde, nicht dass die Zuordnung abgeschlossen ist. Jedes Konto, das nicht in die Warteschlange aufgenommen werden konnte, wird in failedIds aufgeführt, und success ist false. Fragen Sie den Detailendpunkt wiederholt ab, bis requestMatchesStatus den Wert MATCH_COMPLETED hat, bevor Sie die Vorschläge lesen; mit einem Intervall von 15 Sekunden und einer begrenzten Schleife bleiben Sie im Launch-Tarif innerhalb des Limits von 10 Anfragen pro Minute.

Verknüpfungsvorschläge abrufen

GET /connected-accounts/{connectedAccountId}/connection-suggestions

Gibt die vorgeschlagenen Zuordnungen zurück: Ihren Standort auf der einen Seite (locationInfo, mit locationId als dessen databaseId) und den Plattform-Eintrag auf der anderen (suggestedLocationInfo). Die Ergebnisse werden mit einer offsetbasierten Paginierung über die flachen Abfrageparameter page und perPage abgerufen; die Sortierung ist fest auf aufsteigende Standortinformationen eingestellt.

NameInErforderlichHinweise
connectedAccountIdpathjaUUID des Kontos.
pagequeryneinSeitennummer, beginnend bei 1. Standardwert: 1.
perPagequeryneinDatensätze pro Seite. Standardwert: 20.
Suggestions
curl "https://listingsapi.com/api/v4/connected-accounts/4f712c17-4f95-42dd-90f4-97171a2e67b5/connection-suggestions?page=1&perPage=20" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "connectionSuggestionsForAccount": {      "pageInfo": { "hasNextPage": false, "totalPages": 1, "totalRecords": 2 },      "records": [        {          "accountType": "GMB",          "matchedDataDatabaseId": "0d5e306f-0da0-46e3-929f-fd3c67ccd8cc",          "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",          "locationId": "73415",          "locationInfo": { "name": "My Business", "city": "Lincoln", "stateIso": "NE" },          "suggestedLocationInfo": { "locationInfo": { "name": "My Business", "city": "Lincoln" } }        }      ]    }  }}

Ein Vorschlag hat kein id. Bewahren Sie matchedDataDatabaseId und accountType zusammen auf; confirm-matches benötigt beide, um die ID zu bilden. Wenn Sie die Vorschläge zu früh abrufen, bevor MATCH_COMPLETED erreicht ist, gibt der Endpunkt records: [] mit totalRecords: 0 zurück, was genauso aussieht wie „keine Zuordnung gefunden“.

accountTypePlattformTyp des Zuordnungsdatensatzes
GMBGoogle Business ProfileGmbLocationMatchedData
FBFacebook PagesFbLocationMatchedData
APPLEApple Business ConnectAppleLocationMatchedData

Zuordnungen bestätigen

POST /connected-accounts/confirm-matches

Übernimmt die von Ihnen genehmigten Vorschläge und erstellt die tatsächlichen Verknüpfungen. Jede ID ist die Base64-Kodierung von <MatchRecordType>:<matchedDataDatabaseId>, wobei der Typ aus der obigen Tabelle gewählt wird. Das Konto wird aus den Datensätzen abgeleitet, daher gibt es kein Feld connectedAccountId; ein unbekanntes Feld innerhalb von input wird mit dem Statuscode 400 abgelehnt.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt. Nur matchRecordIds ist deklariert.
input.matchRecordIdsbodyjaArray von Base64-kodierten IDs der Zuordnungsdatensätze. Mindestens eine.
Confirm matches
# base64 of GmbLocationMatchedData:0d5e306f-0da0-46e3-929f-fd3c67ccd8cccurl -X POST https://listingsapi.com/api/v4/connected-accounts/confirm-matches \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "matchRecordIds": ["R21iTG9jYXRpb25NYXRjaGVkRGF0YTowZDVlMzA2Zi0wZGEwLTQ2ZTMtOTI5Zi1mZDNjNjdjY2Q4Y2M="] } }'
JSON
{  "data": {    "confirmConnectMatches": {      "success": true,      "failedIds": null    }  }}

failedIds enthält die dekodierten matchedDataDatabaseId-Werte, die nicht bestätigt werden konnten, etwa aufgrund eines bereits verwendeten Datensatzes oder eines seit der Zuordnung archivierten Standorts; gleichen Sie diese daher mit den Vorschlagsdatensätzen ab. Nicht übermittelte Vorschläge bleiben unverändert. Die Bestätigung verknüpft den Standort mit dem Eintrag; sie überträgt für sich genommen keine Daten an die Plattform.

Einen Eintrag mit einem Standort verbinden

POST /connected-accounts/connect-listing

Verknüpft einen einzelnen, bereits von Ihnen ausgewählten Eintrag mit einem einzelnen Standort, ohne Vorschlags- oder Bestätigungsschritt. Verwenden Sie dies, wenn die Zuordnung nicht eindeutig ist, etwa bei zwei nahe beieinanderliegenden Filialen mit ähnlichen Namen, und eine zuständige Person den richtigen Eintrag aus den Einträgen des Kontos auswählt.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.locationIdbodyjaBase64-kodierte Standort-ID.
input.connectedAccountIdbodyjaUUID des Kontos, dem der Eintrag gehört.
input.connectedAccountListingIdbodyjaDer Wert id eines Datensatzes aus dem Endpunkt für die Einträge des Kontos. Nicht listingId.
Connect listing
curl -X POST https://listingsapi.com/api/v4/connected-accounts/connect-listing \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",    "connectedAccountListingId": "R21iQnVsa0RhdGFMYWtlOjA2MDQ4NmExLTA0NzQtNDc4NS1iMjNhLTBkOGM4MzhmNGQ5OA=="  }}'
JSON
{  "data": {    "connectListing": {      "success": true,      "message": null    }  }}

Bei einer fehlgeschlagenen Verknüpfung wird success: false mit einem message zurückgegeben, dessen Wert nicht null ist, beispielsweise Listing record not found, wenn die Eintrags-ID nicht aufgelöst werden kann, oder ein Hinweis, dass der Eintrag bereits mit einem anderen Standort verbunden ist. In beiden SDKs befindet sich diese Methode auf der Ressource für Einträge, nicht auf der Ressource für verbundene Konten.

Einen Eintrag von einem Standort trennen

POST /connected-accounts/disconnect-listing

Trennt die Verknüpfung zwischen einem Standort und einer Plattform. Der Standort und seine Daten bleiben erhalten; nur die ausgehende Synchronisierung mit dieser Plattform wird beendet. Dies ist kein Endpunkt für die Massenverarbeitung, daher müssen Sie die Standorte in einer Schleife durchlaufen. Um eine Filiale einem anderen Google-Konto zuzuordnen, trennen Sie zunächst hier die Verbindung und führen Sie anschließend die Zuordnung oder Verbindung über das neue Konto durch.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.locationIdbodyjaBase64-kodierte ID des einzelnen Standorts.
input.sitebodyeines davonGOOGLE, FACEBOOK oder APPLE. Erforderlich, sofern providerId nicht übermittelt wird.
input.providerIdbodyeines davonDie eigene Kontokennung der Plattform anstelle von site.
Disconnect listing
curl -X POST https://listingsapi.com/api/v4/connected-accounts/disconnect-listing \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "site": "GOOGLE" } }'
JSON
{  "data": {    "disconnectConnectedAccountsLocations": {      "clientMutationId": null,      "success": true,      "errors": null    }  }}

Wenn weder site noch providerId übermittelt wird, wird SY10056 zurückgegeben. Bei einem Standort ohne aktive Verbindung zu dieser Plattform wird SY10057 zurückgegeben, statt ohne weiteren Hinweis Erfolg zu melden; success: true bedeutet daher tatsächlich, dass eine Verknüpfung entfernt wurde. Die SDKs akzeptieren nur site und wandeln den Wert in Großbuchstaben um.

Einen Standort aus einem Eintrag erstellen

POST /connected-accounts/create-location-from-listing

Der Abgleich ordnet Einträge nur Standorten zu, die Sie bereits haben. Für einen Eintrag ohne Standort wird hiermit ein Standort aus den Daten der Plattform erstellt und sofort mit dem Eintrag verknüpft. Bei Google werden Name, Adresse, Koordinaten, Telefonnummer, Website, Beschreibung, reguläre und abweichende Öffnungszeiten, Kategorien, Eröffnungsdatum, Geschäftscode und Zeitzone importiert, außerdem Zahlungsmethoden und Links zu sozialen Netzwerken, die aus den Google-Attributen des Eintrags abgeleitet werden. Bei Facebook werden Name, Standort, Öffnungszeiten, Kategorien, Beschreibung und Kontaktdaten importiert.

Bei einem Google-Import werden die Daten nicht erneut an Google übermittelt. Daher bleibt der Eintrag auf IN_PROGRESS, bis Ihre erste Standortaktualisierung dort veröffentlicht wird. An alle anderen Plattformen werden die Daten wie üblich übermittelt, und dieser Endpunkt akzeptiert keine Einschränkung auf einzelne Plattformen, sodass der Standort für alle Plattformen Ihres Kontos erstellt wird. Schränken Sie diese Auswahl direkt nach der Erstellung mit enabledSiteIds ein und senden Sie diese Aktualisierung sofort: Die Auftragspositionen für die anderen Plattformen werden kurz nach der Erstellung erzeugt, und bereits erzeugte Auftragspositionen werden durch die Aktualisierung nicht zurückgezogen.

Keines der beiden SDKs bietet bisher eine Methode für diesen Endpunkt, daher rufen die Python- und Node-Beispiele REST mit demselben Header auf.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.connectedAccountIdbodyjaUUID des Kontos, dem der Eintrag gehört.
input.connectedAccountListingIdbodyjaDie id eines Datensatzes vom Endpunkt für die Einträge des Kontos. Nicht listingId.
Create from listing
curl -X POST https://listingsapi.com/api/v4/connected-accounts/create-location-from-listing \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",    "connectedAccountListingId": "R21iQnVsa0RhdGFMYWtlOjA2MDQ4NmExLTA0NzQtNDc4NS1iMjNhLTBkOGM4MzhmNGQ5OA=="  }}'
JSON
{  "data": {    "createLocationFromConnectedAccountListing": {      "success": true,      "locationId": 88277,      "errors": null    }  }}

locationId ist die reine databaseId des neuen Standorts. Bei einem Fehler ist success gleich false, locationId ist gleich null und errors enthält einen Fehlercode wie SY81067 (die Eintrags-ID konnte nicht aufgelöst werden); weitere Ursachen sind ein Eintrag, der bereits mit einem anderen Standort verknüpft ist, oder ein Konto mit abgelaufenen Zugangsdaten. Nach der Erstellung verwalten Sie den Standort wie jeden anderen.

Die Ordner eines Google-Kontos auflisten

GET /connected-accounts/{connectedAccountId}/folders

Gibt die Google Business Profile-Kontogruppen (Ordner) zurück, auf die das verbundene Google-Konto zugreifen kann. Verwenden Sie diesen Endpunkt vor dem Erstellen eines GMB-Eintrags, damit das neue Profil in der vom Inhaber erwarteten Gruppe angelegt wird. Die Antwort enthält unter getFoldersUnderGoogleAccount ein einfaches Array, keine Ergebnisseite. Der Pfad ist nur für GoogleAccount-Verbindungen gültig.

NameInErforderlichHinweise
connectedAccountIdpathjaUUID eines Kontos vom Typ Google.
Folders
curl https://listingsapi.com/api/v4/connected-accounts/4f712c17-4f95-42dd-90f4-97171a2e67b5/folders \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "getFoldersUnderGoogleAccount": [      { "folderId": "accounts/104890024806530350198", "folderName": "Bright Smile Dental", "locationCount": null }    ]  }}

Verwenden Sie folderId unverändert; es handelt sich um die Zeichenfolge accounts/{id}, nicht um eine Zahl. locationCount kann null sein, wenn Google den Wert nicht meldet. Behandeln Sie ihn daher als optional.

Ein Google Business Profile für einen Standort erstellen

POST /locations/create/gmb-listing

Erstellt unter einem verbundenen Google-Konto und optional in einem Ordner einen neuen Google-Eintrag für einen Standort, der noch keinen hat. Im Gegensatz dazu verknüpft connect-listing einen bereits vorhandenen Eintrag. Für den Standort müssen bereits Name, Adresse und Telefonnummer hinterlegt sein, und pro Standort kann nur ein Google-Eintrag existieren.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.locationIdbodyjaBase64-codierte Standort-ID.
input.connectedAccountIdbodyjaUUID des Google-Kontos, unter dem der Eintrag erstellt werden soll.
input.folderIdbodyneinZeichenfolge accounts/{id} vom Ordner-Endpunkt. Lassen Sie sie weg, um die oberste Ebene des Kontos zu verwenden.
Create GMB listing
curl -X POST https://listingsapi.com/api/v4/locations/create/gmb-listing \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",    "folderId": "accounts/104890024806530350198"  }}'
JSON
{  "data": {    "createGmbListingForLocation": {      "clientMutationId": null,      "success": true,      "errors": null    }  }}

Die Erstellung erfolgt asynchron: success: true bedeutet, dass die Anfrage angenommen wurde, und Google prüft neue Profile vor ihrer Veröffentlichung. Wenn success gleich false ist, gibt errors den Grund an: fehlende Pflichtfelder, ein vorhandener Google-Eintrag, ein archivierter Standort oder ein inaktives Konto.

Verbindung eines gesamten Google-Kontos trennen

POST /connected-accounts/disconnect-google

Trennt die Verbindung für das gesamte Konto: Alle darüber verknüpften Standorte werden nicht mehr synchronisiert. Es gibt kein Feld locationIds; um einen einzelnen Standort zu trennen und das Konto beizubehalten, verwenden Sie stattdessen disconnect-listing. Verwenden Sie diese Funktion, wenn ein Kunde die Zusammenarbeit beendet oder wenn sich eine fehlerhafte Autorisierung nicht aufheben lässt und Sie mit einem neuen Verbindungslink von vorn beginnen möchten.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.connectedAccountIdbodyjaUUID des Google-Kontos. Die Verbindung des gesamten Kontos wird getrennt.
Disconnect Google
curl -X POST https://listingsapi.com/api/v4/connected-accounts/disconnect-google \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "connectedAccountId": "d2397854-52c2-41d7-95f1-b90cba16498d" } }'
JSON
{  "data": {    "gmbBulkDisconnect": {      "success": true    }  }}

success: true wird auch bei einem unbekannten connectedAccountId zurückgegeben und bedeutet daher „Die Anfrage wurde verarbeitet“, nicht „Eine aktive Verbindung wurde entfernt“. Rufen Sie die Liste der verbundenen Konten erneut ab, wenn Sie Gewissheit benötigen.

Verbindung eines gesamten Facebook-Kontos trennen

POST /connected-accounts/disconnect-facebook

Die entsprechende Funktion für Facebook mit demselben Body. Über das Konto verknüpfte Seiten werden nicht mehr synchronisiert, und Facebook-Interaktionen werden nicht mehr angezeigt.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.connectedAccountIdbodyjaUUID des Facebook-Kontos. Die Verbindung des gesamten Kontos wird getrennt.
Disconnect Facebook
curl -X POST https://listingsapi.com/api/v4/connected-accounts/disconnect-facebook \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "connectedAccountId": "d2397854-52c2-41d7-95f1-b90cba16498d" } }'
JSON
{  "data": {    "fbBulkDisconnect": {      "success": true    }  }}

Der Antwortschlüssel lautet fbBulkDisconnect. Wie bei Google bedeutet success: true bei einer unbekannten ID „verarbeitet“, nicht „entfernt“.

Verbindung eines einzelnen Standorts mit einer Plattform trennen

POST /locations/oauth-disconnect

Der Schritt zum Trennen der Verbindung im OAuth-Ablauf für einen einzelnen Standort. Es handelt sich um denselben Vorgang wie bei disconnect-listing, der über einen zweiten Pfad erreichbar ist: identischer input-Body und derselbe Antwortschlüssel disconnectConnectedAccountsLocations. Wählen Sie den Pfad, der in Ihrer Integration verständlicher ist.

NameInErforderlichHinweise
inputbodyjaUmschließendes Objekt.
input.locationIdbodyjaBase64-ID des einzelnen Standorts.
input.sitebodyeines davonGOOGLE, FACEBOOK oder APPLE. Erforderlich, sofern providerId nicht gesendet wird.
input.providerIdbodyeines davonDie eigene Kontokennung der Plattform anstelle von site.
OAuth disconnect
curl -X POST https://listingsapi.com/api/v4/locations/oauth-disconnect \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "site": "GOOGLE" } }'
JSON
{  "data": {    "disconnectConnectedAccountsLocations": {      "clientMutationId": null,      "success": true,      "errors": null    }  }}

Es gelten dieselben Regeln für SY10056 und SY10057, und bei einem Schlüssel ohne Zugriffsberechtigung für diesen Standort wird 403 mit SY90003 zurückgegeben. Beim Trennen der Verbindung bleiben der Standort und seine Daten erhalten; nur die ausgehende Synchronisierung mit dieser Plattform wird beendet. Lassen Sie den Inhaber die Verbindungs-URL erneut aufrufen oder führen Sie den Abgleich und connect-listing aus, um anschließend den richtigen Eintrag zu verknüpfen.

Mögliche Fehler

Bei fehlerhaft aufgebauten Anfragen und ungültigen Schlüsseln wird ein 4xx-Status mit einem errors[] auf oberster Ebene zurückgegeben, dessen message mit dem Code beginnt. Schreibvorgänge können auch 200 mit success: false und der Begründung in data.<operation> zurückgeben. Prüfen Sie daher bei jedem Schreibvorgang den Antwort-Body. Die vollständige Liste finden Sie unter Fehlercodes.

Code oder StatusBedeutungBehebung
SY90016 (400)Ein Read-Schlüssel wurde für POST verwendet.Verwenden Sie einen Write-Schlüssel.
SY90003 (403)Der Schlüssel ist nicht berechtigt, die Verbindung für diesen Standort herzustellen oder zu trennen.Verwenden Sie einen Schlüssel mit Zugriff auf den Standort.
SY10056 (200)Bei der Anfrage zum Trennen der Verbindung wurde weder site noch providerId gesendet.Senden Sie eines davon.
SY10057 (200)Der Standort hat keine aktive Verbindung mit dieser Plattform.Es gibt nichts zu entfernen; prüfen Sie die Einträge des Standorts.
SY81067 (200)connectedAccountListingId konnte bei create-from-listing nicht aufgelöst werden.Rufen Sie die Einträge des Kontos erneut ab und verwenden Sie id aus einem Datensatz.
400, Variable "$input" ... was not providedDer Body war nicht in input eingebettet, oder ein erforderliches Feld fehlte.Betten Sie den Body unter input ein; verwenden Sie connectedAccountListingId, nicht listingId.
400, ungültiger Enum-WertDer Status CONNECTED eines Datensatzes wurde als Filter status für die Listenabfrage übergeben.Filtern Sie mit Connected, NotConnected oder ConnectionIssue.
429Anfragelimit überschritten.Warten Sie entsprechend Retry-After; siehe Anfragelimits.

Nächste Schritte