Recensioni

Tutti gli endpoint recensioni, esempi cURL/Python/Node: fonti, impostazioni, elenco, riepilogo, dettagli, risposte, modifiche, archivio, frasi e analisi.

Le recensioni sono le valutazioni in stelle e i commenti che i clienti lasciano su Google, Facebook e Yelp. L'API ne memorizza una copia ciascuna, ti permette di rispondere e calcola le analisi delle recensioni. I percorsi REST usano reviews; le chiavi delle risposte e i titoli delle pagine di riferimento usano interactions, il precedente nome interno dello stesso oggetto. Questa guida usa sempre il termine recensione. Le operazioni di lettura richiedono una chiave Read (lettura). Per rispondere, modificare, archiviare e cambiare le impostazioni serve una chiave Write (scrittura); l'uso di una chiave Read per un'operazione di scrittura restituisce 400 con SY90016.

Panoramica degli endpoint

MetodoPercorsoFunzioneRiferimento
GET/reviews/site-configFonti delle recensioni consentite dal piano dell'account.Elenca le fonti delle recensioni per un account
GET/locations/{locationId}/reviews/settingsFonti configurate per una sede.Elenca le fonti delle recensioni per una sede
POST/locations/reviews/settings/editImposta le fonti e la soglia di positività di una sede.Modifica le impostazioni delle recensioni
GET/locations/{locationId}/reviewsElenco delle recensioni di una sede con paginazione a cursore.Elenca le recensioni
GET/rollup_interactionsElenco relativo a tutte le sedi con paginazione a cursore.Ottieni le recensioni aggregate
GET/reviewDetailsCopie aggiornate delle recensioni recuperate tramite id, con le risposte.Ottieni le recensioni tramite id
Riferimento dei campi degli oggetti recensione e risposta.Attributi delle recensioni
POST/locations/reviews/respondPubblica una risposta del proprietario.Rispondi a una recensione
POST/locations/reviews/respond/editModifica il testo di una risposta.Modifica una risposta
POST/locations/reviews/respond/archiveRimuovi una risposta dal monitoraggio.Archivia una risposta
GET/review-phrasesFrasi ripetute dai clienti, con statistiche.Elenca le frasi delle recensioni
GET/locations/{locationId}/review-analytics-overviewQuattro KPI con variazioni tra periodi.Panoramica delle analisi delle recensioni
GET/locations/{locationId}/review-analytics-timelineConteggio giornaliero e valutazione media.Andamento temporale delle analisi delle recensioni
GET/locations/{locationId}/review-analytics-sites-statsValutazione, volume e recenza per fonte.Analisi delle recensioni per sito

Elenca le fonti delle recensioni consentite dal tuo piano

GET /reviews/site-config restituisce il catalogo delle piattaforme di recensioni a cui l'account ha diritto di accedere. Non accetta parametri e opera a livello di account, quindi memorizza il risultato nella cache invece di chiamarlo per ogni sede. I valori di siteUrl sono i nomi host accettati da tutti gli altri filtri di questa risorsa.

NomePosizioneObbligatorioNote
nessunoNessun parametro.
Account sources
curl https://listingsapi.com/api/v4/reviews/site-config \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionSiteConfig": [      { "site": "Google", "siteUrl": "maps.google.com" },      { "site": "Facebook", "siteUrl": "facebook.com" },      { "site": "Yelp", "siteUrl": "yelp.com" }    ]  }}

Leggi data.interactionSiteConfig[]. L'esempio riguarda un account con piano Launch; l'insieme esatto dipende dal piano e dal settore. Usa siteUrl per il filtro siteUrls degli endpoint di elenco e per siteUrls[].name quando modifichi le impostazioni.

Elenca le fonti configurate per una sede

GET /locations/{locationId}/reviews/settings restituisce una voce per ogni piattaforma supportata dal piano, con l'URL da cui vengono recuperate le recensioni. È la controparte di lettura dell'endpoint di modifica descritto di seguito. Il percorso accetta l'id in base64 o il semplice numero.

NomePosizioneObbligatorioNote
locationIdpathSìId Relay in base64 o databaseId numerico.
Location sources
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews/settings \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsSetting": {      "siteSettings": [        { "name": "maps.google.com", "url": null },        { "name": "facebook.com", "url": null },        { "name": "yelp.com", "url": null }      ]    }  }}

