/api/v4/locations/{locationId}/bulk-postsMengambil postingan massal untuk suatu lokasi
Mengembalikan satu halaman kampanye postingan massal (multilokasi) yang mencakup satu lokasi tertentu.
Parameter
Path
| Nama | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| locationId | string | wajib | 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
| Nama | Tipe | Wajib | Deskripsi | Default |
|---|---|---|---|---|
| page | integer | opsional | 1-based page number for offset pagination. | 1 |
| perPage | integer | opsional | Number of records per page. | — |
| filters | string | opsional | JSON-encoded SocialPostFiltersInput (e.g. by `type`, `status`, `creationDateRange`, `siteUrls`). | — |
| sortFields | string | opsional | JSON-encoded sort object `{ "field": "created_at", "order": "Descending" }`. `field` is one of name, type, status, created_at, schedule_start_date, schedule_end_date, client_name, clicks, views, shares. | — |
| locationIds | string | opsional | JSON-encoded array of location IDs to include alongside the path location. | — |
| componentIdentifier | string | opsional | Filter to campaigns created by a specific component/integration. | — |
Respons
200A page of bulk campaigns that include the location. `records` is empty when no bulk campaign has targeted it.
{ "data": { "rollupSocialPosts": { "records": [ { "id": "U29jaWFsUG9zdDo1MTA4OA==", "name": "Diwali Offer - All Stores", "status": "SUCCESS", "type": "OFFER", "createdAt": "2026-06-20", "scheduledStartDate": "2026-06-22", "scheduledEndDate": "2026-07-06", "views": 4210, "clicks": 318, "shares": 12, "reactions": 87, "comments": 4, "sites": ["GOOGLE", "FACEBOOK"], "message": [ { "site": "GOOGLE", "message": "Festive savings across all our stores this week." }, { "site": "FACEBOOK", "message": "Festive savings across all our stores this week!" } ], "cta": [ { "type": { "value": "GET_OFFER", "label": "Get offer" }, "url": "https://jennyhome.example/diwali", "site": "GOOGLE", "tinyUrl": "https://tiny.cc/jh-diwali" } ], "contextInfo": { "couponCode": "DIWALI25", "redeemUrl": "https://jennyhome.example/diwali", "termsConditions": "Valid in-store only. Cannot be combined with other offers.", "title": "25% off storewide", "discount": "25%", "startDay": "2026-06-22", "endDay": "2026-07-06" }, "mediaUrl": [ { "url": "https://cdn.listingsapi.com/posts/51088/diwali.jpg", "site": "GOOGLE", "type": "IMAGE" } ], "publishDetails": [ { "site": "GOOGLE", "status": "PUBLISHED", "createdDate": "2026-06-20", "publishedDate": "2026-06-22", "submissionError": null }, { "site": "FACEBOOK", "status": "PUBLISHED", "createdDate": "2026-06-20", "publishedDate": "2026-06-22", "submissionError": null } ], "postLinks": [ { "site": "GOOGLE", "link": "https://www.google.com/maps/place/?post=51088" } ], "locationIds": [1800289, 1800290, 1800291], "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.
Postingan massal adalah satu kampanye yang dipublikasikan ke banyak lokasi sekaligus (dibuat melalui POST /bulk-posts). Endpoint ini mencantumkan kampanye massal yang mencakup lokasi yang ditentukan, sehingga Anda dapat melihat ringkasan gabungan beberapa toko dari perspektif satu toko. Struktur responsnya identik dengan GET /locations/{locationId}/posts; perbedaannya hanya bahwa record di sini mencakup beberapa locationIds.
Kasus penggunaan: merekonsiliasi peluncuran di seluruh jaringan toko. Setelah meluncurkan "Penawaran Diwali" di setiap toko, panggil GET /locations/1800289/bulk-posts dari salah satu toko untuk memastikan kampanye tersebut menjangkau toko itu, periksa contextInfo yang digunakan bersama (kode kupon, diskon, ketentuan), dan baca publishDetails per situs untuk menemukan FACEBOOK submissionError pada lokasi tersebut.
Hal-hal yang perlu diperhatikan.
- Sama seperti daftar untuk satu lokasi: paginasi berbasis offset melalui
page/perPage,sortFieldsadalah satu objek (bukan array), dan polling yang terlalu sering dapat menyebabkan endpoint mengembalikan HTTP 429. locationIdspada setiap record adalah kumpulan lengkap lokasi yang ditargetkan kampanye, sehingga akan memuat ID selain ID yang ada di path.
Array records di atas merupakan contoh yang representatif. Lokasi seed di lingkungan live (Jenny Home) tidak memiliki kampanye massal, sehingga pemanggilan sebenarnya mengembalikan records: [] dengan pageInfo.totalRecords: 0.
curl -X GET 'https://listingsapi.com/api/v4/locations/<locationId>/bulk-posts' \ -H "Authorization: API $LISTINGSAPI_KEY"