Einträge

Alle Listings-Endpunkte: cURL-, Python-, Node-Beispiele, Premium-Syncstatus, Sprachassistenten, Duplikaterkennung je Standort/Konto und -unterdrückung.

Ein Eintrag repräsentiert einen Standort im Verzeichnis einer Plattform. Wenn Sie einen Standort erstellen, wird für jede Plattform in Ihrem Tarif ein Eintrag zur Verarbeitung vorgemerkt. Über die Listings-Endpunkte können Sie den Status jedes Eintrags abrufen, die erkannten Duplikate auflisten und diese bestätigen oder verwerfen. Die vier GET-Endpunkte funktionieren mit einem Schlüssel für Read (Lesezugriff); die beiden POST-Endpunkte benötigen einen Schlüssel für Write (Schreibzugriff).

Endpunkte im Überblick

MethodePfadFunktionReferenz
GET/locations/{locationId}/listings/premiumSynchronisierungsstatus jeder Premium-Plattform für einen Standort.Premium-Einträge abrufen
GET/locations/{locationId}/voice-assistantsSynchronisierungsstatus bei Google Assistant, Alexa, Siri, Cortana und Bixby.Einträge bei Sprachassistenten abrufen
GET/locations/listings/duplicatesKontoweite, seitenweise abrufbare Zusammenfassung erkannter Duplikate.Alle doppelten Einträge für ein Konto abrufen
GET/locations/{locationId}/listings/duplicatesDuplikate für einen Standort, nach Website gruppiert.Doppelte Einträge für einen Standort abrufen
POST/locations/listings/mark-as-duplicateEinträge zur Unterdrückung als Duplikate bestätigen.Eintrag als Duplikat markieren
POST/locations/listings/mark-as-not-duplicateEinträge als fälschlich erkannte Duplikate verwerfen.Eintrag als Nicht-Duplikat markieren

Status von Premium-Einträgen abrufen

GET /locations/{locationId}/listings/premium

Gibt unter data.listingsForLocation einen Datensatz pro Premium-Plattform im Tarif des Standorts zurück. Es handelt sich um ein einfaches Array, nicht um eine paginierte Liste. Der parallele Pfad /listings/additional gibt die kostenlosen Verzeichnisse in derselben Struktur zurück; es gibt keinen Query-Parameter listingType, und ein dort übergebener Wert wird ignoriert.

Parameter

NameInErforderlichHinweise
locationIdpathJaBase64-ID oder numerische databaseId.
Premium listings
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "listingsForLocation": [      {        "id": "TGlzdGluZzoxMDQ0Njg3MjM=",        "site": { "databaseId": "1", "name": "Google Maps", "url": "maps.google.com" },        "syncStatus": "REQUIRING_ACTION",        "displayStatus": "Connect your account to sync the listing",        "actionRequired": true,        "listingUrl": null,        "syncIssue": null,        "lastUpdate": "2026-07-06T18:33:28Z"      },      {        "id": "TGlzdGluZzoxMDQ0Njg3Mjc=",        "site": { "databaseId": "387", "name": "BeLocalFocussed", "url": "belocalfocussed.com" },        "syncStatus": "SYNCED",        "displayStatus": "Synced",        "actionRequired": false,        "listingUrl": "https://belocalfocussed.com/jenny-home-26x0ffkd0e",        "syncIssue": null,        "lastUpdate": "2026-07-06T18:33:30Z"      },      {        "id": "TGlzdGluZzoxMDQ0Njg3MDk=",        "site": { "databaseId": "301", "name": "Local Mint", "url": "localmint.com" },        "syncStatus": "FAILED",        "displayStatus": "Partner experiencing issues; awaiting response",        "actionRequired": false,        "listingUrl": null,        "syncIssue": "Publisher requires website URL",        "lastUpdate": "2026-07-06T18:34:03Z"      }    ]  }}