Leggi data.interactionsSetting.siteSettings[]. Un valore non nullo per url indica che la piattaforma è collegata e che le recensioni vengono recuperate da quella pagina. Un valore null per url indica che la piattaforma è disponibile ma non configurata. Le voci di Google e Facebook vengono compilate automaticamente quando colleghi questi account tramite OAuth e non possono essere sovrascritte dall'endpoint di modifica. Yelp deve essere specificato esplicitamente.

Modifica le impostazioni delle recensioni di una sede

POST /locations/reviews/settings/edit imposta le fonti su cui viene monitorata una sede e la valutazione in stelle a partire dalla quale una recensione è considerata positiva. I campi vanno direttamente nel corpo, non in un contenitore input. L'aggiunta di una fonte mette in coda un'operazione di scraping, quindi le recensioni del nuovo sito arrivano in seguito, non in questa risposta.

NomePosizioneObbligatorioNote
locationIdbodySìSolo id Relay in base64. Un id numerico nel corpo causa un errore SY90002.
siteUrlsbodyNoL'insieme completo delle fonti, come coppie di name e url. Sostituisce la selezione attuale.
siteUrls[].namebodyNoChiave del sito da siteSettings[].name, ad esempio maps.google.com o yelp.com.
siteUrls[].urlbodyNoLa pagina della sede su quel sito. Il valore null o l'omissione del campo interrompe il monitoraggio di una fonte che richiede un URL.
positiveInteractionThresholdbodyNoValutazione a partire dalla quale una recensione è considerata positiva. Se inviata da sola, lascia invariate le fonti.
Edit settings
curl -X POST https://listingsapi.com/api/v4/locations/reviews/settings/edit \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "locationId": "TG9jYXRpb246MTgwMDI4OQ==",  "positiveInteractionThreshold": 4,  "siteUrls": [    { "name": "maps.google.com", "url": null },    { "name": "yelp.com", "url": "https://www.yelp.com/biz/blue-bottle-coffee-oakland" }  ]}'
JSON
{  "data": {    "editInteractionsSetting": {      "errors": null,      "interactionSetting": {        "locationId": "1800289",        "positiveInteractionThreshold": 4,        "siteSettings": [          { "name": "maps.google.com", "url": null, "monitored": true, "canRespond": true },          { "name": "yelp.com", "url": "https://www.yelp.com/biz/blue-bottle-coffee-oakland", "monitored": true, "canRespond": false }        ]      }    }  }}

Leggi data.editInteractionsSetting.interactionSetting.siteSettings[] per ottenere la selezione memorizzata. monitored indica che la fonte è attiva; canRespond indica se è possibile pubblicarvi risposte del proprietario tramite l'API. Una fonte rifiutata dalla convalida, ad esempio un URL irraggiungibile o un sito non incluso nel piano, viene restituita in errors lasciando invariata l'impostazione, quindi controlla errors quando ricevi 200. In questo caso gli SDK sollevano ValidationError.

Elenca le recensioni di una sede

GET /locations/{locationId}/reviews è una connessione a cursore disponibile su data.interactions, con le recensioni più recenti per prime. first ha un valore predefinito di 20, quindi una singola chiamata non restituisce mai l'intera cronologia. I filtri array sono stringhe JSON nella stringa di query e devono essere codificati per l'URL; l'esempio cURL usa -G con --data-urlencode a questo scopo.

NomeInObbligatorioNote
locationIdpathSìID Relay in Base64 o databaseId numerico.
first, afterqueryNoPaginazione in avanti. Passa pageInfo.endCursor come after.
last, beforequeryNoPaginazione all'indietro. pageInfo non contiene startCursor, quindi passa il cursor del primo edge.
siteUrlsqueryNoArray JSON di nomi host, ad esempio ["maps.google.com"].
ratingFiltersqueryNoArray JSON di valutazioni in stelle, ad esempio [1,2].
responseStatusqueryNoArray JSON: ["PENDING"] o ["RESPONDED"].
sortOrderqueryNoArray JSON: ["NEWEST_FIRST"], ["OLDEST_FIRST"] o ["LAST_RESPONDED"].
startDate, endDatequeryNoYYYY-MM-DD, stringhe semplici.
searchStringqueryNoRicerca a testo completo nel corpo della recensione.

Sono disponibili anche i parametri facoltativi category, categories e ratingFilter a valore singolo, elencati nella pagina di riferimento.

