Référence des événements

Les 26 événements webhook de Listings API, regroupés par ressource, avec les champs exacts et un exemple de charge utile pour chacun.

Vingt-six événements, regroupés par ressource REST concernée. Chaque événement de cette page est envoyé à votre unique URL de webhooks. Il n'existe pas d'abonnement par événement : adaptez donc le traitement selon event et ignorez ce dont vous n'avez pas besoin.

Tous utilisent la charge utile standard, sauf listing.submission, décrit ci-dessous. Les champs facultatifs dans data sont omis lorsqu'ils sont vides, au lieu d'être envoyés avec la valeur null.

Index

ÉvénementRessourceDéclenché lorsque
listing.submissionFichesUne soumission de citation à un site d'annuaire atteint un état final
profile.createdÉtablissementsUn établissement est créé
profile.updatedÉtablissementsUn établissement est modifié
profile.deletedÉtablissementsUn établissement est archivé
connection.location_connectedComptes connectésUne fiche Google ou Facebook est associée
connection.location_disconnectedComptes connectésUne fiche est dissociée
connection.reauth_requiredComptes connectésLes identifiants ont été invalidés
connection.listing_inaccessibleComptes connectésL'accès à une fiche a été perdu
connection.google_verification_verifiedComptes connectésLa validation Google a réussi
connection.google_verification_failedComptes connectésLa validation Google a échoué
interaction.reviewAvisUn avis est reçu ou modifié
interaction.responseAvisUne réponse est publiée ou modifiée
local_post.createdPublicationsUne publication est créée
local_post.publishedPublicationsUne publication est mise en ligne sur Google
local_post.rejectedPublicationsGoogle a rejeté une publication
local_post.deletedPublicationsUne publication est supprimée
social_post.createdSocialUne publication sur les réseaux sociaux est créée
social_post.publishedSocialUne publication sur les réseaux sociaux est mise en ligne sur tous les canaux ciblés
social_post.failedSocialLa publication a échoué sur au moins un canal
social_post.rejectedSocialUn processus d'approbation a rejeté la publication
social_post.deletedSocialUne publication sur les réseaux sociaux est archivée
social_connection.connectedSocialUn canal de marque est connecté ou reconnecté
social_connection.disconnectedSocialUn canal de marque est supprimé volontairement
social_connection.archivedSocialUn canal de marque est perdu involontairement
review_analytics.daily_snapshotAnalysesL'agrégation quotidienne des avis est exécutée
review_analytics.weekly_snapshotAnalysesL'agrégation hebdomadaire des avis est exécutée

Fiches

S'utilise avec les points de terminaison Fiches, en particulier GET /locations/{locationId}/listings/premium, qui renvoie les valeurs de syncStatus et de listingUrl par citation annoncées par cet événement.

listing.submission

Déclencheur : une soumission de citation pour un établissement sur un site d'annuaire atteint un état final.

Au premier niveau :

ChampTypeDescription
eventstringToujours listing.submission.
dataobjectVoir ci-dessous.
statusstringsuccess, incomplete ou canceled.
live_linkstringL'URL de la fiche en ligne. Uniquement pour success, et seulement si une URL est connue.
error_messagestringLa raison pour laquelle la soumission n'a pas pu aboutir. Uniquement pour incomplete.

Dans data :

ChampTypeDescription
business_idintegerL'identifiant numérique de l'établissement.
v4_business_idstringLocation:<id> encodé en base64, sous la forme d'un identifiant global.
location_idstringLe même identifiant global encodé en base64, et non une chaîne numérique.
site.idintegerL'identifiant du site d'annuaire.
site.namestringLe nom du site d'annuaire, e.g. Yelp.
site.urlstringL'URL de la page d'accueil du site d'annuaire.
JSON
{  "event": "listing.submission",  "data": {    "business_id": 279381,    "v4_business_id": "TG9jYXRpb246Mjc5Mzgx",    "location_id": "TG9jYXRpb246Mjc5Mzgx",    "site": {      "id": 42,      "name": "Yelp",      "url": "https://www.yelp.com"    }  },  "status": "success",  "live_link": "https://www.yelp.com/biz/acme-dental-downtown"}

