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

Ambil postingan untuk suatu lokasi

Mengembalikan satu halaman kampanye postingan media sosial (pengumuman, acara, penawaran) yang menargetkan satu lokasi.

Memerlukan kunci API. Lihat Autentikasi untuk format header dan rotasi kunci.

Parameter

Path

NamaTipeWajibDeskripsi
locationIdstringwajibBase64-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

NamaTipeWajibDeskripsiDefault
pageintegeropsional1-based page number for offset pagination.1
perPageintegeropsionalNumber of records per page. Must not exceed 50.10

Respons

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.

Gunakan endpoint ini untuk mengambil riwayat postingan untuk satu gerai, yaitu setiap kampanye pengumuman, acara, dan penawaran yang mencakup lokasi tersebut, beserta status siklus hidupnya dan penghitung interaksi per postingan (views, clicks, reactions).

Contoh penggunaan: audit sebelum kampanye. Sebelum menjadwalkan postingan Google baru untuk Jenny Home, panggil GET /locations/TG9jYXRpb246MTgwMDI4OQ==/posts untuk melihat postingan yang sudah tayang, postingan yang masih SCHEDULED, dan kinerja pengumuman terakhir. Baca type pada setiap rekaman untuk mengidentifikasi penawaran; endpoint ini tidak memiliki filter jenis di sisi server.

Hal yang perlu diperhatikan.

  • Endpoint ini hanya menerima argumen page dan perPage. Tidak ada parameter filters, sortFields, locationIds, atau componentIdentifier di sini (parameter tersebut tersedia pada endpoint bulk-posts), dan jika dikirim, parameter tersebut akan diabaikan, bukan ditolak. Filter dan urutkan records yang dikembalikan dalam kode Anda sendiri.
  • tag langsung ditolak pada rute ini dengan tag is not a supported parameter for this query. Gunakan endpoint bulk-posts saat Anda perlu menentukan sekumpulan lokasi berdasarkan tag.
  • perPage dibatasi hingga 50; nilai yang lebih besar menyebabkan kegagalan dengan per_page must not exceed 50.
  • Kirim locationId sebagai kursor base64 (e.g. TG9jYXRpb246MTgwMDI4OQ==) persis seperti yang dikembalikan oleh endpoint list/search; jangan lakukan pengodean URL pada kursor tersebut.
  • Paginasi berbasis offset: gunakan page dan perPage (nilai default 10), lalu baca pageInfo.totalPages / pageInfo.totalRecords untuk mengetahui kapan harus berhenti.
  • Polling berkelanjutan dapat mencapai batas laju permintaan akun (HTTP 429); patuhi header Retry-After.

Array records dalam contoh di atas bersifat representatif. Lokasi data awal di lingkungan aktif (Jenny Home) saat ini tidak memiliki postingan media sosial, sehingga panggilan sesungguhnya mengembalikan records: [] dengan pageInfo.totalRecords: 0.

Terkait: buat postingan dengan POST /posts, ambil satu kampanye dengan GET /posts/{postId}, atau ambil daftar kampanye massal (multilokasi) dengan GET /locations/{locationId}/bulk-posts, yang memang menerima filters dan sortFields serta mengembalikan respons di bawah rollupSocialPosts.

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