List reviews
curl -G "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'ratingFilters=[1,2]' \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'sortOrder=["NEWEST_FIRST"]' \--data-urlencode 'first=25'
JSON
{  "data": {    "interactions": {      "pageInfo": { "hasNextPage": true, "endCursor": "SW50ZXJhY3Rpb246MV8xNTU0..." },      "edges": [        {          "node": {            "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",            "source": "maps.google.com",            "content": "nice place for family together",            "authorName": "vaibhav nakate",            "rating": 5,            "date": "2019-04-02T22:11:13.036997+00:00",            "type": "Review",            "responded": false,            "responseCount": 0,            "canRespond": true,            "permalink": "https://maps.google.com/maps?cid=..."          },          "cursor": "SW50ZXJhY3Rpb246MV8xNTU0..."        }      ],      "totalCount": 425    }  }}

Leggi edges[].node. id è il valore che passi quando rispondi, mentre canRespond indica se quella fonte accetta risposte del proprietario. totalCount è il numero di corrispondenze nell'intero insieme di risultati, non in questa pagina. Interrompi la paginazione quando hasNextPage è false o quando una pagina restituisce edges vuoto; se il limite della pagina coincide con la recensione più vecchia, segue una pagina vuota.

FiltroValori
responseStatusRESPONDED, PENDING
sortOrderNEWEST_FIRST, OLDEST_FIRST, LAST_RESPONDED
categoryREVIEW, più altre categorie esposte per ciascun account

Passa in rassegna tutte le sedi con l'aggregazione

GET /rollup_interactions è la stessa connessione a cursore, estesa a tutte le sedi visibili alla chiave e disponibile su data.rollupInteractions, con un locationId numerico su ciascun nodo. Accetta gli stessi filtri dell'elenco per singola sede. Non esiste un filtro per sede; un argomento locationIds viene ignorato, non rifiutato. Nessuno dei due SDK fornisce ancora un wrapper per questo endpoint, quindi gli esempi usano requests e fetch.

NomeInObbligatorioNote
tagqueryNoTag delle sedi a cui limitare l'ambito. Il valore predefinito è all. Omettilo se non assegni tag alle sedi.
first, after, last, beforequeryNoPaginazione a cursore, come nell'endpoint di elenco.
siteUrls, ratingFilters, responseStatus, sortOrderqueryNoArray JSON codificati per l'URL, con gli stessi valori dell'endpoint di elenco.
startDate, endDate, searchStringqueryNoCome nell'endpoint di elenco.
Account rollup
curl -G "https://listingsapi.com/api/v4/rollup_interactions" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'sortOrder=["NEWEST_FIRST"]' \--data-urlencode 'first=50'
JSON
{  "data": {    "rollupInteractions": {      "pageInfo": { "hasNextPage": true, "hasPreviousPage": false },      "edges": [        {          "node": {            "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",            "source": "maps.google.com",            "content": "Excellent service, highly recommend.",            "rating": 5,            "responded": false,            "canRespond": true,            "locationId": 1800289          },          "cursor": "SW50ZXJhY3Rpb246OWUyNmQyYTg="        }      ],      "totalCount": 1284    }  }}

Raggruppa i nodi per locationId, il databaseId del negozio. Il pageInfo dell'aggregazione può omettere endCursor, quindi usa il cursor dell'ultimo edge come after; i due valori sono equivalenti. Delimita le esecuzioni pianificate con startDate e endDate invece di rileggere la cronologia e rispetta Retry-After quando ricevi un 429.

Recupera le recensioni per ID

GET /reviewDetails restituisce copie aggiornate delle recensioni memorizzate senza paginazione. La risposta è un semplice array in data.interactionDetails.interactions, senza edges o pageInfo, e ogni recensione include il proprio responses. Usalo per ricaricare i dati di un elenco di monitoraggio e per trovare il responseId necessario per la modifica o l'archiviazione.

NomeInObbligatorioNote
interactionIdsquerySìArray JSON di UUID delle recensioni, codificato per l'URL. Se lo ometti, viene restituito SY90006.
Details by id
curl -G "https://listingsapi.com/api/v4/reviewDetails" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'interactionIds=["b2fa765e-c62b-4e0b-b1d6-1c67c855f5e0"]'
JSON
{  "data": {    "interactionDetails": {      "interactions": [        {          "id": "b2fa765e-c62b-4e0b-b1d6-1c67c855f5e0",          "source": "maps.google.com",          "content": "Great place for dessert!",          "rating": 5,          "responded": true,          "responseCount": 1,          "canRespond": true,          "responses": [            {              "id": "2090753a-ece6-4837-8336-8494ad308523",              "content": "Thank you so much for the kind words!",              "interactionStatus": "CONFIRMED",              "editedResponse": false            }          ]        }      ]    }  }}

