/api/v4/locations/{locationId}/postsBuscar 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.
Parâmetros
Caminho
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| locationId | string | obrigatório | Base64-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
| Nome | Tipo | Obrigatório | Descrição | Padrão |
|---|---|---|---|---|
| page | integer | opcional | 1-based page number for offset pagination. | 1 |
| perPage | integer | opcional | Number 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.
{ "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
pageeperPage. Não há parâmetrofilters,sortFields,locationIdsoucomponentIdentifieraqui (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 orecordsretornado no seu próprio código. tagé rejeitado imediatamente nesta rota, comtag 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 comper_page must not exceed 50.- Passe
locationIdcomo 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
pageeperPage(padrão 10) e leiapageInfo.totalPages/pageInfo.totalRecordspara 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.
curl -X GET 'https://listingsapi.com/api/v4/locations/<locationId>/posts' \ -H "Authorization: API $LISTINGSAPI_KEY"