Verzweigen Sie die Verarbeitung anhand von syncStatus. Zeigen Sie einer Person displayStatus an, lesen Sie syncIssue für die Begründung der Plattform aus und verwenden Sie lastUpdate, um eine ins Stocken geratene Übermittlung zu erkennen. listingUrl ist nur bei Datensätzen veröffentlichter Einträge gesetzt.

syncStatusBedeutung
AVAILABLEBereit zur Synchronisierung, noch nicht gestartet.
IN_PROGRESSAn die Plattform übermittelt, Antwort steht aus.
PENDING_APPROVALDie Plattform prüft den Eintrag.
SYNCED oder COMPLETEDVeröffentlicht. listingUrl ist ausgefüllt.
REQUIRING_ACTIONIhr Eingreifen ist erforderlich. actionRequired ist true; lesen Sie displayStatus.
FAILEDDie Synchronisierung ist fehlgeschlagen. Lesen Sie syncIssue.
CANNOT_SUBMITDiese Plattform kann diesen Standort grundsätzlich nicht aufnehmen.

Google Maps, Facebook und Waze verbleiben bei REQUIRING_ACTION mit displayStatus: "Connect your account to sync the listing", bis das zugehörige Konto verbunden ist. Bei einem neuen Standort ist dies zu erwarten.

Status bei Sprachassistenten abrufen

GET /locations/{locationId}/voice-assistants

Gibt unter data.voiceAssistantsForLocation einen Datensatz pro Sprachassistent zurück: Google Assistant, Amazon Alexa, Apple Siri, Microsoft Cortana und Samsung Bixby. Es handelt sich um ein einfaches Array mit weniger möglichen Statuswerten als beim Premium-Endpunkt.

Parameter

NameInErforderlichHinweise
locationIdpathJaBase64-ID oder numerische databaseId.
Voice assistants
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/voice-assistants \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "voiceAssistantsForLocation": [      {        "databaseId": "104468723",        "voiceIdentifier": "GOOGLE_ASSISTANT",        "name": "Google Assistant",        "connectedAccountId": null,        "syncStatus": "REQUIRING_ACTION",        "actionRequired": true,        "syncIssue": null,        "errors": []      },      {        "databaseId": "104468711",        "voiceIdentifier": "SIRI",        "name": "Siri",        "connectedAccountId": null,        "syncStatus": "IN_PROGRESS",        "actionRequired": false,        "syncIssue": null,        "errors": []      }    ]  }}

Kennzeichnen Sie jeden Datensatz, bei dem actionRequired den Wert true hat oder syncIssue gesetzt ist. errors enthält Fehlermeldungen der Plattform, und connectedAccountId nennt gegebenenfalls das verbundene Konto, über das die Synchronisierung erfolgt. Die Ergebnisse für Google Assistant stammen aus der Google Business Profile-Verbindung, daher ist eine fehlende Google-Verbindung der häufigste Grund für Handlungsbedarf. Die Ergebnisse für Siri stammen aus dem Apple Maps-Eintrag des Standorts.

syncStatusBedeutung
NOT_SUBMITTEDNoch nicht an den Assistenten gesendet.
IN_PROGRESSÜbermittlung läuft.
REQUIRING_ACTIONEine Eingabe des Kunden ist erforderlich, bevor die Synchronisierung fortgesetzt werden kann.
LIVEVeröffentlicht. Für einen Sprachassistenten gibt es keinen Link zum veröffentlichten Eintrag.

Duplikate im gesamten Konto zusammenfassen

GET /locations/listings/duplicates

Gibt unter data.duplicateListingsRollup alle erkannten Duplikate zurück, auf die der Schlüssel Zugriff hat, über alle Standorte und Plattformen hinweg. Die Paginierung ist offsetbasiert: page und perPage werden übergeben, records[] sowie pageInfo.totalRecords, pageInfo.totalPages und pageInfo.hasNextPage werden zurückgegeben. Filter werden als flache Abfrageparameter übergeben, nicht als JSON. Ohne Angaben ist POTENTIAL der Standardwert für status und all der Standardwert für tag, sodass ein Aufruf ohne Parameter die offenen Duplikate des Kontos zurückgibt.

