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

Beiträge für einen Standort abrufen

Gibt eine Seite mit Social-Media-Beitragskampagnen (Ankündigungen, Veranstaltungen, Angebote) zurück, die auf einen einzelnen Standort ausgerichtet sind.

Erfordert einen API-Schlüssel. Format des Headers und Schlüsselrotation finden Sie unter Authentifizierung.

Parameter

Pfad

NameTypErforderlichBeschreibung
locationIdstringerforderlichBase64-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

NameTypErforderlichBeschreibungStandard
pageintegeroptional1-based page number for offset pagination.1
perPageintegeroptionalNumber of records per page. Must not exceed 50.10

Antworten

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.

Verwenden Sie diesen Endpunkt, um den Beitragsverlauf für eine einzelne Filiale abzurufen: jede Ankündigungs-, Veranstaltungs- und Angebotskampagne, die den Standort einschließt, jeweils mit status zum Lebenszyklus und Interaktionszählern pro Beitrag (views, clicks, reactions).

Anwendungsfall: Prüfung vor einer Kampagne. Bevor Sie einen neuen Google-Beitrag für Jenny Home planen, rufen Sie GET /locations/TG9jYXRpb246MTgwMDI4OQ==/posts auf, um zu sehen, was bereits veröffentlicht ist, welche Beiträge noch SCHEDULED sind und wie die letzte Ankündigung abgeschnitten hat. Lesen Sie type in jedem Datensatz, um die Angebote zu erkennen; dieser Endpunkt bietet keinen serverseitigen Typfilter.

Stolperfallen.

  • Die einzigen Argumente, die dieser Endpunkt akzeptiert, sind page und perPage. Hier gibt es keinen Parameter filters, sortFields, locationIds oder componentIdentifier (diese gehören zum bulk-posts-Endpunkt); wenn Sie einen davon übermitteln, wird er ignoriert statt abgelehnt. Filtern und sortieren Sie die zurückgegebenen records in Ihrem eigenen Code.
  • tag wird auf dieser Route grundsätzlich mit tag is not a supported parameter for this query abgelehnt. Verwenden Sie den bulk-posts-Endpunkt, wenn Sie anhand eines Tags eine Gruppe von Standorten ermitteln müssen.
  • perPage ist auf 50 begrenzt; ein größerer Wert führt zum Fehler per_page must not exceed 50.
  • Übergeben Sie locationId als Base64-Cursor (e.g. TG9jYXRpb246MTgwMDI4OQ==) genau so, wie er von den Listen-/Suchendpunkten zurückgegeben wird, und kodieren Sie ihn nicht für URLs.
  • Die Paginierung ist offsetbasiert: Verwenden Sie page und perPage (Standardwert 10) und lesen Sie pageInfo.totalPages / pageInfo.totalRecords, um zu erkennen, wann Sie aufhören müssen.
  • Anhaltendes Polling kann das Ratenlimit des Kontos erreichen (HTTP 429); beachten Sie den Header Retry-After.

Das Array records im obigen Beispiel ist repräsentativ. Der als Ausgangsdatensatz dienende Live-Standort (Jenny Home) hat derzeit keine Social-Media-Beiträge, daher gibt ein tatsächlicher Aufruf records: [] mit pageInfo.totalRecords: 0 zurück.

Verwandte Funktionen: Erstellen Sie Beiträge mit POST /posts, rufen Sie eine einzelne Kampagne mit GET /posts/{postId} ab oder listen Sie Sammelkampagnen (für mehrere Standorte) mit GET /locations/{locationId}/bulk-posts auf, wobei dieser Endpunkt filters und sortFields akzeptiert und die Ergebnisse unter rollupSocialPosts zurückgibt.

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