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

Obtener publicaciones de una ubicación

Devuelve una página de campañas de publicaciones en redes sociales (anuncios, eventos y ofertas) dirigidas a una única ubicación.

Requiere una clave de API. Consulta Autenticación para conocer el formato del encabezado y la rotación de claves.

Parámetros

Ruta

NombreTipoObligatorioDescripción
locationIdstringobligatorioBase64-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.

Consulta

NombreTipoObligatorioDescripciónPredeterminado
pageintegeropcional1-based page number for offset pagination.1
perPageintegeropcionalNumber of records per page. Must not exceed 50.10

Respuestas

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.

Usa este endpoint para recuperar el historial de publicaciones de un único establecimiento: todas las campañas de anuncios, eventos y ofertas que incluyen la ubicación, con su status de ciclo de vida y los contadores de interacción de cada publicación (views, clicks, reactions).

Caso de uso: auditoría previa a una campaña. Antes de programar una nueva publicación de Google para Jenny Home, llama a GET /locations/TG9jYXRpb246MTgwMDI4OQ==/posts para ver qué contenido ya está publicado, qué publicaciones siguen en SCHEDULED y qué resultados obtuvo el último anuncio. Lee type en cada registro para identificar las ofertas; este endpoint no tiene un filtro por tipo en el servidor.

Aspectos que debes tener en cuenta.

  • Los únicos argumentos que acepta este endpoint son page y perPage. Aquí no hay ningún parámetro filters, sortFields, locationIds ni componentIdentifier (estos pertenecen al endpoint de publicaciones en bloque), y si envías alguno, se ignora en lugar de rechazarse. Filtra y ordena los datos devueltos en records en tu propio código.
  • tag se rechaza directamente en esta ruta, con tag is not a supported parameter for this query. Usa el endpoint de publicaciones en bloque cuando necesites determinar un conjunto de ubicaciones a partir de una etiqueta.
  • perPage tiene un límite de 50; un valor mayor provoca un error per_page must not exceed 50.
  • Pasa locationId como cursor en base64 (e.g. TG9jYXRpb246MTgwMDI4OQ==) exactamente como lo devuelven los endpoints de listado o búsqueda, sin aplicarle codificación URL.
  • La paginación se basa en desplazamientos: usa page y perPage (10 de forma predeterminada), y lee pageInfo.totalPages / pageInfo.totalRecords para saber cuándo detenerte.
  • Las consultas periódicas continuadas pueden alcanzar el límite de solicitudes de la cuenta (HTTP 429); respeta la cabecera Retry-After.

El array records del ejemplo anterior es representativo. La ubicación precargada en el entorno real (Jenny Home) actualmente no tiene publicaciones en redes sociales, por lo que una llamada real devuelve records: [] con pageInfo.totalRecords: 0.

Relacionado: crea publicaciones con POST /posts, obtén una campaña con GET /posts/{postId} o enumera las campañas en bloque (para varias ubicaciones) con GET /locations/{locationId}/bulk-posts, que sí acepta filters y sortFields y devuelve la respuesta bajo rollupSocialPosts.

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