Établissements

Cycle de vie de l'établissement, avec une correspondance 1:1 avec createLocation, updateLocation et archiveLocations. Portée limitée à l'établissement : location_id est toujours une chaîne numérique.

profile.created

Déclencheur : un nouvel établissement est créé.

Champ de dataTypeDescription
sourcestringÀ l'origine de la création : user, api ou bulk_edit.
JSON
{  "event": "profile.created",  "timestamp": "2026-08-25T10:04:00Z",  "account_id": 11073,  "location_id": "901234",  "data": { "source": "api" }}

profile.updated

Déclencheur : les informations d'un établissement existant sont modifiées.

Envoi limité à une fois par établissement par période de 60 secondes, au début de la période. Les modifications effectuées pendant cette période sont regroupées, sans report de leur envoi. Elles ne sont jamais envoyées. Considérez changed_fields comme une indication sur la modification qui a ouvert la période, et non comme un relevé complet des différences.

L'événement arrive au début de la période : si vous relisez les données de l'établissement à sa réception, vous ne verrez donc que cette première modification. Planifiez une deuxième lecture après la fin de la période, au moins 60 secondes plus tard, et effectuez également un rapprochement périodique des données des établissements, car cet événement ne fait l'objet que d'une seule tentative d'envoi, sans nouvelle tentative. Voir récupération après un événement manqué.

Champ de dataTypeDescription
sourcestringuser, api ou bulk_edit.
changed_fieldsarray of stringNoms des champs de l'établissement qui ont changé, e.g. name, phone, address1. Omis si vide.
JSON
{  "event": "profile.updated",  "timestamp": "2026-08-25T10:06:12Z",  "account_id": 11073,  "location_id": "901234",  "data": {    "source": "user",    "changed_fields": ["name", "phone"]  }}

profile.deleted

Déclencheur : un établissement est archivé. Il s'agit d'une suppression logique. Il n'existe pas de suppression définitive, et un archivage peut être annulé avec cancelArchiveLocations, qui n'émet pas d'événement.

Champ de dataTypeDescription
sourcestringuser, api ou bulk_edit.
JSON
{  "event": "profile.deleted",  "timestamp": "2026-08-25T10:20:44Z",  "account_id": 11073,  "location_id": "901234",  "data": { "source": "user" }}

Comptes connectés

Cycle de vie et état des connexions Google et Facebook, en complément des endpoints Comptes connectés. Portée limitée à un établissement. platform vaut toujours google ou facebook ; les autres fournisseurs n'émettent pas ces événements.

La clé connected_account_id est toujours présente, mais sa valeur est null pour les deux événements de validation Google.

connection.location_connected

Déclencheur : une fiche Google ou Facebook est associée à un établissement.

Champ dataTypeDescription
platformstringgoogle ou facebook.
connected_account_idstringLe compte connecté qui a été associé.
JSON
{  "event": "connection.location_connected",  "timestamp": "2026-08-25T14:32:10Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc"  }}

connection.location_disconnected

Déclencheur : une fiche Google ou Facebook est dissociée d'un établissement.

Champ dataTypeDescription
platformstringgoogle ou facebook.
connected_account_idstringLe compte connecté qui a été dissocié.
JSON
{  "event": "connection.location_disconnected",  "timestamp": "2026-08-25T14:35:02Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc"  }}

connection.reauth_required

Déclencheur : les identifiants du compte connecté ont été invalidés. Aucune synchronisation ne sera effectuée pour cette connexion tant qu'une personne ne l'aura pas autorisée à nouveau.

Champ dataTypeDescription
platformstringgoogle ou facebook.
connected_account_idstringLe compte connecté nécessitant une nouvelle autorisation.
reasonstringDescription lisible par un humain. Omise lorsque la source n'en fournit pas.
JSON
{  "event": "connection.reauth_required",  "timestamp": "2026-08-25T14:40:18Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": "ba03bc4b-9f8c-4d3b-8e93-9628034c63cc",    "reason": "Google credentials are invalid. Please reconnect."  }}