Parameter

NameInErforderlichHinweise
statusqueryNeinPOTENTIAL (Standard), PROCESSING, FIXED oder FAILED. Groß- und Kleinschreibung wird nicht berücksichtigt. Jeder andere Wert führt zu 400.
siteIdqueryNeinBeschränkt die Ergebnisse anhand der numerischen Site-ID auf eine Plattform (site.databaseId vom Premium-Endpunkt oder eine plan-sites-ID).
tagqueryNeinBeschränkt die Zusammenfassung auf ein Tag. Der Standardwert ist all.
pagequeryNeinSeitennummer, beginnend bei 1. Der Standardwert ist 1.
perPagequeryNeinDatensätze pro Seite.

Die Python- und Node-Wrapper stellen nur tag und page bereit. Um nach status oder siteId zu filtern oder perPage festzulegen, rufen Sie die Route direkt auf, wie unter Doppelte Einträge bearbeiten gezeigt.

Account rollup
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=POTENTIAL&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "duplicateListingsRollup": {      "pageInfo": {        "hasNextPage": true,        "hasPreviousPage": false,        "totalPages": 34,        "totalRecords": 1673      },      "records": [        {          "id": "3329229",          "name": "Woodbury Train Station",          "nameValid": false,          "duplicateProcessingState": "POTENTIAL",          "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450",          "locationId": "73451",          "siteName": "City Squares",          "siteUrl": "citysquares.com"        }      ]    }  }}

Die Zusammenfassung zeigt Ihnen, wo sich Duplikate befinden: Jeder Datensatz nennt locationId und siteName. duplicateProcessingState ist derselbe Lebenszyklusstatus, den der Endpunkt für einzelne Standorte als status meldet. Rufen Sie die Seiten einzeln nacheinander ab, bis hasNextPage den Wert false hat; eine Schleife ohne Pause führt am schnellsten zu 429.

StatusBedeutung
POTENTIALErkannt, bisher hat niemand Maßnahmen ergriffen.
PROCESSINGAls Duplikat bestätigt; die Unterdrückung bei der Plattform läuft.
FIXEDDie Plattform hat den Eintrag entfernt oder zusammengeführt.
FAILEDDie Unterdrückung war nicht erfolgreich. Prüfen Sie liveLink.

Duplikate für einen Standort auflisten

GET /locations/{locationId}/listings/duplicates

Gibt unter data.duplicateListingsForLocation alle erkannten Duplikate für einen einzelnen Standort zurück, gruppiert nach Plattform-Site. Es handelt sich um ein einfaches Array. Jede Gruppe ist eine Site (name, url) mit einem listings-Array, und jeder Eintrag enthält den Wert listingItemId, den beide Endpunkte zur Markierung entgegennehmen. Ein leeres Array bedeutet, dass nichts erkannt wurde.

Parameter

NameInErforderlichHinweise
locationIdpathJaBase64-ID oder numerischer Wert für databaseId.
Duplicates for a location
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/duplicates \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "duplicateListingsForLocation": [      {        "id": "U2l0ZToxNTA=",        "name": "City Squares",        "url": "citysquares.com",        "listings": [          {            "id": "RHVwbGljYXRlOjIzNTk4NDUw",            "listingItemId": "TGlzdGluZ0l0ZW06MjM1OTg0NTA=",            "name": "Woodbury Train Station",            "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450",            "status": "POTENTIAL"          }        ]      }    ]  }}

Öffnen Sie liveLink, um den Eintrag zu prüfen, und bewahren Sie anschließend listingItemId auf. Im Node SDK ist der Wert des abgeflachten Felds d.id weiterzugeben. status verwendet dieselben vier Werte wie die kontoweite Zusammenfassung oben.

Einträge als Duplikate bestätigen

POST /locations/listings/mark-as-duplicate

