/api/v4/bulk-postsBeitrag für mehrere Standorte erstellen
Erstellt einen Social-Media-Beitrag und veröffentlicht ihn mit einer einzigen Anfrage an vielen Standorten.
Parameter
Body
Ein als erforderlich markiertes verschachteltes Feld gilt nur, wenn Sie das übergeordnete Feld senden. Ist das übergeordnete Feld optional und lassen Sie es weg, gelten seine erforderlichen Unterfelder nicht.
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| input | object | erforderlich | Wrapper object. Every field below is a property of `input`, the entire body must be nested under it. |
| input.postName | string | erforderlich | Internal name for the campaign (not shown publicly). |
| input.locationIds | array of strings | erforderlich | Base64-encoded location Relay IDs to publish to. |
| input.postType | string | erforderlich | One of `EVENT`, `OFFER`, `ANNOUNCEMENT`, `COVID19`, `PRODUCT`. |
| input.postSites | array of strings | erforderlich | Target publishers: `GOOGLE` and/or `FACEBOOK`. |
| input.postMessage | array of objects | optional | Per-site post body. Each entry: `site` and `message`. |
| input.postMessage[].site | string | erforderlich | Publisher for this message: `GOOGLE` or `FACEBOOK`. |
| input.postMessage[].message | string | erforderlich | Post body text for that site. |
| input.postMediaUrl | array of objects | optional | Per-site media. Each entry: `site`, `url`, and `type` (`IMAGE` or `VIDEO`). |
| input.postMediaUrl[].site | string | erforderlich | Publisher for this media asset. |
| input.postMediaUrl[].url | string | erforderlich | Publicly accessible media URL. |
| input.postMediaUrl[].type | string | optional | `IMAGE` or `VIDEO`. |
| input.postCta | array of objects | optional | Per-site call-to-action button. Each entry: `site`, `type`, `url`. |
| input.postScheduledDates | object | optional | Scheduling window: `startDatetime`, `endDatetime`, and optional `removalSites`. When provided, the post is created with status `SCHEDULED`. |
| input.postScheduledDates.startDatetime | string | erforderlich | ISO-8601 datetime the post goes live. |
| input.postScheduledDates.endDatetime | string | erforderlich | ISO-8601 datetime the post is removed. |
| input.postContextInfo | object | optional | Type-specific details (offer coupon/redeem/terms, or event title/times). Required by `OFFER`, `EVENT`, and `PRODUCT` posts. |
| input.products | array of objects | optional | Product entries for `PRODUCT` posts (name, price, photo, cta). |
| input.componentIdentifier | string | optional | Optional client component reference for tracking. |
| input.componentType | string | optional | Optional client component type for tracking. |
Beispielanfrage
Body zum direkten Einfügen. Ersetzen Sie Platzhalter-IDs und -Werte durch Ihre eigenen.
{ "input": { "postName": "July Reopening Announcement", "locationIds": [ "TG9jYXRpb246MTgwMDI4OQ==", "TG9jYXRpb246MTgwMDI5MA==" ], "postType": "ANNOUNCEMENT", "postSites": ["GOOGLE", "FACEBOOK"], "postMessage": [ { "site": "GOOGLE", "message": "We're back! Visit us this week for our summer menu." }, { "site": "FACEBOOK", "message": "We're back! Swing by for the new summer menu." } ], "postMediaUrl": [ { "site": "GOOGLE", "url": "https://cdn.example.com/summer.jpg", "type": "IMAGE" } ], "postScheduledDates": { "startDatetime": "2026-07-10T09:00:00Z", "endDatetime": "2026-07-24T23:59:00Z" } }}Antworten
200Bulk post accepted. `success` is true and the created campaign is returned. Note the response is keyed under `createSocialPost`: the bulk endpoint returns the same response shape as `POST /posts`.
{ "data": { "createSocialPost": { "clientMutationId": null, "success": true, "errors": null, "socialPost": { "id": "U29jaWFsUG9zdDo5OTIwMQ==", "name": "July Reopening Announcement", "status": "SCHEDULED", "type": "ANNOUNCEMENT", "createdAt": "2026-07-08", "scheduledStartDate": "2026-07-10", "scheduledEndDate": "2026-07-24", "sites": ["GOOGLE", "FACEBOOK"], "locationIds": [1800289, 1800290] } } }}400Bad request, the body was not wrapped in `input` (error message: `Variable "$input" of required type ... was not provided`).
401Unauthenticated, missing or invalid API key.
Erstellt eine einzelne Beitragskampagne und verteilt sie an jeden Standort in locationIds, wobei sie auf den ausgewählten postSites veröffentlicht wird. Anders als bei der Erstellung pro Standort richtet sich ein Aufruf an alle Ihre Standorte, was eine effiziente Möglichkeit ist, eine unternehmensweite Ankündigung, ein Angebot oder eine Veranstaltung zu veröffentlichen.
Anfragestruktur. Der gesamte Body muss in ein input-Objekt eingebettet sein; jedes Feld (postName, locationIds, postType, …) ist eine Eigenschaft von input. Ein flacher, nicht eingebetteter Body wird mit HTTP 400 (Variable "$input" of required type ... was not provided) abgelehnt. Es gelten dieselben Vorgaben wie bei POST /posts, und eine erfolgreiche Antwort verwendet den Schlüssel createSocialPost anstelle eines Schlüssels speziell für die Massenverarbeitung.
Anwendungsfall: unternehmensweite Ankündigung (oben gezeigt). Legen Sie postType: "ANNOUNCEMENT" fest, listen Sie die Standort-IDs auf und geben Sie für jeden Standort einen Wert für postMessage an. Fügen Sie postScheduledDates hinzu, um den Beitrag über einen festen Zeitraum laufen zu lassen (der Beitrag wird dann mit dem Status SCHEDULED erstellt); lassen Sie es weg, um ihn sofort zu veröffentlichen.
Anwendungsfall: ein zeitlich begrenztes Angebot in allen Filialen. Ändern Sie postType in OFFER und geben Sie den Gutschein in postContextInfo an (weiterhin in input eingebettet):
{ "input": { "postName": "Summer 20% Off", "locationIds": ["TG9jYXRpb246MTgwMDI4OQ=="], "postType": "OFFER", "postSites": ["GOOGLE"], "postMessage": [{ "site": "GOOGLE", "message": "20% off through July!" }], "postContextInfo": { "title": "Summer Sale", "couponCode": "SUMMER20", "redeemUrl": "https://example.com/offer", "termsConditions": "Valid through July 31", "startDay": "2026-07-10", "startTime": "09:00", "endDay": "2026-07-31", "endTime": "23:59" } }}Stolperfallen.
- Der Body muss in
inputeingebettet sein; werden die Felder auf der obersten Ebene gesendet, wird HTTP 400 zurückgegeben. postType,postSites,postNameundlocationIdssind erforderlich; die TypenEVENT,OFFERundPRODUCTerfordern zusätzlich die passendenpostContextInfo-Felder (oderproducts-Felder).postSitesakzeptiert nurGOOGLEundFACEBOOK; an den Zielstandorten muss der entsprechende Kanal verbunden sein, andernfalls wird der jeweilige Standort übersprungen.- Bei einem teilweisen oder vollständigen Fehlschlagen der Validierung wird HTTP 200 mit
success: falseund einem gefülltenerrors-Array zurückgegeben; prüfen Siesuccessund verfolgen Sie anschließend die tatsächliche Veröffentlichung pro Standort über den Endpunkt zum Abrufen des Beitrags für mehrere Standorte.
curl -X POST 'https://listingsapi.com/api/v4/bulk-posts' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "input": { "postName": "July Reopening Announcement", "locationIds": [ "TG9jYXRpb246MTgwMDI4OQ==", "TG9jYXRpb246MTgwMDI5MA==" ], "postType": "ANNOUNCEMENT", "postSites": [ "GOOGLE", "FACEBOOK" ], "postMessage": [ { "site": "GOOGLE", "message": "We're back! Visit us this week for our summer menu." }, { "site": "FACEBOOK", "message": "We're back! Swing by for the new summer menu." } ], "postMediaUrl": [ { "site": "GOOGLE", "url": "https://cdn.example.com/summer.jpg", "type": "IMAGE" } ], "postScheduledDates": { "startDatetime": "2026-07-10T09:00:00Z", "endDatetime": "2026-07-24T23:59:00Z" } } }'