GET/api/v4/locations/{locationId}/posts

Récupérer les publications d’un établissement

Renvoie une page de campagnes de publications sur les réseaux sociaux (annonces, événements, offres) qui ciblent un seul établissement.

Nécessite une clé API. Consultez Authentification pour le format de l’en-tête et la rotation des clés.

Paramètres

Chemin

NomTypeObligatoireDescription
locationIdstringobligatoireBase64-encoded location cursor / global ID (e.g. `TG9jYXRpb246MTgwMDI4OQ==`). Pass it unchanged, do not URL-encode it. The base64 cursor always resolves; the raw numeric database ID also works on this endpoint, but the base64 form is the portable choice across the API.

Chaîne de requête

NomTypeObligatoireDescriptionPar défaut
pageintegerfacultatif1-based page number for offset pagination.1
perPageintegerfacultatifNumber of records per page. Must not exceed 50.10

Réponses

200A page of post campaigns for the location, under `data.postsByLocation`. `records` is empty when the location has no posts yet.
Response
{  "data": {    "postsByLocation": {      "records": [        {          "id": "U29jaWFsUG9zdDo0NDEyMg==",          "name": "Summer Hours Update",          "status": "SUCCESS",          "type": "ANNOUNCEMENT",          "createdAt": "2026-06-28",          "scheduledStartDate": "2026-06-28",          "scheduledEndDate": "2026-07-28",          "views": 128,          "clicks": 14,          "shares": 0,          "reactions": 3,          "comments": 1,          "sites": ["GOOGLE"],          "message": [            { "site": "GOOGLE", "message": "We have extended our summer hours! Open until 9pm on weekdays." }          ],          "cta": [            { "type": { "value": "LEARN_MORE", "label": "Learn more" }, "url": "https://jennyhome.example/hours", "site": "GOOGLE", "tinyUrl": "https://tiny.cc/jh-hours" }          ],          "contextInfo": null,          "mediaUrl": [            { "url": "https://cdn.listingsapi.com/posts/44122/summer.jpg", "site": "GOOGLE", "type": "IMAGE" }          ],          "publishDetails": [            { "site": "GOOGLE", "status": "PUBLISHED", "createdDate": "2026-06-28", "publishedDate": "2026-06-28", "submissionError": null }          ],          "postLinks": [            { "site": "GOOGLE", "link": "https://www.google.com/maps/place/?post=44122" }          ],          "locationIds": [1800289],          "clientName": "Jenny Home"        }      ],      "locationDetails": [        {          "id": "TG9jYXRpb246MTgwMDI4OQ==",          "name": "Jenny Home",          "street": "600 Congress Ave, Suite 200",          "city": "Austin",          "postalCode": "78701",          "countryIso": "US",          "stateIso": "TX",          "stateName": "Texas",          "storeId": null        }      ],      "pageInfo": {        "totalPages": 1,        "hasNextPage": false,        "hasPreviousPage": false,        "totalRecords": 1      }    }  }}
401Unauthenticated, missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

Utilisez cet endpoint pour récupérer l’historique des publications d’un seul point de vente : toutes les campagnes d’annonces, d’événements et d’offres qui incluent l’établissement, avec leur status de cycle de vie et leurs compteurs d’engagement par publication (views, clicks, reactions).

Cas d’utilisation : audit avant une campagne. Avant de programmer une nouvelle publication Google pour Jenny Home, appelez GET /locations/TG9jYXRpb246MTgwMDI4OQ==/posts pour voir ce qui est déjà en ligne, quelles publications sont encore SCHEDULED et quelles ont été les performances de la dernière annonce. Lisez type dans chaque enregistrement pour repérer les offres ; cet endpoint ne propose aucun filtre par type côté serveur.

Points de vigilance.

  • Les seuls arguments acceptés par cet endpoint sont page et perPage. Il n’existe ici aucun paramètre filters, sortFields, locationIds ou componentIdentifier (ils appartiennent à l’endpoint bulk-posts), et tout paramètre de ce type envoyé est ignoré plutôt que rejeté. Filtrez et triez les records renvoyés dans votre propre code.
  • tag est systématiquement rejeté sur cette route, avec tag is not a supported parameter for this query. Utilisez l’endpoint bulk-posts lorsque vous devez déterminer un ensemble d’établissements à partir d’une étiquette.
  • perPage est limité à 50 ; une valeur supérieure entraîne un échec avec per_page must not exceed 50.
  • Transmettez locationId sous forme de curseur base64 (e.g. TG9jYXRpb246MTgwMDI4OQ==) exactement tel qu’il est renvoyé par les endpoints de liste ou de recherche, sans l’encoder pour une URL.
  • La pagination repose sur un décalage : utilisez page et perPage (10 par défaut), et consultez pageInfo.totalPages / pageInfo.totalRecords pour savoir quand vous arrêter.
  • Des interrogations répétées et prolongées peuvent atteindre la limite de requêtes du compte (HTTP 429) ; respectez l’en-tête Retry-After.

Le tableau records dans l’exemple ci-dessus est représentatif. L’établissement servant de donnée initiale dans l’environnement réel (Jenny Home) ne possède actuellement aucune publication sur les réseaux sociaux ; un appel réel renvoie donc records: [] avec pageInfo.totalRecords: 0.

Voir aussi : créez des publications avec POST /posts, récupérez une campagne avec GET /posts/{postId} ou listez les campagnes groupées (portant sur plusieurs établissements) avec GET /locations/{locationId}/bulk-posts, qui accepte bien filters et sortFields et renvoie les résultats sous rollupSocialPosts.

Request
curl -X GET 'https://listingsapi.com/api/v4/locations/<locationId>/posts' \  -H "Authorization: API $LISTINGSAPI_KEY"