Markiert Einträge als bestätigte Duplikate, damit sie bei der Plattform unterdrückt werden können. Senden Sie die listingItemId-Werte unter input und bündeln Sie alle bestätigten Einträge eines Standorts in einem Aufruf, statt für jeden Eintrag einen eigenen Aufruf zu senden. Dies ist ein Schreibvorgang und erfordert einen Write (Schreibzugriff)-Schlüssel.

Parameter

NameInErforderlichHinweise
input.listingItemIdsbodyJaArray mit Base64-kodierten listingItemId-Werten aus den Duplikat-Endpunkten.
input.locationIdbodyNeinBase64-kodierte oder numerische Standort-ID. Beschränkt den Vorgang auf einen Standort.
Mark as duplicate
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="]  }}'
JSON
{  "data": {    "markAsDuplicate": {      "success": true,      "errors": null    }  }}

success: true bedeutet, dass die Einträge angenommen wurden und in den Status PROCESSING wechseln. Bei 200 mit success: false oder bei 400 wird ein errors-Array mitgeliefert, dessen Einträge code, message und path enthalten; die Ursache ist meist eine unbekannte oder fehlerhaft formatierte ID. Das Python SDK gibt die Nutzdaten zurück; das Node SDK löst stattdessen ValidationError aus, sodass ein erfolgreich aufgelöstes Promise bedeutet, dass der Vorgang erfolgreich war.

Einträge als Nicht-Duplikate verwerfen

POST /locations/listings/mark-as-not-duplicate

Verwirft potenzielle Duplikate als Fehlalarme. Die Erkennung ist konservativ und markiert auch einen anderen Standort derselben Franchise-Kette, ein zweites legitimes Profil oder einen umbenannten Standort. Nach dem Verwerfen erscheinen die Einträge in keinem der beiden Duplikat-Endpunkte mehr. Der Endpunkt nimmt denselben Body wie der obige Endpunkt entgegen und dient auch dazu, eine irrtümliche Markierung eines Eintrags rückgängig zu machen.

Parameter

NameInErforderlichHinweise
input.listingItemIdsbodyJaArray mit Base64-kodierten listingItemId-Werten, die verworfen werden sollen.
input.locationIdbodyNeinBase64-kodierte oder numerische Standort-ID. Beschränkt den Vorgang auf einen Standort.
Mark as not duplicate
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-not-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="]  }}'
JSON
{  "data": {    "markAsNotDuplicate": {      "success": true,      "errors": null    }  }}

Die Antwort ist data.markAsNotDuplicate mit denselben Feldern success und errors wie beim Aufruf zur Markierung als Duplikat. Ein verworfener Eintrag wird als bestätigtes Nicht-Duplikat erfasst und erscheint beim nächsten Erkennungslauf nicht erneut.

Mögliche Fehler

Code oder StatusBedeutungBehebung
401Fehlender oder ungültiger API-Schlüssel.Senden Sie Authorization: API $LISTINGSAPI_KEY.
400 bei der kontoweiten Zusammenfassungstatus ist keiner der Werte POTENTIAL, PROCESSING, FIXED, FAILED.Verwenden Sie einen der vier Werte.
400 bei einem MarkierungsendpunktUnbekannte oder fehlerhaft formatierte ID eines Eintragselements. Lesen Sie errors[].code und message.Senden Sie listingItemId-Werte aus den Duplikatendpunkten.
200 mit success: falseDie Anfrage wurde ausgeführt, aber die Eingabe wurde abgelehnt. Einzelheiten finden Sie in data.<op>.errors.Prüfen Sie bei jedem Schreibvorgang den Antworttext, nicht nur den Status.
SY90016 (HTTP 400)Ein Read-Schlüssel bei einem Schreibvorgang.Verwenden Sie einen Write-Schlüssel für die beiden Markierungsendpunkte.
429Anfragelimit überschritten. Der Launch-Tarif erlaubt 10 Anfragen pro Minute.Warten Sie auf Retry-After und fahren Sie dann fort. Siehe Anfragelimits.

Alle Codes sind in der Fehlerreferenz aufgeführt.

Nächste Schritte