POST/api/v4/posts

Einen Angebotspost erstellen

Erstellt einen OFFER-Social-Post mit Gutschein, Rabatt und Bedingungen und veröffentlicht ihn auf gewählten Plattformen für einen oder mehrere Standorte.

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

Parameter

Body

NameTypErforderlichBeschreibung
inputobjecterforderlichWrapper object. Every field below is a property of `input`, the entire body must be nested under it.
input.postNamestringerforderlichInternal name for the campaign (not shown to customers).
input.locationIdsarray of stringserforderlichBase64-encoded location IDs to publish to (e.g. `TG9jYXRpb246MTgwMDI4OQ==`).
input.postTypestringerforderlichMust be `OFFER`. One of EVENT, OFFER, ANNOUNCEMENT, COVID19, PRODUCT.
input.postSitesarray of stringserforderlichSites to publish to: `GOOGLE`, `FACEBOOK`.
input.postContextInfoobjectoptionalOffer details: `{ title, couponCode, discount, redeemUrl, termsConditions, startDay, endDay }`. `title` labels the offer; `startDay`/`endDay` bound its validity.
input.postMessagearray of objectsoptionalPer-site body text: `{ site, message }`. One entry per site in `postSites`.
input.postScheduledDatesobjectoptionalWhen to publish/expire the post itself: `{ startDatetime, endDatetime, removalSites }`. Distinct from the offer validity in `postContextInfo`.
input.postCtaarray of objectsoptionalOptional call-to-action per site: `{ site, type, url }`. The `CTAType` enum accepts BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, and GET_OFFER. There is no `REDEEM`. For offer posts, Google takes ORDER and Facebook takes GET_OFFER.
input.postMediaUrlarray of objectsoptionalOptional media per site: `{ site, url, type }` where `type` is IMAGE or VIDEO.
input.clientMutationIdstringoptionalOptional client token returned unchanged in the response for correlation.

Beispielanfrage

Body zum direkten Einfügen. Ersetzen Sie Platzhalter-IDs und -Werte durch Ihre eigenen.

Request body
{  "input": {    "postName": "Diwali 25% Off",    "locationIds": ["TG9jYXRpb246MTgwMDI4OQ=="],    "postType": "OFFER",    "postSites": ["GOOGLE"],    "postContextInfo": {      "title": "25% off storewide",      "couponCode": "DIWALI25",      "discount": "25%",      "redeemUrl": "https://jennyhome.example/diwali",      "termsConditions": "Valid in-store only through July 6. Cannot be combined with other offers.",      "startDay": "2026-06-22",      "endDay": "2026-07-06"    },    "postMessage": [      { "site": "GOOGLE", "message": "Celebrate with us: 25% off everything in store this festive week." }    ],    "postCta": [      { "site": "GOOGLE", "type": "GET_OFFER", "url": "https://jennyhome.example/diwali" }    ],    "postMediaUrl": [      { "site": "GOOGLE", "url": "https://cdn.example.com/diwali.jpg", "type": "IMAGE" }    ]  }}

Antworten

200Post accepted. Publishing runs asynchronously, the returned post starts as INPROGRESS.
Response
{  "data": {    "createSocialPost": {      "clientMutationId": null,      "success": true,      "errors": [],      "socialPost": {        "id": "U29jaWFsUG9zdDo0NDEyNA==",        "name": "Diwali 25% Off",        "status": "INPROGRESS",        "type": "OFFER",        "createdAt": "2026-06-20",        "scheduledStartDate": "2026-06-22",        "scheduledEndDate": "2026-07-06",        "sites": ["GOOGLE"],        "message": [          { "site": "GOOGLE", "message": "Celebrate with us: 25% off everything in store this festive week." }        ],        "cta": [          { "type": { "value": "GET_OFFER", "label": "Get offer" }, "url": "https://jennyhome.example/diwali", "site": "GOOGLE", "tinyUrl": null }        ],        "contextInfo": {          "title": "25% off storewide",          "couponCode": "DIWALI25",          "discount": "25%",          "redeemUrl": "https://jennyhome.example/diwali",          "termsConditions": "Valid in-store only through July 6. Cannot be combined with other offers.",          "startDay": "2026-06-22",          "endDay": "2026-07-06",          "startTime": null,          "endTime": null,          "locationType": null        },        "mediaUrl": [          { "url": "https://cdn.example.com/diwali.jpg", "site": "GOOGLE", "type": "IMAGE" }        ],        "publishDetails": [          { "site": "GOOGLE", "status": "PUBLISHING", "createdDate": "2026-06-20", "submissionError": null }        ],        "postLinks": [],        "locationIds": [1800289]      }    }  }}
400Bad request, the body was not wrapped in `input` (error message: `Variable "$input" of required type "CreateSocialPostMutationInput!" was not provided`).
401Unauthenticated, missing or invalid API key.