connection.listing_inaccessible

Déclencheur : le compte connecté ne peut plus accéder à la fiche de l'établissement. Ce cas est distinct de reauth_required : les identifiants peuvent toujours être parfaitement valides, mais l'accès à cette fiche précise a été supprimé.

Champ dataTypeDescription
platformstringgoogle ou facebook.
connected_account_idstringLe compte connecté qui a perdu l'accès.
reasonstringDescription lisible par un humain. Omise lorsque la source n'en fournit pas.
JSON
{  "event": "connection.listing_inaccessible",  "timestamp": "2026-08-25T14:42:55Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "facebook",    "connected_account_id": "cf12de77-2211-4a09-b7c1-0a6f3b2e91aa",    "reason": "No longer has access to this listing."  }}

connection.google_verification_verified

Déclencheur : la fiche Google Business Profile d'un établissement est validée.

Champ dataTypeDescription
platformstringVaut toujours google.
connected_account_idnullVaut toujours null pour les événements de validation.
JSON
{  "event": "connection.google_verification_verified",  "timestamp": "2026-08-25T14:50:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": null  }}

connection.google_verification_failed

Déclencheur : une validation Google Business Profile se termine par un échec. Aucun appel REST ne lance de validation ; le statut lui-même peut être consulté, comme indiqué ci-dessus.

Seuls les états finaux émettent un événement : VERIFIED déclenche l'événement _verified, et SUSPENDED ou DUPLICATE (failure_type rejected) ainsi que ERROR_WHILE_FETCHING (transient) déclenchent celui-ci. Les états en cours (PENDING_VERIFICATION, UNDER_REVIEW, NOT_VERIFIED, NOT_CONNECTED) ne produisent aucun événement ; l'absence d'événement ne permet donc aucune déduction. Consultez périodiquement googleVerificationStatus en lisant les données de l'établissement pendant qu'une validation est en cours.

