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

Buscar publicações de um local

Retorna uma página de campanhas de publicações em redes sociais (anúncios, eventos, ofertas) direcionadas a um único local.

Requer uma chave de API. Consulte Autenticação para ver o formato do cabeçalho e a rotação de chaves.

Parâmetros

Caminho

NomeTipoObrigatórioDescrição
locationIdstringobrigatórioBase64-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.

Query

NomeTipoObrigatórioDescriçãoPadrão
pageintegeropcional1-based page number for offset pagination.1
perPageintegeropcionalNumber of records per page. Must not exceed 50.10

Respostas

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.

Use este endpoint para recuperar o histórico de publicações de uma única loja: todas as campanhas de anúncios, eventos e ofertas que incluem o local, com seu status de ciclo de vida e contadores de engajamento por publicação (views, clicks, reactions).

Caso de uso: auditoria antes da campanha. Antes de agendar uma nova publicação no Google para Jenny Home, chame GET /locations/TG9jYXRpb246MTgwMDI4OQ==/posts para ver o que já está publicado, quais publicações ainda estão SCHEDULED e qual foi o desempenho do último anúncio. Leia type em cada registro para identificar as ofertas; este endpoint não tem filtro por tipo no servidor.

Pontos de atenção.

  • Os únicos argumentos que este endpoint aceita são page e perPage. Não há parâmetro filters, sortFields, locationIds ou componentIdentifier aqui (eles pertencem ao endpoint de publicações em massa), e, se você enviar um deles, ele será ignorado em vez de rejeitado. Filtre e ordene o records retornado no seu próprio código.
  • tag é rejeitado imediatamente nesta rota, com tag is not a supported parameter for this query. Use o endpoint de publicações em massa quando precisar determinar um conjunto de locais a partir de uma tag.
  • perPage é limitado a 50; um valor maior causa uma falha com per_page must not exceed 50.
  • Passe locationId como o cursor em base64 (e.g. TG9jYXRpb246MTgwMDI4OQ==) exatamente como retornado pelos endpoints de listagem/busca; não aplique codificação de URL a ele.
  • A paginação é baseada em deslocamento: use page e perPage (padrão 10) e leia pageInfo.totalPages / pageInfo.totalRecords para saber quando parar.
  • Consultas contínuas podem atingir o limite de requisições da conta (HTTP 429); respeite o cabeçalho Retry-After.

O array records no exemplo acima é representativo. O local pré-carregado no ambiente ativo (Jenny Home) atualmente não tem publicações em redes sociais, então uma chamada real retorna records: [] com pageInfo.totalRecords: 0.

Relacionado: crie publicações com POST /posts, busque uma campanha com GET /posts/{postId} ou liste campanhas em massa (para vários locais) com GET /locations/{locationId}/bulk-posts, que aceita filters e sortFields e retorna a resposta em rollupSocialPosts.

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