Erstellt einen Angebotspost: eine Aktionskarte mit einem Gutscheincode, einem Rabatt, einem Link zum Einlösen und Bedingungen. Die Angebotsdetails stehen in postContextInfo (title, couponCode, discount, redeemUrl, termsConditions, startDay, endDay). Angebote lassen sich gut mit einer CTA vom Typ GET_OFFER kombinieren.

Anwendungsfall: eine zeitlich begrenzte Werbeaktion durchführen. Starten Sie für Jenny Home ein Angebot „25% Rabatt zu Diwali“, das vom 22. Juni bis zum 6. Juli gültig ist, mit dem Gutschein DIWALI25 und einer URL zum Einlösen. Legen Sie postType: "OFFER" fest, füllen Sie postContextInfo aus und fügen Sie eine CTA vom Typ GET_OFFER hinzu. Der Aufruf gibt status: INPROGRESS zurück; überprüfen Sie mit GET /posts/{postId}, ob der Post auf jeder Plattform erscheint, und löschen Sie ihn mit DELETE /posts/{postId} vorzeitig, falls die Werbeaktion endet.

Hinweise.

  • Der Request-Body muss in ein input-Objekt eingebettet sein: Jedes Feld ist eine Eigenschaft von input. Ein flacher, nicht eingebetteter Body wird mit HTTP 400 (Variable "$input" of required type "CreateSocialPostMutationInput!" was not provided) abgelehnt.
  • postContextInfo.startDay/endDay begrenzen die Gültigkeitsdauer des Angebots; verwenden Sie postScheduledDates, wenn Sie zusätzlich unabhängig davon planen möchten, wann der Post veröffentlicht wird bzw. abläuft.
  • Geben Sie für jede Plattform in postSites einen postMessage-Eintrag an.
  • Verwenden Sie für einfache Neuigkeiten Ankündigungen; verwenden Sie für Geschehnisse mit festem Datum Veranstaltungen.

Schreiboperation: nicht im Live-Konto ausgeführt. Die gezeigte Anfrage und Antwort wurden anhand des API-Schemas erstellt; bei der Ausführung wird der Post auf echten Google-/Facebook-Profilen veröffentlicht.

Request
curl -X POST 'https://listingsapi.com/api/v4/posts' \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H 'Content-Type: application/json' \  -d '{    "input": {      "postName": "Diwali 25% Off",      "locationIds": [        "TG9jYXRpb246MTgwMDI4OQ=="      ],      "postType": "OFFER",      "postSites": [        "GOOGLE"      ],      "postContextInfo": {        "title": "25% off storewide",        "couponCode": "DIWALI25",        "discount": "25%",        "redeemUrl": "https://jennyhome.example/diwali",        "termsConditions": "Valid in-store only through July 6. Cannot be combined with other offers.",        "startDay": "2026-06-22",        "endDay": "2026-07-06"      },      "postMessage": [        {          "site": "GOOGLE",          "message": "Celebrate with us: 25% off everything in store this festive week."        }      ],      "postCta": [        {          "site": "GOOGLE",          "type": "GET_OFFER",          "url": "https://jennyhome.example/diwali"        }      ],      "postMediaUrl": [        {          "site": "GOOGLE",          "url": "https://cdn.example.com/diwali.jpg",          "type": "IMAGE"        }      ]    }  }'