Champ dataTypeDescription
platformstringVaut toujours google.
connected_account_idnullVaut toujours null pour les événements de validation.
failure_typestringrejected pour une fiche suspendue ou en double ; transient lorsque les données de Google n'ont pas pu être lues. Une nouvelle tentative n'est pertinente que pour transient.
reasonstringDescription lisible par un humain. Omise lorsque la source n'en fournit pas.
JSON
{  "event": "connection.google_verification_failed",  "timestamp": "2026-08-25T14:52:31Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "platform": "google",    "connected_account_id": null,    "failure_type": "rejected",    "reason": "This profile is suspended."  }}

Avis

Avis et réponses, en complément des endpoints Avis, notamment répondre, modifier une réponse et archiver une réponse.

Les avis de la catégorie Social sont exclus par filtrage et ne sont jamais transmis.

interaction.review

Déclencheur : un avis est ingéré ou modifié.

Champ data.interactionTypeDescription
idstringUUID de l'interaction. Il identifie l'avis, et non cette modification : le même identifiant est reçu à nouveau chaque fois que l'avis change. Utilisez-le comme clé de votre enregistrement ; ne l'utilisez jamais pour ignorer une transmission ultérieure. Consultez Doublons et ordre.
typestringReview.
contentstringLe texte de l'avis. Peut valoir null.
ratingnumberNote en étoiles. Peut valoir null pour les sources qui n'en proposent pas.
titlestringTitre de l'avis, lorsque la source en fournit un.
author_namestringNom affiché de l'auteur de l'avis.
author_avatarstringURL de l'avatar de l'auteur de l'avis.
datestringDate de publication de l'avis sur la source, au format ISO-8601.
sourcestringProvenance, e.g. google.com, facebook.com.
permalinkstringLien vers l'avis sur la source.
categorystringCatégorie de l'interaction. Social est exclu par filtrage avant la transmission.
interaction_statusstringStatut de l'interaction dans le processus de traitement.
parent_idstringVaut toujours null pour un avis.
interaction_request_idstringLa demande à laquelle cette interaction est rattachée. Peut valoir null.
JSON
{  "event": "interaction.review",  "timestamp": "2026-08-25T09:12:44Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "interaction": {      "id": "6f8a1d20-3e11-4a55-9f7d-2b0c9e5a4471",      "type": "Review",      "content": "Friendly staff and no waiting.",      "rating": 5,      "title": null,      "author_name": "Dana R.",      "author_avatar": "https://lh3.googleusercontent.com/a/example",      "date": "2026-08-25T08:58:02Z",      "source": "google.com",      "permalink": "https://maps.google.com/example-review",      "category": "Review",      "interaction_status": "unread",      "parent_id": null,      "interaction_request_id": "3c1e9b74-88a2-4d0e-9c31-77a1f0be5d92"    }  }}

interaction.response

Déclencheur : une réponse à un avis est publiée, modifiée ou archivée. La structure est identique à celle de interaction.review, avec deux différences : type vaut Response et parent_id désigne l'avis auquel la réponse est apportée.

Champ data.interactionTypeDescription
typestringResponse.
parent_idstringUUID de l'avis auquel cette réponse est apportée.
contentstringLe texte de la réponse.
ratingnumberVaut toujours null pour une réponse.

Tous les autres champs répertoriés sous interaction.review sont présents et ont la même signification.

JSON
{  "event": "interaction.response",  "timestamp": "2026-08-25T09:30:07Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "interaction": {      "id": "b2d7c095-5f43-4e21-8a10-6d9c3f77e208",      "type": "Response",      "content": "Thanks Dana, see you next time!",      "rating": null,      "author_name": "Acme Dental Downtown",      "date": "2026-08-25T09:29:55Z",      "source": "google.com",      "permalink": "https://maps.google.com/example-review",      "category": "Review",      "interaction_status": "responded",      "parent_id": "6f8a1d20-3e11-4a55-9f7d-2b0c9e5a4471",      "interaction_request_id": "3c1e9b74-88a2-4d0e-9c31-77a1f0be5d92"    }  }}

Publications

Publications locales Google Business Profile, en complément des endpoints Posts. La portée est limitée à un établissement ; location_id est une chaîne numérique.

Les quatre événements partagent la même structure data ; les champs facultatifs diffèrent. Tous les champs facultatifs sont omis lorsqu’ils sont vides.

Champ dataTypeDescription
post_idintegerLa publication à laquelle cet élément appartient, identifiée par l’id renvoyé par les endpoints de création.
post_item_idintegerL’élément propre à chaque établissement. Une publication destinée à 20 établissements produit 20 éléments, et les événements sont émis par élément.
post_typestringSTANDARD, EVENT ou OFFER.
post_external_idstringLe nom de ressource attribué à la publication par Google. Absent tant que Google ne l’a pas acceptée.
published_urlstringUne URL consultable dans un navigateur. Généralement absente : Google n’en renvoie pas systématiquement ; utilisez post_external_id pour établir la correspondance.
rejection_reasonstringUniquement pour local_post.rejected.

local_post.created

Déclencheur : un élément de publication est créé et mis en file d’attente pour être envoyé à Google. Il n’est pas encore en ligne.

JSON
{  "event": "local_post.created",  "timestamp": "2026-08-25T11:02:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512309,    "post_type": "STANDARD"  }}

local_post.published

Déclencheur : Google a accepté la publication et elle est en ligne.

JSON
{  "event": "local_post.published",  "timestamp": "2026-08-25T11:06:41Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512309,    "post_type": "STANDARD",    "post_external_id": "accounts/123/locations/456/localPosts/789"  }}

local_post.rejected

Déclencheur : Google a rejeté la publication, ou son envoi a échoué.

JSON
{  "event": "local_post.rejected",  "timestamp": "2026-08-25T11:07:15Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512310,    "post_type": "OFFER",    "rejection_reason": "Rejected"  }}

local_post.deleted

Déclencheur : l’élément de publication est supprimé.

JSON
{  "event": "local_post.deleted",  "timestamp": "2026-08-25T15:40:09Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "post_id": 88421,    "post_item_id": 5512309,    "post_type": "STANDARD",    "post_external_id": "accounts/123/locations/456/localPosts/789"  }}

Social

Publication sur les réseaux sociaux au niveau de la marque et cycle de vie des connexions, en complément des endpoints Social. Neuf événements : cinq pour les publications, quatre pour les connexions.

account_id et timestamp sont présents comme d’habitude. Les identifiants dans data sont les mêmes UUID sans transformation que ceux utilisés par l’API REST, transmis sous forme de chaînes.

social_post.created

Déclencheur : une publication sur les réseaux sociaux est créée. Uniquement à la création : la modification d’une publication existante ne déclenche pas de nouvelle émission.

Champ dataTypeDescription
post_idstringL’UUID de la publication, qui correspond au socialPostId renvoyé par create.
social_profile_idstringLa marque à laquelle la publication appartient. null si la publication n’en a pas.
statusstringLe statut de la publication à sa création.
created_byintegerL’utilisateur qui l’a créée.
platform_idsarray of integerLes identifiants internes des plateformes ciblées par la publication.
JSON
{  "event": "social_post.created",  "timestamp": "2026-09-28T14:02:11Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "scheduled",    "created_by": 40122,    "platform_ids": [1, 2, 4]  }}

social_post.published

Déclencheur : la publication a été intégralement mise en ligne. Cet événement est émis uniquement en cas de réussite complète : au moins un canal a publié le contenu et aucun canal n’a rencontré d’erreur. Une mise en ligne partielle ne déclenche pas cet événement ; elle émet social_post.failed à la place.

Champ dataTypeDescription
post_idstringL’UUID de la publication.
social_profile_idstringLa marque à laquelle la publication appartient.
statusstringLe statut de la publication.
published_onstringLa date et l’heure de mise en ligne de la publication au format ISO-8601. null si elles n’ont pas été enregistrées.
itemsarray of objectUne entrée par canal ; les champs sont décrits ci-dessous.
items[].platformstringLe nom de la plateforme, e.g. instagram.
items[].social_platform_idintegerL’identifiant interne de la plateforme.
items[].connected_account_idstringL’UUID de la connexion utilisée pour la publication.
items[].published_urlstringL’URL de l’élément publié en ligne.
items[].vendor_post_idstringL’identifiant attribué par la plateforme à l’élément publié.
items[].statusstringLe statut de ce canal.
JSON
{  "event": "social_post.published",  "timestamp": "2026-10-02T13:30:07Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "published",    "published_on": "2026-10-02T13:30:04",    "items": [      {        "platform": "instagram",        "social_platform_id": 2,        "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",        "published_url": "https://www.instagram.com/p/CxYz1234abc/",        "vendor_post_id": "18029384756012345",        "status": "success"      }    ]  }}

social_post.failed

Déclencheur : la mise en ligne a échoué. Il s’agit d’un échec de transmission, distinct d’un rejet éditorial. Cet événement se déclenche lors de la dernière tentative ; il n’est donc pas émis tant qu’il reste des tentatives pour la publication.

items contient uniquement les canaux ayant rencontré une erreur ; ainsi, pour une publication mise en ligne sur deux plateformes et ayant échoué sur une troisième, cet événement contient un seul élément.

Champ dataTypeDescription
post_idstringL’UUID de la publication.
social_profile_idstringLa marque à laquelle la publication appartient.
statusstringLe statut de la publication.
itemsarray of objectUne entrée par canal en échec ; les champs sont décrits ci-dessous.
items[].platformstringLe nom de la plateforme.
items[].social_platform_idintegerL’identifiant interne de la plateforme.
items[].statusstringLe statut de ce canal.
items[].reasonstringUn motif court, tronqué à 300 caractères. Peut valoir null.
items[].vendor_errorstringUn message de longueur limitée, pouvant être présenté à l’utilisateur sans exposer de données sensibles, élaboré à partir de l’erreur de la plateforme. Jamais le contenu brut renvoyé par la plateforme. Peut valoir null.
JSON
{  "event": "social_post.failed",  "timestamp": "2026-10-02T13:34:55Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "failed",    "items": [      {        "platform": "linkedin",        "social_platform_id": 4,        "status": "error",        "reason": "Authorization expired",        "vendor_error": "The access token is no longer valid."      }    ]  }}

social_post.rejected

Déclencheur : un processus d’approbation a rejeté la publication. Il s’agit d’un rejet éditorial, et non d’un échec de transmission : la publication n’a jamais atteint de plateforme.

Champ dataTypeDescription
post_idstringL’UUID de la publication.
social_profile_idstringLa marque à laquelle la publication appartient.
statusstringLe statut de la publication.
rejection_reasonstringLe commentaire de la personne chargée de l’approbation. null si elle n’en a laissé aucun.
JSON
{  "event": "social_post.rejected",  "timestamp": "2026-09-29T09:11:03Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "rejected",    "rejection_reason": "Please use the updated product name."  }}

social_post.deleted

Déclencheur : la publication a été archivée, soit via POST /social/posts/cancel, soit par le traitement d’archivage planifié. Cet événement se déclenche uniquement lors d’un changement effectif d’état ; archiver à nouveau une publication déjà archivée n’émet donc aucun événement.

Champ dataTypeDescription
post_idstringL’UUID de la publication.
social_profile_idstringLa marque à laquelle la publication appartient.
statusstringLe statut de la publication.
archived_atstringLa date et l’heure d’archivage de la publication au format ISO-8601. null si elles n’ont pas été enregistrées.
JSON
{  "event": "social_post.deleted",  "timestamp": "2026-09-30T16:20:41Z",  "account_id": 62570,  "location_id": null,  "data": {    "post_id": "e08b2d97-6f14-4c22-b7a5-9d3e1f6c4a70",    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "status": "archived",    "archived_at": "2026-09-30T16:20:39"  }}

social_connection.connected

Déclencheur : un canal de marque est devenu actif, à la suite d’une première connexion ou de la reconnexion d’un canal qui avait été archivé. is_reconnect permet de distinguer les deux cas.

Champ dataTypeDescription
social_profile_idstringLa marque à laquelle le canal est rattaché.
connected_account_idstringL’UUID de la connexion, soit le id renvoyé par la liste des connexions.
platformstringLe nom de la plateforme, e.g. instagram.
display_namestringLe nom d’affichage du canal. Peut valoir null.
is_reconnectbooleanfalse lors d’une première connexion, true lorsqu’un canal précédemment archivé est redevenu actif.
listing_connected_account_idstringPrésent uniquement lorsque le canal est également lié à un compte connecté Listings. Omis dans le cas contraire.
JSON
{  "event": "social_connection.connected",  "timestamp": "2026-09-27T11:05:22Z",  "account_id": 62570,  "location_id": null,  "data": {    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",    "platform": "instagram",    "display_name": "Jenny Home",    "is_reconnect": false  }}

social_connection.disconnected

Déclencheur : le canal a été délibérément supprimé par un appel à disconnect. Cet événement est émis uniquement lorsque le canal a réellement été archivé ; une déconnexion qui a échoué ne produit donc pas d’événement erroné.

Champ dataTypeDescription
social_profile_idstringLa marque à laquelle le canal était rattaché.
connected_account_idstringL’UUID de la connexion.
platformstringLe nom de la plateforme.
display_namestringLe nom d’affichage du canal. Peut valoir null.
JSON
{  "event": "social_connection.disconnected",  "timestamp": "2026-10-04T08:47:10Z",  "account_id": 62570,  "location_id": null,  "data": {    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "connected_account_id": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",    "platform": "instagram",    "display_name": "Jenny Home"  }}

social_connection.archived

Déclencheur : la connexion au canal a été perdue involontairement : la plateforme a invalidé le jeton, ou un traitement de rapprochement a constaté que le canal n’était plus accessible. Personne n’a demandé cette déconnexion, ce qui la distingue de disconnected.

Champ dataTypeDescription
social_profile_idstringLa marque à laquelle le canal était rattaché.
connected_account_idstringL’UUID de la connexion.
platformstringLe nom de la plateforme.
display_namestringLe nom d’affichage du canal. Peut valoir null.
reasonstringLa raison de la perte de connexion. Peut valoir null.
JSON
{  "event": "social_connection.archived",  "timestamp": "2026-10-06T02:15:33Z",  "account_id": 62570,  "location_id": null,  "data": {    "social_profile_id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "connected_account_id": "2d4e6f80-1c33-4b7a-8e05-9a1b2c3d4e5f",    "platform": "facebook",    "display_name": "Jenny Home & Co.",    "reason": "Access token has been invalidated by the platform."  }}

Analyse des avis

Synthèses planifiées des avis, un événement par établissement et par période.

Les deux événements utilisent la même structure pour data :

Champ dataTypeDescription
periodstringDébut de la période, YYYY-MM-DD.
granularitystringdaily ou weekly.
total_reviewsintegerNombre total d’avis pour l’établissement, toutes périodes confondues.
new_reviews_in_periodintegerAvis reçus pendant cette période.
average_ratingnumberNote moyenne pour cette période, à 4 décimales. 0.0 si aucun avis n’a été reçu.
previous_average_ratingnumberNote moyenne pour la période précédente. 0.0 en l’absence de données pour la période précédente.

Un établissement sans activité pendant la période n’émet rien, mais vous ne recevez rien non plus si l’instantané d’un établissement n’a jamais été livré. L’absence d’un instantané est ambiguë, et pour cette famille, l’explication la moins préoccupante est la moins probable. Elle peut signifier : aucune activité ; une livraison qui a échoué ou dépassé le délai imparti (une seule tentative est effectuée, sans nouvelle tentative) ; une livraison désactivée parce que le compte ne dispose pas du droit d’accès aux webhooks, n’a aucune URL configurée, n’est pas vérifié ou est bloqué ; ou, cas le plus probable ici, le rejet d’une partie de la rafale par la limite par minute avec le statut rate_limited.

N’enregistrez jamais un zéro sur la seule base d’un instantané absent. Vérifiez les données auprès de GET /locations/{locationId}/review-analytics-overview pour la même période et, si cette lecture échoue également, indiquez que la période est indisponible plutôt que de lui attribuer la valeur zéro.

review_analytics.daily_snapshot

Déclencheur : la tâche de synthèse quotidienne, une fois par établissement et par jour.

JSON
{  "event": "review_analytics.daily_snapshot",  "timestamp": "2026-08-25T02:00:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "period": "2026-08-24",    "granularity": "daily",    "total_reviews": 1240,    "new_reviews_in_period": 3,    "average_rating": 4.6667,    "previous_average_rating": 5.0  }}

review_analytics.weekly_snapshot

Déclencheur : la tâche de synthèse hebdomadaire, une fois par établissement et par semaine. period est le premier jour de la semaine couverte par la synthèse.

JSON
{  "event": "review_analytics.weekly_snapshot",  "timestamp": "2026-08-24T02:00:00Z",  "account_id": 11073,  "location_id": "279381",  "data": {    "period": "2026-08-17",    "granularity": "weekly",    "total_reviews": 1237,    "new_reviews_in_period": 18,    "average_rating": 4.6123,    "previous_average_rating": 4.5901  }}

Événements que vous pouvez recevoir, mais sur lesquels vous ne devez pas vous appuyer

La plateforme émet d’autres familles d’événements : campagnes de collecte d’avis, classements, promotions de publications sur les réseaux sociaux, changements de statut des comptes publicitaires sur les réseaux sociaux, idées de publications générées par l’IA et propriété des fiches Google Business Profile. Aucun endpoint REST n’est publié pour ces familles dans Listings API, elles ne sont pas documentées ici et leurs structures ne sont couvertes par aucune garantie de compatibilité. Comme il n’existe qu’une seule URL et aucun abonnement par événement, votre gestionnaire doit ignorer toute valeur de event qu’il ne reconnaît pas et renvoyer quand même 200.