responses[].id è il responseId per gli endpoint di modifica e archiviazione. Con un ID di un altro account, viene restituito 200 con interactionDetails: null e un errore SY90001, quindi verifica la presenza di null prima di accedere agli elementi tramite indice.

Campi delle recensioni e delle risposte

La guida di riferimento degli attributi è una pagina di sola documentazione che elenca tutti i campi dell'oggetto recensione e dell'oggetto risposta. I campi che userai più spesso:

CampoTipoSignificato
id, interactionIdstringLo stesso UUID; passalo come interactionId quando rispondi.
sourcestringNome host del sito, ad esempio maps.google.com.
content, authorName, rating, datemixedTesto del corpo, autore della recensione, valutazione da 1 a 5 stelle, marca temporale ISO 8601.
typestringReview, Question, Comment, Recommendation, Post, Photo, Message o Response.
categorystringCategoria generale, Review o Social.
responded, responseCount, responsesmixedIndica se esistono risposte del proprietario, quante sono e quali sono gli oggetti risposta.
canRespondbooleanIndica se è possibile pubblicare una risposta su questa fonte tramite l'API.
permalinkstringLink alla recensione sul sito di origine.
locationIdintegerdatabaseId numerico della sede.

Ogni risposta in responses[] contiene id, content, authorName, date, interactionStatus, editedResponse, respondedWith (ID del modello) e remarks (dettaglio dell'errore). interactionStatus passa attraverso questi stati:

StatoSignificato
CREATEDAccettata e messa in coda per la piattaforma di pubblicazione.
COMPLETEDPubblicata sulla piattaforma di pubblicazione. Alcune piattaforme si fermano qui.
CONFIRMEDPubblicata e confermata dalla piattaforma di pubblicazione.
FAILEDLa piattaforma di pubblicazione l'ha rifiutata. remarks ne indica il motivo.

Pubblica una risposta del proprietario

POST /locations/reviews/respond pubblica una risposta pubblica sulla piattaforma di origine. I campi vanno direttamente nel body. La risposta viene accettata immediatamente e inviata in modo asincrono, quindi interactionStatus parte da CREATED. Controlla prima canRespond nella recensione.

NomeInObbligatorioNote
interactionIdbodySìIl valore id della recensione.
responseContentbodySìTesto della risposta.
respondedWithbodyNoID del modello di risposta, se la risposta proviene da un modello.
Respond
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "interactionId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responseContent": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!"}'
JSON
{  "data": {    "respondToInteraction": {      "interaction": {        "id": "2090753a-ece6-4837-8336-8494ad308523",        "interactionId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",        "content": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!",        "interactionStatus": "CREATED",        "editedResponse": false      },      "errors": null    }  }}

Conserva interaction.id: è il valore responseId da usare per la modifica e l'archiviazione. Una risposta rifiutata viene restituita come 200 con errors valorizzato all'interno di data.respondToInteraction, quindi leggi il body; gli SDK generano ValidationError. Recupera nuovamente la recensione tramite ID dopo una breve attesa per verificare che la risposta raggiunga COMPLETED o CONFIRMED.

Modifica una risposta

POST /locations/reviews/respond/edit modifica il testo di una risposta esistente. La modifica viene inviata nuovamente alla piattaforma, quindi interactionStatus torna a CREATED e editedResponse diventa true una volta applicata. Preferisci questa operazione all'archiviazione e alla ripubblicazione sulle piattaforme che consentono una sola risposta.

NomeInObbligatorioNote
reviewIdbodySìIl valore id della recensione.
responseIdbodySìIl valore id della risposta, ottenuto da responses[].
responseContentbodySìNuovo testo della risposta.
templateIdbodyNoID del modello di risposta a cui riattribuire la risposta.
Edit reply
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond/edit \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "reviewId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responseId": "2090753a-ece6-4837-8336-8494ad308523",  "responseContent": "Thank you again: we have updated our reply to include our new store hours."}'
JSON
{  "data": {    "editResponse": {      "status": "true",      "reviewId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",      "responseId": "2090753a-ece6-4837-8336-8494ad308523"    }  }}

status è la stringa "true" quando la modifica viene accettata. Conferma il nuovo testo con una chiamata ai dettagli e controlla interactionStatus della risposta.

Archivia una risposta

POST /locations/reviews/respond/archive rimuove una risposta da responses della recensione che monitoriamo nel nostro sistema. È un'eliminazione logica: una risposta già pubblicata su Google, Yelp o Facebook rimane lì. Usa questa operazione per rimuovere una bozza il cui invio non è riuscito o che è stata sostituita; usa la modifica per qualsiasi risposta pubblicata.

NomeInObbligatorioNote
responseIdbodySìIl valore id della risposta, ottenuto da responses[].
Archive reply
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond/archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "responseId": "2090753a-ece6-4837-8336-8494ad308523" }'
JSON
{  "data": {    "archiveResponse": {      "status": "true"    }  }}

Dopo l'archiviazione, responseCount della recensione diminuisce e responded riflette le risposte rimanenti.

Elenca le espressioni che i clienti ripetono

GET /review-phrases restituisce un semplice array in data.newReviewPhrases, con una voce per ogni espressione ricorrente e statistiche calcolate solo sulle recensioni che la contengono. Non è paginato; limitane le dimensioni con phraseCount. Tutti i filtri sono facoltativi e combinabili, quindi ratingFilters=[1,2] insieme a startDate restituisce le lamentele dell'ultimo trimestre.

NomeInObbligatorioNote
locationIdsqueryNoArray JSON di ID numerici delle sedi, ad esempio [1800289]. Omettilo per includere tutte le sedi che la chiave può leggere.
siteUrlsqueryNoArray JSON di hostname.
startDate, endDatequeryNoYYYY-MM-DD.
ratingFiltersqueryNoArray JSON di valutazioni in stelle.
responseStatusqueryNoArray JSON di RESPONDED o PENDING.
sortOrderqueryNoNEWEST_FIRST, OLDEST_FIRST, LAST_RESPONDED, LOWEST_RATING o HIGHEST_RATING.
phraseCountqueryNoNumero massimo di espressioni da restituire.
searchStringqueryNoSolo le espressioni che contengono questa sottostringa.

Inoltre, sono disponibili il parametro facoltativo categories e i parametri deprecati a valore singolo category e ratingFilter elencati nella pagina di riferimento.

Phrases
curl -G "https://listingsapi.com/api/v4/review-phrases" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'locationIds=[1800289]' \--data-urlencode 'ratingFilters=[1,2]' \--data-urlencode 'startDate=2026-06-01' \--data-urlencode 'endDate=2026-08-31' \--data-urlencode 'phraseCount=10'
JSON
{  "data": {    "newReviewPhrases": [      {        "reviewPhrase": "friendly staff",        "phraseStats": {          "stats": [            { "name": "total-reviews", "value": 46, "delta": 12.5, "abs": 5 },            { "name": "overall-rating", "value": 4.7, "delta": 1.1, "abs": 0.05 }          ]        }      },      {        "reviewPhrase": "long wait",        "phraseStats": {          "stats": [            { "name": "total-reviews", "value": 11, "delta": 37.5, "abs": 3 },            { "name": "overall-rating", "value": 2.9, "delta": -8.4, "abs": -0.27 }          ]        }      }    ]  }}

total-reviews indica quante volte compare l'espressione, overall-rating è la valutazione media di quelle recensioni, delta è la variazione percentuale rispetto al periodo precedente e abs è la variazione assoluta. Un 403 con SY90003 indica che la chiave non può leggere una delle sedi richieste.

Leggi i KPI delle recensioni per una sede

GET /locations/{locationId}/review-analytics-overview restituisce quattro statistiche in data.interactionsAnalyticsStats.stats. L'intervallo di date è facoltativo; restringe il periodo su cui vengono calcolati i valori e le relative variazioni. Ogni delta è la variazione percentuale rispetto al periodo precedente della stessa durata.

NomeInObbligatorioNote
locationIdpathSìID Relay in Base64 o databaseId numerico.
startDate, endDatequeryNoYYYY-MM-DD. Qui è facoltativo, a differenza della cronologia.
Overview
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/review-analytics-overview?startDate=2026-08-01&endDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsAnalyticsStats": {      "stats": [        { "name": "total-reviews", "value": 128, "delta": 6.67 },        { "name": "new-reviews", "value": 9, "delta": -25 },        { "name": "overall-rating", "value": 4.43, "delta": 2.31 },        { "name": "review-response-rate", "value": 62.5, "delta": 12.5 }      ]    }  }}
namevalueInterpreta come
total-reviewsconteggioTutte le recensioni della sede.
new-reviewsconteggioRecensioni ricevute nel periodo.
overall-ratingDa 1 a 5Valutazione media in stelle.
review-response-ratepercentualePercentuale di recensioni con una risposta del proprietario.

Un account appena creato senza un periodo precedente riporta un valore delta pari a 100, quindi non interpretare le variazioni del primo mese come crescita.

Recupera la cronologia giornaliera delle recensioni

GET /locations/{locationId}/review-analytics-timeline restituisce una voce per giorno in data.interactionsChartData.data. Passa startDate e endDate ogni volta che l'intervallo del grafico è importante; se li ometti, il servizio sceglie autonomamente la finestra temporale. Aggiungi site per rappresentare una singola fonte separatamente.

NomeInObbligatorioNote
locationIdpathSìID Relay in base64 o databaseId numerico.
startDate, endDatequeryNoYYYY-MM-DD. Passa entrambi per ottenere una finestra temporale prevedibile.
sitequeryNoUn hostname da siteSettings[].name, ad esempio maps.google.com. Nessuno dei due SDK lo espone; usa la chiamata REST.
Timeline
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/review-analytics-timeline?startDate=2026-08-01&endDate=2026-08-31&site=maps.google.com" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsChartData": {      "data": [        { "date": "2026-08-01", "interactionCount": 4, "averageRating": 4.5 },        { "date": "2026-08-02", "interactionCount": 0, "averageRating": null },        { "date": "2026-08-03", "interactionCount": 7, "averageRating": 4.285714285714286 }      ]    }  }}

Rappresenta interactionCount con barre e averageRating con una linea. La media si riferisce solo a quel giorno, non è una media progressiva, ed è null nei giorni senza recensioni, quindi lascia un'interruzione anziché rappresentare uno zero.

Suddividi le analisi delle recensioni per fonte

GET /locations/{locationId}/review-analytics-sites-stats restituisce una voce per fonte delle recensioni in data.interactionsSitesStats.stats. Usalo per individuare quale piattaforma ha fatto variare la media.

NomeInObbligatorioNote
locationIdpathSìID Relay in base64 o databaseId numerico.
startDate, endDatequeryNoYYYY-MM-DD. I delta confrontano questo periodo con quello precedente di pari durata.
By source
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/review-analytics-sites-stats?startDate=2026-08-01&endDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsSitesStats": {      "stats": [        {          "key": "google",          "siteUrl": "maps.google.com",          "averageRating": { "value": 4.6, "delta": 2.2 },          "totalInteractions": { "value": 412, "delta": 6.1 },          "newInteractions": { "value": 24, "delta": 33.3 },          "recency": "2026-09-06T14:12:00Z",          "baseRating": 4.5,          "baseInteractions": 388,          "humanizedRecency": "3 days ago"        },        {          "key": "facebook",          "siteUrl": "facebook.com",          "averageRating": { "value": 4.1, "delta": -1.4 },          "newInteractions": { "value": 0, "delta": -100 },          "recency": null,          "humanizedRecency": null        }      ]    }  }}

averageRating, totalInteractions e newInteractions contengono ciascuno un value e un delta; baseRating e baseInteractions sono i valori all'inizio del periodo rispetto ai quali viene misurato il delta. recency è il timestamp della recensione più recente, null quando la fonte non ne ha mai restituita una. Un newInteractions pari a 0 con un recency risalente a mesi fa indica in genere che la connessione alla fonte non è più aggiornata, quindi controlla le fonti della sede.

Errori che incontrerai

CodiceSignificatoSoluzione
SY90016Chiave Read usata per un'operazione di scrittura.Usa una chiave Write.
SY90001Non autorizzato: chiave non valida o ID di una recensione di un altro account. Su /reviewDetails viene restituito come 200 con interactionDetails: null.Controlla la chiave e l'ID.
SY90002ID non valido. Un locationId numerico nel corpo della richiesta di modifica delle impostazioni.Invia l'ID Relay in base64.
SY90003403, la chiave non può leggere o modificare questa sede.Usa una chiave che abbia accesso alla sede.
SY90006interactionIds mancante su /reviewDetails.Passa un array JSON di ID.
SY50121Seconda risposta del proprietario a una recensione di Google.Modifica la risposta esistente.
429Limite di frequenza.Attendi per il tempo indicato da Retry-After. Vedi Limiti di frequenza.

Le operazioni di scrittura possono anche restituire 200 con errors valorizzato all'interno di data.<op>, quindi leggi il corpo della risposta di ogni operazione di scrittura. L'elenco completo è in Codici di errore.

Passaggi successivi